๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ก Deploy

[Deploy] AWS EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ Django ํ”„๋กœ์ ํŠธ ๋ฐฐํฌํ•˜๊ธฐ

by sgaeng 2023. 3. 7.

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๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์žฌ์„ค์น˜๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค!

 

Install Docker Engine on Ubuntu

 

docs.docker.com

 

์ด์ œ ๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ 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๏ธโƒฃ ์ธ๋ฐ”์šด๋“œ ์„ค์ •

  1. ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ > ๋ณด์•ˆ ๊ทธ๋ฃน
  2. ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด ๋ณด์•ˆ ๊ทธ๋ฃน์— ๋‚˜์˜จ๋‹ค!
    ๋‚ด๊ฐ€ ์„ค์ •ํ•ด์ฃผ๊ณ  ์‹ถ์€ ๋ณด์•ˆ ๊ทธ๋ฃน ID๋ฅผ ํ™•์ธํ•ด์„œ, "์ฒดํฌ ๋ฐ•์Šค๋ฅผ ์„ ํƒ" ํ•ด์ค€๋‹ค.
  3. (์ฒดํฌ ๋ฐ•์Šค๋ฅผ ์„ ํƒํ•ด์ค˜์•ผ) ์•„๋ž˜ "์ธ๋ฐ”์šด๋“œ ๊ทœ์น™"์ด ๋‚˜์˜จ๋‹ค.
  4. ๊ทธ๋Ÿฌ๋ฉด ์˜ค๋ฅธ์ชฝ ์•„๋ž˜์— ์žˆ๋Š” "์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘"์„ ์„ ํƒํ•œ๋‹ค.
  5. (์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉด) ์™ผ์ชฝ ์•„๋ž˜์ด ์žˆ๋Š” "๊ทœ์น™ ์ถ”๊ฐ€" ๋ฒ„ํŠผ์„ ํ†ตํ•ด์„œ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ํฌํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

๋งŒ์•ฝ 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]