What is this?
- AWS EC2: ์ธ์คํด์ค, ๊ฐ์์ ์ปดํจํฐ ์ด๋ค.
EC2 ๋?
Elastic Compute Cloud์ ์ค์๋ง
= ์ปดํจํฐ๋ฅผ ํต์งธ๋ก ๋น๋ ค์ฃผ๋ ์ปดํจํฐ ์๋ ์๋น์ค
= ์๊ฒฉ ์ ์ด๋ฅผ ์ด์ฉํด์ ์ปดํจํฐ๋ฅผ ์กฐ์ํ๊ณ ๋ ์ด์ ํ์๊ฐ ์์ด์ง ๊ฒฝ์ฐ, ์ธ์ ๋ ์ง ๋ฒ๋ฆด ์ ์๋ ์๋น์ค
ec2์์๋ ๋์ฌํ๋ ํ ๋์ ๊ฐ์์ปดํจํฐ๋ฅผ '์ธ์คํด์ค' ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
1๏ธโฃ ์ธ์คํด์ค ์์ฑํ๊ธฐ
0. ์ปดํจํฐ๋ฅผ ๋น๋ฆฌ๊ธฐ ์ ๋จผ์ ํด์ผํ ๊ฒ์ ์ด๋ค ๋ฆฌ์ (์ง์ญ)์ ์๋ ์ปดํจํฐ๋ฅผ ๋น๋ฆด ๊ฒ์ธ์ง ์ ํ๋ ๊ฒ
- ์ง์ญ์ 'ํ๊ตญ>์์ธ'๋ก ์ค์ ํด์ค๋ค.
1. ‘์ธ์คํด์ค ์์’ ๋ฒํผ
: ์๋ก์ด ์ปดํจํฐ๋ฅผ ๋น๋ฆด ๋ ๊ทธ ์ปดํจํฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ค ์ด์์ฒด์ , ์ด๋ค ์๋น์ค๊ฐ ์ค์น๋ ์ง ์ง์ ํ ์ ์๋ค.
2. ์ฌ์ฉํ OS๋ฅผ ์ ํํ๋ค.
- ๋๋ ubuntu๋ก ์ ํํ๋ค.
- (์ด์ ์ amazon linux๋ก ๋ง๋ค์๋ค๊ฐ ์๋์ ๊ฐ์ ์ด์ ๋ก ๋์๊ฒ๋ ๋ง์ง ์๋ค๊ณ ์๊ฐ๋์ด ๊ทธ ์ดํ์๋ ubuntu๋ก ์ค์นํ๋ค.)
- git, docker๋ฅผ ์ค์นํด์ค์ผํจ (ubuntu์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต, amazon linux์์๋ ์์)
- cli ๋ช ๋ น์ด๊ฐ ๋ค๋ฅด๋ค.
- ์ธ์คํด์ค ์ ํ: ํ๋ฆฌํฐ์ด ๋ผ๊ณ ์ ํ ๊ฒ ๋ง์ดํฌ๋ก(micro)๋ฅผ ์ค์ ํด์ผ ๋ฌด๋ฃ๋ก ์ฌ์ฉํ ์ ์๋ค.
- ์ธ์คํด์ค์ ๊ฐ์: ๊ทธ ๊ฐฏ์๋๋ก์ ์ปดํจํฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ (๋์ด ๋ ๋ง์ด ๋ค๊ฒ ์ง?)
- ํ๋ฆฌํฐ์ด๋ 1 vCPU ๋ก ๊ณ ์ ์ด๊ธฐ ๋๋ฌธ์, 1๊ฐ์ ์ปดํจํฐ๋ง ์์ฑ ๊ฐ๋ฅํจ
3. ํคํ์ด: ๋น๋ฐ๋ฒํธ
๋ณด์์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ์ด ๋น๋ฐ๋ฒํธ๋ฅผ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ ๋ ฅํ๋, ๊ธฐ์ตํ๋ ๋น๋ฐ๋ฒํธ๊ฐ ์๋๋ผ
ํ์ผ์ ์ ์ฅํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ
(1) ์ด๋ฏธ ํคํ์ด๋ฅผ ์์ฑํ ์ ์ด ์๋ค๋ฉด ํคํ์ด ๋ฆฌ์คํธ๊ฐ ์์ ๊ฒ์ด๋ค (๊ทธ๊ฑฐ ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๋จ)
(2) ๋ง์ฝ ์ฒ์์ด๋ผ๋ฉด, ์ค๋ฅธ์ชฝ์ ‘์ ํคํ์ด ์์ฑ’ (ํ๋๊ธ์จ) ๋ฅผ ํด๋ฆญํด์ ์๋์ฒ๋ผ ์์ฑํ๋ฉด ๋๋ค.
- ํค ํ์ด ์ด๋ฆ์ ํธํ๋๋ก ์์ฑํ๋ฉด ๋๋ค. ๋๋ ‘aws-ec2-keypair’๋ผ๊ณ ํ๋ค.
- 'ํค ํ์ด ์ ํ: RSA' & 'ํค ํ์ผ ํ์: .pem' ์ผ๋ก ํ๋ค.
์ด๋ ๊ฒ ํค ํ์ด ์์ฑ(์ฃผํฉ์ ๋ฒํผ)์ ๋๋ฅด๋ฉด
์๋์ผ๋ก .pem ํ์ผ์ด ๋ค์ด๋ฐ์์ง๋ ๊ฒ์ ๋ณผ ์ ์๋ค. (๊ฐ์ธํค์ ํ์ฅ์๋ ๋ฐ๋์ .pem ์ผ๋ก ๋ฐ์์ผ ํ๋ค.)
(= ์ด ํคํ์ด๊ฐ aws์ ์ ์ฅ๋๊ณ , ๋์ ์ปดํจํฐ์๋ ๋ค์ด๋ฐ์์ง๋ ๊ฒ์ด๋ค)
์ด ํคํ์ด ํ์ผ์ ์์ผ๋ก ๋น๋ฐ๋ฒํธ๋ก์์ ๊ธฐ๋ฅ์ ํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ด ํ์ผ์ ๋ค๋ฅธ ์ฌ๋์๊ฒ ๋ ธ์ถ๋๋ฉด ์ ๋์ ๋ ์๋๋ค!!!!! (์ฃผ์ํ์!)
๋ด๊ฐ ์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ํด๋น ํคํ์ด๋ฅผ ์์ฑ(๋๋ ์ ํ)ํ๊ธฐ ๋๋ฌธ์,
๋ง์ฝ ํด๋น ํคํ์ด๋ฅผ ์์ด๋ฒ๋ฆฐ๋ค๋ฉด(์ญ์ ๋๋ค๋ฉด) ๋ค์๋ ํด๋น ์ธ์คํด์ค์ ์ ์ํ ์ ์๋ค.
(์ด ๊ฒฝ์ฐ, ํด๋น ์ธ์คํด์ค๋ฅผ ์ข
๋ฃํ๊ณ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ๊ฒ ์ฅฌ?)
4. ๋คํธ์ํฌ ์ค์ : ๋ฐฉํ๋ฒฝ ์ค์ (๋ณด์ ๊ทธ๋ฃน)
์ฒ์์๋ ์๋์ ๊ฐ์ด (๋จ์ ๋ฒ์ ์ผ๋ก) ๋์์์ ๊ฒ์ด๋ค.
์์ ์ด๋ฏธ์ง์์ ์ค๋ฅธ์ชฝ ์์ 'ํธ์ง' ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์๋์ ๊ฐ์ด ๋์จ๋ค.
- ๋๊ตฌ๋ ์ฌ์ฉํ๋๋ก ํ๊ณ ์ถ๋ค๋ฉด? ๋๋ ์น ์๋ฒ๋ผ๋ฉด ๋๊ตฌ๋ ์ฌ์ฉํ ์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ IP์ ํฌํธ๋ฅผ 0.0.0.0/0 ๋ก ์ค์ ํด์ค์ผํ๋ค. (CIDR ๋ธ๋ก์ 0.0.0.0/0 ์ผ๋ก ์ค์ )
- '๋ณด์ ๊ทธ๋ฃน ๊ท์น ์ถ๊ฐ'๋ฅผ ๋ฒํผ์ ํด๋ฆญํด์, ‘๋ณด์ ๊ทธ๋ฃน ๊ท์น 2’๋ฅผ ํ๋ ๋ ์์ฑํ๋ค. (๋ง์ฝ ์๋ชป ๋ง๋ค์๋ค๋ฉด ์์ ‘์ ๊ฑฐ’๋ฒํผ์ ํตํด ์ญ์ ๋ ๊ฐ๋ฅ)
- ๋๋จธ์ง ๊ฒ๋ค(๋ณด์๊ทธ๋ฃน์ด๋ฆ, ๋ฑ)์ ๋ํดํธ ๊ฐ์ผ๋ก ๋๋ค.
5. ์คํ ๋ฆฌ์ง ๊ตฌ์ฑ
์คํ ๋ฆฌ์ง: ์ ์ฅ์ฅ์น์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๊ฒ
์ฒ์์๋ ์๋์ ๊ฐ์ด (๋จ์ ๋ฒ์ ์ผ๋ก) ๋์์์ ๊ฒ์ด๋ค.
์์ ์ด๋ฏธ์ง์์ ์ค๋ฅธ์ชฝ ์๋์ 'ํธ์ง' ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์๋์ ๊ฐ์ด ๋์จ๋ค. (๋๋ ์ค๋ฅธ์ชฝ ์์ '์ด๋๋ฐด์ค๋'๋ฅผ ํด๋ฆญํด๋ ๋๋ค)
- ํ๋ฆฌํฐ์ด ๊ณ ๊ฐ์ ์ต๋ 30GB๊น์ง ๋ฒ์ฉ ์คํ ๋ฆฌ์ง ์ฌ์ฉ ๊ฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์! ๋๋ 30GB๋ก ์ค์ !
(ํ๋ค๊ฐ ๋ค์ 10์ผ๋ก ๋ฐ๊ฟ)- (๋ง์ฝ ํ๋ฆฌํฐ์ด๊ฐ ์๋๋ผ๋ฉด, GB๋ฅผ ์ฆ๊ฐํ ์๋ก ๋์ ๋ ์ง๋ถํด์ผ ํ๋ค.)
- ์ข ๋ฃ์ ์ญ์ , ์ํธํ ์ฌ๋ถ๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๋ค.
6. ๊ทธ ์ธ: ์ธ์คํด์ค ์์ฑ ์๋ฃ
๊ณ ๊ธ ์ธ๋ถ ์ ๋ณด๋ ๋ํดํธ๋ก ๋๋ค.
์์ฝ์ ํตํด์ ๋ด๊ฐ ์ค์ ํ ์ธ์คํด์ค ์คํ์ด ๋ง๋์ง ํ์ธํ๋ค.
ํ์ธ ํ ์ฃผํฉ์ ๋ฒํผ '์ธ์คํด์ค ์์'์ ๋๋ฅด๋ฉด ์๋์ ๊ฐ์ด ์ธ์คํด์ค๊ฐ ์์ฑ(์์)๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
<์ฌ๊ธฐ๊น์ง ์ธ์คํด์ค ์์ฑ ์๋ฃ!>
2๏ธโฃ ์ธ์คํด์ค ์ฐ๊ฒฐ ๋ฐ ์คํํ๊ธฐ
์์ฑํ ์ธ์คํด์ค ID์ ๋ค์ด๊ฐ๋ฉด ์๋์ ๊ฐ์ด ๋์จ๋ค.
์ค๋ฅธ์ชฝ '์์ ' > '์ฐ๊ฒฐ'์ ์ ํํ๋ฉด
์๋์ ๊ฐ์ด ์ธ์คํด์ค์ ์ฐ๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ(ssh์ ์ฐ๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ)์ด ๋์จ๋ค.
๋๋ ๋ฐฉํ๋ฒฝ ์ค์ ํ ๋, ssh, http ๋ฅผ ์ด์ด๋์๊ธฐ ๋๋ฌธ์! ํฐ๋ฏธ๋(ssh)์ http๋ก ์ ์ํ ์ ์๋ค.
[์ธ์คํด์ค๋ฅผ ์ฐ๊ฒฐ/์คํํ๋ ๋ฐฉ๋ฒ]
1. EC2 ์ธ์คํด์ค ์ฐ๊ฒฐ (= ์น ์ ์ฐ๊ฒฐ)
: ์์ฃผ ๊ฐ๋จํ๊ฒ ์น ์์์ ec2 ์ธ์คํด์ค ์์, ํฐ๋ฏธ๋(์)์ ์ ๊ทผํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณต (=์น์์ ์ธ์คํด์ค๋ฅผ ์ ์ดํ๋ ๋ฐฉ๋ฒ์๋ ์ฐ๊ฒฐ๋ฒํผ์ ๋๋ฅด๊ณ ์ ์ ๊ธฐ๋ค๋ฆฌ๋ฉด ๋จ)
ํด๋น ec2์ธ์คํด์ค๋ฅผ ๋ด๊ฐ ์๊ฒฉ์ ์ดํ ์ ์๋ ์์ด ๋์ค๊ฒ ๋๋ค.
์ฌ๊ธฐ์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด, ์ด๊ฒ์ ๋ด ์ปดํจํฐ๊ฐ ์๋, ec2 ์ธ์คํด์ค๋ฅผ ์ ์ดํ๊ณ ์๋ ๊ฒ์ด๋ค.
2. ssh ํด๋ผ์ด์ธํธ (= secure shell์ ์ด์ฉํด์ ์ธ์คํด์ค ์ ์ดํ๋ ๋ฐฉ๋ฒ)
โญ๏ธ ๋๋ SSH๋ก ์ ์ํ ๊ฒ์ด๋ค! โญ๏ธ
ํฐ๋ฏธ๋(ssh)์ ํตํ aws ec2 ์ธ์คํด์ค ์ ์
1. terminal ์์ pemkey๊ฐ ์กด์ฌํ๋ directory๊ฒฝ๋ก๋ก ์ด๋
cd {pemkey๊ฐ ์กด์ฌํ๋ directory๊ฒฝ๋ก}
2. keyํ์ผ์ ๋ํ ๊ถํ ์ค์ ๋ณ๊ฒฝ
chmod 400 {pemKeyName}.pem
- chmod ๋ค์ ์ซ์ 3๊ฐ๋ ์ฐจ๋ก๋๋ก ๋/๊ทธ๋ฃน/์ ์ฒด ์ ๋ํ ๊ถํ์ ์๋ฏธํ๋ค.read(4), write(2), execute(1)์ ์กฐํฉ์ผ๋ก ๊ถํ์ ๋ํ๋ธ๋ค.์๋ฅผ ๋ค์ด, 5 = 4 + 1๋ก read + write์ ๊ถํ์ด ์์์ ์๋ฏธํ๋ค.์ฆ chmod 400 ์ ์๋ฏธ๋ 4/0/0์ด๋ฏ๋ก ๋์๊ฒ๋ง ์ฝ๊ธฐ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒ์ด๋ค.
- (๋์ ๊ฒฝ์ฐ) $ chmod 400 aws-ec2-keypair.pem : ‘๋๋ง ์ฝ๊ธฐ ๊ฐ๋ฅ’ ํ๋๋ก ํ์ผ ๊ถํ ๋ณ๊ฒฝ
3. ssh ์ ์ = ํผ๋ธ๋ฆญ DNS์(๋ฅผ) ์ฌ์ฉํ์ฌ ์ธ์คํด์ค์ ์ฐ๊ฒฐ
sudo ssh -i ‘{pemKeyName}.pem’ ubuntu@{EIP}
- ec2 ์ธ์คํด์ค์ ํ๋ ฅ์ IP ์ฃผ์์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.์ด๋, ์์ด๋ก ๋์๋์ง ํ์ธ ํด์ผํ๊ณ , ์ ๋ ฅ์ค์ธ์ง ํ์๋์ง ์์ผ๋ฏ๋ก ์คํ๋์ง ์๊ฒ ์ ๋ ฅํ๋ค.
- (์ ๋ ฅ์ด ์ด๋ ต๋ค๋ฉด?) EC2 > ์ธ์คํด์ค์ ์ฐ๊ฒฐ > SSH ํด๋ผ์ด์ธํธ ์ ๋ค์ด๊ฐ์ "์"๋ฅผ ๋ณต๋ถํ๋ฉด ๋๋ค!
[์ฐธ๊ณ ]
๋ฆฌ๋ ์ค(Linux)๋ ๋งฅ(Mac)์์ SSH๋ฅผ ์ด์ฉํ์ฌ ํ ์์คํ ์ต์ด ์ ๊ทผ์ "Are you sure you want to continue connecting (yes/no)?" ์ ๊ฐ์ ์ง๋ฌธ์ ํญ์ ๋ฌผ์ด ๋ณธ๋ค. (yes๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค)
๋ฌผ๋ก ์ต์ด ์ ๊ทผ์ yes๋ฅผ ์ ๋ ฅ ์ดํ์๋ known_hosts ํ์ผ์ ํด๋น ์์คํ ์ ๊ณต๊ฐํค(Public Key)๊ฐ ๋ฑ๋ก๋จ์ ๋ฐ๋ผ ๋๋ฒ์งธ ์ ๊ทผ ๋ถํฐ๋ ๋ฌผ์ด ๋ณด์ง ์๋๋ค.
ubuntu ์ธ์คํด์ค์ ์ ์ ์๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
3๏ธโฃ ๋ด ํ๋ก์ ํธ๋ฅผ ํด๋น ์๋ฒ ํด๋ผ์ฐ๋์ ๋์ฐ๊ธฐ
(๋ง์ฝ amazon linux๋ผ๋ฉด git ๊ณผ docker๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค์นํด์ค๋ค.)
๋๋ ubuntu ๋๊น ์ด๋ฏธ ์๋ git๊ณผ docker์ ๋ฒ์ ์ ํ์ธํด์ฃผ๊ณ , ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์๋ ๋ช ๋ น์ด๋ก ์ ๋ฐ์ดํธ ํด์ค๋ค.
$ git version
$ docker version
$ sudo apt-get upgrade
[์ฐธ๊ณ ] ๋ง์ฝ ๋์ปค๋ฅผ ์ฐพ์ ์ ์๋ค๊ณ ํ๋ฉด, (๋์ปค๊ฐ ์ ์คํ๋์ง ์๋ ๊ฒฝ์ฐ)
https://docs.docker.com/engine/install/ubuntu ํด๋น docs๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ์ค์น๋ฅผ ํ๋ฉด ๋๋ค!
์ด์ ๋์ ํ๋ก์ ํธ๋ฅผ github repo๋ฅผ ํตํด ํด๋น ์ธ์คํด์ค์์๋ ์คํ๋๋๋ก ๋ถ๋ฌ์ฌ ๊ฒ์ด๋ค.
$ git init
$ git clone [repo]
[์ฐธ๊ณ ] $ docker compose up ๋ช ๋ น์ด๋ก ๋์ปค๋ฅผ ์คํํ๋ ค๊ณ ํ์ ๋ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋์จ๋ค๋ฉด?
โก๏ธ ๊ถํ ์ด์์ด๋ค : ํด๋น(https://seulcode.tistory.com/557) ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ ํด๊ฒฐํ์๋ค.
๐ก ์๋์ ๋ด์ฉ์ docker๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ธ์คํด์ค์ ์ง์ ๊ฐ์ํ๊ฒฝ์ ์ค์นํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ฐฐํฌํ์๋ค.
๋ง์ฝ docker&nginx๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ๊ณ ์ถ๋ค๋ฉด https://kkangsg.tistory.com/129 ๋ฅผ ์ฐธ๊ณ ํ์
4๏ธโฃ ec2์ ์ง์ poetry ์ค์นํด์ฃผ๊ธฐ
์ฐธ๊ณ ๋งํฌ: https://python-poetry.org/docs/
$ curl -sSL https://install.python-poetry.org | python3 -
$ export PATH="/home/ubuntu/.local/bin:$PATH"
๋ด๊ฐ git cloneํด์จ Repo์์๋ pyproject.toml์ด ์๊ธฐ ๋๋ฌธ์ poetry init์ด ์๋ $ poetry install์ ํด์ค๋ค.
๊ฐ์ํ๊ฒฝ ํ์ฑํ : $ poetry shell
์๋ฒ ์คํํ์ ๋ secret key๊ฐ ์๋ค๊ณ ๋ฌ๋ค. : $ python3 manage.py runserver
์๋ํ๋ฉด, ๋ด๊ฐ secret key๋ฅผ .env์ ๋ฐ๋ก ๋นผ๋์๊ณ .gitignore์ .env๋ฅผ ์ถ๊ฐํจ์ผ๋ก์จ .env๊ฐ git์ ์ฌ๋ผ๊ฐ์ง ์๋๋ก ํ๊ธฐ ๋๋ฌธ์ด๋ค! (์ด๊ฒ ์ ์์ด๋ค! ๋ณด์์์ ์ด์๋ก!)
๋ฐ๋ผ์ ec2 ์ธ์คํด์ค ์์ "๋ด๊ฐ ์ง์ " .envํ์ผ๊ณผ secret_key๋ฅผ ์์ฑํด์ค์ผํ๋ค.
# .env ํ์ผ ์์ฑํ๋ฉด์ ์์ ๋ด์ฉ๋ ํจ๊ป ์
๋ ฅํ๊ธฐ
$ echo "๋ด์ฉ" > .env
# ๋ด๊ฐ ์์ฑํ ๋ด์ฉ์ด ํด๋น ํ์ผ ์์ ์ ๋ค์ด๊ฐ๋์ง ํ์ธํ๊ธฐ
$ cat .env
secret_key๊ฐ ์ ์ ๋ ฅ๋ ๊ฒ์ ํ์ธํ๋ค!
์ด์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด ์ง๊ธ๊น์ง์ migrate๋ฅผ ๋ถ๋ฌ์ค์!
$ python3 manage.py migrate
$ python3 manage.py runserver
์์ ๋ช ๋ น์ด๋ก ์๋ฒ๋ฅผ ์คํํ๋ฉด, ์๋ฒ๋ ์คํ๋์ง๋ง,
ec2์์์ public ip ์ฃผ์์ ์ฐ๊ฒฐ์ด ์๋์ด์์ด์, ์ฌ์ดํธ ์ฐ๊ฒฐ์ด ์๋๋ค๋ ํ์ด์ง๊ฐ ๋ณด์ธ๋ค.
๋ณดํต ๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ฌ๊ธฐ๊น์ง๋ง ์ธํ
ํ๊ณ http://localhost:8000 ์ผ๋ก django ์ด๊ธฐ ํ๋ฉด์ ๋ณผ ์ ์์ง๋ง
EC2๋ ๋ณด์์, ์ธ๋ถ์์ ์ ์ํ๋ port๋ฅผ ์ ํํ๊ณ ์๋ค
์ด๋ฐ port๋ค์(django์์ ์ฌ์ฉํ๋ 8000 port ๋ฑ) ์ธ๋ถ์์ ์ ์ํ๊ธฐ ์ํด์๋ ์๋์ผ๋ก ์ด์ด์ค์ผ ํ๋ค.
์ด๋ฅผ "์ธ๋ฐ์ด๋ ์ ์ฑ
"์ด๋ผ ํ๋ค.
5๏ธโฃ ์ธ๋ฐ์ด๋ ์ค์
- ๋คํธ์ํฌ ๋ณด์ > ๋ณด์ ๊ทธ๋ฃน
- ์ธ์คํด์ค๋ฅผ ๋ง๋ค์๋ค๋ฉด ๋ณด์ ๊ทธ๋ฃน์ ๋์จ๋ค!
๋ด๊ฐ ์ค์ ํด์ฃผ๊ณ ์ถ์ ๋ณด์ ๊ทธ๋ฃน ID๋ฅผ ํ์ธํด์, "์ฒดํฌ ๋ฐ์ค๋ฅผ ์ ํ" ํด์ค๋ค. - (์ฒดํฌ ๋ฐ์ค๋ฅผ ์ ํํด์ค์ผ) ์๋ "์ธ๋ฐ์ด๋ ๊ท์น"์ด ๋์จ๋ค.
- ๊ทธ๋ฌ๋ฉด ์ค๋ฅธ์ชฝ ์๋์ ์๋ "์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง"์ ์ ํํ๋ค.
- (์๋์ ๊ฐ์ด ๋์ค๊ฒ ๋๋ฉด) ์ผ์ชฝ ์๋์ด ์๋ "๊ท์น ์ถ๊ฐ" ๋ฒํผ์ ํตํด์ ๋ด๊ฐ ์ฌ์ฉํ ํฌํธ๋ฅผ ์ถ๊ฐํด์ค๋ค.
๋ง์ฝ nginx์์ด, ๋ก์ปฌ์์ ํ๋ฏ 8000๋ฒ ํฌํธ๋ก ์ด์ด์ค๋ค๋ฉด ์๋์ ๊ฐ์ด ์ธ๋ฐ์ด๋ ์ค์ ์ ํด์ฃผ๋ฉด ๋๋ค.
nginx๋ ์ฌ์ฉํ๋ค๋ฉด 80๋ฒ ํฌํธ๋ ์ด์ด์ฃผ๋ฉด ๋๋ค.
(๋์ ๊ฒฝ์ฐ)
๋๋ django ํ๋ก์ ํธ์ด๊ณ nginx๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฐ๋จํ ์๋ฒ ๋ฐฐํฌ์๊ธฐ ๋๋ฌธ์
$ python3 manage.py runserver 0:8000
(๋ค์ ํฌํธ๋ฒํธ ๊ผญ ์ ์ด์ค์ผํ๋ค!)
์์ ๋ช ๋ น์ด๋ก ์ ์ํ๊ธฐ ์ํด์๋ EC2์ 8000๋ฒ ํฌํธ๋ฅผ ์ด์ด์ค์ผ ํด์ ์์ ๊ฐ์ด ์ถ๊ฐ์ ์ผ๋ก ์ค์นํด์คฌ๋ค.
๋ํ config > settings.py์, ec2 ์ธ์คํด์ค ์์ ์๋ ํผ๋ธ๋ฆญ IPv4 ์ฃผ์๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
# config > settings.py
ALLOWED_HOSTS = ["Public IPv4 ์ฃผ์"]
๊ทธ๋ฌ๋ฉด public IP ์ฃผ์(๋๋ public DNS ์ฃผ์) ๋ค์ ํฌํธ ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ๋ธ๋ผ์ฐ์ ์์ ์ ์ํ ์ ์๋ค.
http://52.79.235.150:8000/
๋์ ๊ฒฝ์ฐ ์์ ๊ฐ์ด ์ฃผ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ ์ํ ์ ์๊ฒ ๋๋ค!
[์ฐธ๊ณ ]
nginx๊ฐ ์์ด์ผํ๋ ์ด์ ? (reverse proxy๊ฐ ํ๋ ์ผ? ํ์ํ ์ด์ ?) : https://kkangsg.tistory.com/128
6๏ธโฃ โญ๏ธ ๋ด๊ฐ ํฐ๋ฏธ๋์์ ๋์๋ ์๋ฒ๊ฐ ๊ณ์ ๋์๊ฐ๊ฒ ํ๊ณ ์ถ๋ค๋ฉด? (๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค)
(๋ฌธ์ ์ํฉ) ์์ ๋๋ฉด ํด๋น ํ๋ก์ธ์ค๋ ์๋์ ์ผ๋ก ์ข ๋ฃ๋๋ค
(ํด๊ฒฐ ๋ฐฉ๋ฒ) nohup ๋ช ๋ น์ด ์ฌ์ฉํ๊ธฐ!
# ์คํ๋ฐฉ๋ฒ
$ nohup [PROCESS_NAME] &
# (๋์ ๊ฒฝ์ฐ)
$ nohup python3 manage.py runserver 0:8000 &
[PROCESS_NAME] ์๋ ๋ด๊ฐ ์คํ์ํค๊ณ ์ถ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
๊ทธ๋ฌ๋ฉด ์์ ๊ฐ์ด nohup: ignoring input and appending output to 'nohup.out' ๋ผ๋ ๋ฉ์์ง๊ฐ ๋ฌ๋ค. ์ด๋ฌ๋ฉด ์ ์์ ์ผ๋ก ์๋ฃ๋ ๊ฒ์ด๋ค.
์ด ๋ฉ์์ง์ ๋ป์ 'ํ๋ก์ธ์ค์ STDOUT(ํ์ค์ถ๋ ฅ)์ nohup.out ํ์ผ๋ก ์ ์ฅํ๊ฒ ๋ค' ๋ผ๋ ๋ป์ด๊ณ , ํ ํดํฐ ์์น์ nohup.out ํ์ผ์ด ์๋กญ๊ฒ ์๊ธด ๊ฒ์ ๋ณผ ์์๋ค.
vim ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ nohup.out ํ์ผ์ ์ดํด๋ณด๋ฉด ํด๋น IP์ ์ ๊ทผํ ๋ชจ๋ ๊ธฐ๋ก์ ๋ณผ ์ ์๋ค.
โญ๏ธ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค ์ข ๋ฃํ๋ ๋ฐฉ๋ฒ
# 1. ์๋ ๋ช
๋ น์ด๋ฅผ ํตํด์ PID๋ฅผ ์ฐพ๋๋ค.
$ ps -ef | grep [PROCESS]
# 2. kill ๋ช
๋ น์ด๋ฅผ ํตํด์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃ์ํจ๋ค.
$ kill -9 [PID]
1. ps ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ ์ฐพ๊ณ ์ถ์ ํ๋ก์ธ์ค๋ฅผ ์ฐพ๋๋ค.
2. PID๋ฅผ ์ด์ฉํด์ ํด๋น ํ๋ก์ธ์ค๋ฅผ kill ํด์ค๋ค!
(์ด๋ PID๋ 2๋ฒ์งธ ์ด์ด๋ค.)
[์ฐธ๊ณ ]
๋ง์ฝ Error: That port is already in use. ์๋ฌ๋ฉ์์ง๊ฐ ๋์จ๋ค๋ฉด
์๋์ ๊ฐ์ด ํด๊ฒฐํ์!
# 1. ์๋ ๋ช
๋ น์ด๋ฅผ ํตํด์ ํด๋น ํฌํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ํ๋ก์ธ์ค๋ฅผ ์ฐพ๋๋ค.
$ lsof -i:{์ด๋ฏธ ์ฌ์ฉ์ค์ธ port num}
# 2. ์์์ ์ฐพ์ ํ๋ก์ธ์ค์ PID๋ฅผ ํตํด์ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃ์ํจ๋ค.
$ kill -9 [PID]