Deploying a Django-Vue application on AWS EC2 using NGINX

ํ•˜๋‚˜์˜ EC2 Instance์— ๋‘ ๊ฐœ์˜ Server ๋ฅผ ์˜ฌ๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ์‹

  • 80 ๋ฒˆ ํฌํŠธ - Vue.js frontend serve

  • 8000 ๋ฒˆ ํฌํŠธ - Django backend serve

1. EC2 instance ๋งŒ๋“ค๊ธฐ

image-20200711205303182
  • ์›ํ•˜๋Š” Amazon Machine Image (AMI) ์„ ํƒํ•˜๊ธฐ

    • ๋‚˜๋Š” Ubuntu 16.04 ๋กœ ํ–ˆ๋‹ค

      • Ubuntu ์‚ฌ๋ž‘ํ•ด์š”

2. PEM key ๋งŒ๋“ค๊ธฐ

  • ๊ธฐ์กด์— ์ƒ์„ฑํ•œ PEM key๊ฐ€ ์—†๋‹ค๋ฉด, Instance ์ƒ์„ฑ ํ›„ PEM key๋ฅผ ์ƒ์„ฑํ•  ์ง€ ๋ฌผ์–ด๋ณด๋Š”๋ฐ ๊ทธ ๋•Œ ์ƒ์„ฑํ•˜๋ฉด ๋œ๋‹ค

    • PEM Key๋Š” ์•ˆ์ „ํ•œ ๊ณณ์— ๋ณด๊ด€ํ•ด์•ผ ํ•œ๋‹ค!

    • ํ”„๋ผ์ด๋น— ํ‚ค๋ฅผ ์†Œ์œ ํ•œ ์‚ฌ๋žŒ์€ ๋ˆ„๊ตฌ๋‚˜ instance์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณด์•ˆ๋œ ์œ„์น˜์— ํ”„๋ผ์ด๋น— ํ‚ค๋ฅผ ์ €์žฅํ•ด ๋‘์–ด์•ผ ํ•œ๋‹ค!

3. EC2์— ์ ‘์†ํ•˜๊ธฐ

3-1. PEM key ๋ฅผ ์ €์žฅํ•œ ๊ฒฝ๋กœ๋กœ ์ด๋™

cd ~/[PEM Key ์ €์žฅํ•œ ๊ฒฝ๋กœ]

3-2. ์ ‘๊ทผ ๊ถŒํ•œ ๋ณ€๊ฒฝํ•˜๊ธฐ

sudo chmod 400 [PEM Key ์ด๋ฆ„]
  • chmod ๋Š” ํŒŒ์ผ์˜ ์ ‘๊ทผ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋ช…๋ น์–ด

    • 400 ์€ ํŒŒ์ผ ์†Œ์œ ์ž์˜ ์ฝ๊ธฐ ๊ถŒํ•œ ๋ถ€์—ฌ

3-3. ssh ๋ช…๋ น์œผ๋กœ EC2์— ์ ‘์†ํ•˜๊ธฐ

  1. AWS console์˜ EC2 Instance ๋ชฉ๋ก์—์„œ ์ ‘์†ํ•˜๋ ค๋Š” instance๋ฅผ ์„ ํƒํ•˜๊ณ  ์—ฐ๊ฒฐ (Connect)์„ ๋ˆ„๋ฅด๋ฉด ์—ฐ๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ ํ˜€์žˆ๋Š” modal ์ฐฝ์ด ๋œฌ๋‹ค

  2. ๊ทธ ์ค‘์— ssh -i ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ๋ณต์‚ฌํ•œ๋‹ค

  3. PEM Key๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณณ์—์„œ ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค

    • ์—ฌ๊ธฐ๊นŒ์ง€ ํ•˜๋ฉด Ubuntu Bash๋กœ ์ ‘์†ํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค!

4. EC2์— ๋ฐฐํฌ์— ํ•„์š”ํ•œ ํŒŒ์ผ๋“ค์„ ์„ค์น˜ํ•œ๋‹ค

4-1. nvm ์„ค์น˜

sudo apt update  # update ํ•˜๊ธฐ

sudo apt install -y build-essentail libssl-dev
sudo curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
  • ์‹ค์งˆ์ ์œผ๋กœ ๋…ธ๋“œ๋Š” ๋‚˜์ค‘์— apt update๋ž‘ .bashrc ์ˆ˜์ •ํ•˜๊ณ  ์ ์šฉํ•œ๋‹ค์Œ์— ํ•œ๋ฒˆ์— ์„ค์น˜ํ•  ์˜ˆ์ •

4-2. python 3.7 ์„ค์น˜

sudo apt install software-properties-common    # ์šฐ๋ถ„ํˆฌ 16.04 ์—์„œ add-apt-repository ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์„ค์น˜
sudo add-apt-repository ppa:deadsnakes/ppa     # ํŒŒ์ด์ฌ 3.7์„ ์„ค์น˜ํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ ์ž…๋ ฅ

sudo apt update   
sudo apt upgrade # update & upgrade ํ•˜๊ธฐ

sudo apt install -y python3.7    # -y ์•ˆ๋ถ™์ด๋ฉด ์˜ˆ์Šค ๋…ธ ๋ฌผ์–ด๋ด„
python3.7 --version         # ์•„์ง python --version ํ•˜๋ฉด ์•ˆ ๋‚˜์˜ด

sudo apt-get install python3-pip # pip ์—†๋‹ค๊ณ  ํ•ด์„œ ์„ค์น˜!!!!! 

python3.7 -m pip install pip   # python3.7 ์‚ฌ์šฉํ•˜๋Š” pip ์„ค์น˜
pip3.7 --version             # pip3.7 ๋กœ ์ž…๋ ฅํ•˜๋ ค๋‹ˆ ๋ถˆํŽธ

4-3. .bashrc์— alias ์„ค์ •ํ•˜๊ธฐ

$ sudo vim ~/.bashrc       # ๋ชจ๋“  vim ๋ช…๋ น์–ด๋Š” sudo ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค
# ๋Œ€๋ฌธ์ž G (shift + g) ๋ˆ„๋ฅด๋ฉด ๋งจ ์•„๋ž˜๋กœ ์ด๋™
# ๊ทธ๋ฆฌ๊ณ  i ๋ˆ„๋ฅด๋ฉด Insert mode๋กœ ์ „ํ™˜๋œ๋‹ค
  • ์•„๋ž˜์˜ alias ์ž…๋ ฅํ•˜๊ธฐ

    alias python="python3.7"
    alias pip="pip3.7"
  • esc + :wq + enter๋กœ ์ €์žฅํ•˜๊ณ  ๋‚˜์˜ค๊ธฐ

  • source ๋ช…๋ น์–ด๋กœ ์ˆ˜์ •๋œ ๊ฐ’ ๋ฐ”๋กœ ์ ์šฉํ•˜๊ธฐ

    source ~/.bashrc

4-4. node & npm ์„ค์น˜

nvm install 12.15.0
node -v
npm -v

4-5. nginx ์„ค์น˜

sudo apt install -y nginx
  • nginx ๋กœ ๋นŒ๋“œ๋œ ํŒŒ์ผ ์„œ๋น™ํ•  ์˜ˆ์ •

5. ๋ณด์•ˆ๊ทธ๋ฃน ์„ค์ •ํ•˜๊ธฐ

: AWS console์—์„œ EC2 instance์— ๋Œ€ํ•œ ๋ณด์•ˆ๊ทธ๋ฃน์„ ์„ค์ •ํ•œ๋‹ค

5-2. ๋ณด์•ˆ๊ทธ๋ฃน ๋งŒ๋“ค๊ธฐ

  • 80 ํฌํŠธ์™€ 8000 ํฌํŠธ๋ฅผ ํ—ˆ์šฉํ•  ๋ณด์•ˆ๊ทธ๋ฃน์ด๊ธฐ ๋•Œ๋ฌธ์—

    • ๋ณด์•ˆ๊ทธ๋ฃน ์ด๋ฆ„์€ 80-8000 ์œผ๋กœ ์„ค์ •ํ•˜๊ณ ,

    • ์„ค๋ช…์—๋Š” "Allow 80-8000" ์ด๋ผ๊ณ  ์ ์—ˆ๋‹ค

5-2. Inbound ๊ทœ์น™ ์„ค์ •

  • 80 ํฌํŠธ์™€ 8000 ํฌํŠธ์— ๋Œ€ํ•œ Inbound ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•œ๋‹ค

    image-20200726234840303

6. nginx ์ƒํƒœ ํ™•์ธ

sudo service nginx status
  • Active: active (running) ์ด๋ผ๊ณ  ๋œจ๋Š” ๊ฒƒ ํ™•์ธํ•˜๊ธฐ

  • AWS Console์˜ Instance ๋ชฉ๋ก์—์„œ instance ๋ˆ„๋ฅด๋ฉด ๋‚˜์˜ค๋Š” ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ•ด์„œ Browser์—์„œ ์‹คํ–‰์‹œํ‚ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์™€์•ผ ํ•จ

    image-20200727000312414

7. ๋ฐฐํฌํ•  ํ”„๋กœ์ ํŠธ Clone ํ•˜๊ธฐ

7-1. clone

git clone [ํ”„๋กœ์ ํŠธ web URL]

7-2 Frontend ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ & build

cd frontend
npm install
npm run build

8. ์„œ๋น™ ์ค€๋น„ํ•˜๊ธฐ

8-1. nginx.conf ์ˆ˜์ •

cd /etc/nginx

ls # nginx.conf ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ

sudo vi nginx.conf
  • include /etc/nginx/sites-enabled/*.conf; ์˜ enabled๋ฅผ available๋กœ ์ˆ˜์ •

    • ์ˆ˜์ • ํ›„: include /etc/nginx/sites-available/*.conf;

  • ์ €์žฅ ํ›„ ๋น ์ ธ๋‚˜์˜ค๊ธฐ

8-2. sites-available ์ˆ˜์ •

cd sites-available

ls # default๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธ

sudo vi default
  • ์ฃผ์„์„ ์ œ์™ธํ•˜๊ณ  ์ „๋ถ€ ์ง€์šด ํ›„, ์•„๋ž˜์˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ

    server {
            listen 80;
            location / {
                    root /home/ubuntu/[ํ”„๋กœ์ ํŠธ๋ช…]/frontend/build;
                    index index.html index.htm;
                    try_files $uri $uri/ /index.html;
            }
    }
  • :wq ๋กœ ์ €์žฅ ํ›„ ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ

8-3. nginx ์žฌ ์‹œ์ž‘ํ•˜๊ธฐ

sudo service nginx restart
  • ์‚ฌ์ดํŠธ URL๋กœ ์ ‘์†ํ•˜๋ฉด Frontend ์„œ๋น™ ๋˜๋Š” ๊ฒƒ ํ™•์ธ ๊ฐ€๋Šฅ

9. MySQL ์„ค์ •

9-1. ์„ค์น˜

sudo apt update && sudo apt upgrade # apt ํŒจํ‚ค์ง€ ์ธ์Šคํ†จ๋Ÿฌ ๊ฐฑ์‹ 

sudo apt install mysql-server

sudo apt install libmysqlclient-dev

sudo apt install python3.7-dev

9-2. root ๊ณ„์ • ์„ค์ •

sudo mysql_secure_installation
  • ์ž…๋ ฅ ํ›„ ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •ํ•˜๊ธฐ

9-3. root ๊ณ„์ •์œผ๋กœ ์ ‘์† ํ•ด๋ณด๊ธฐ

sudo mysql -u root -p
  • ์ž…๋ ฅ ํ›„ ์„ค์ •ํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ

9-4. database ๋งŒ๋“ค๊ธฐ

mysql> create database [database๋ช…];

10 . .env file ์„ค์ •

sudo vi .env
  • ํ•„์š”ํ•œ ๋‚ด์šฉ ์ž…๋ ฅํ›„ ๋น ์ ธ๋‚˜๊ฐ€๊ธฐ

11. backend ๊ฐ€์ƒ ํ™˜๊ฒฝ ์„ค์ •

11-1. pipenv ์„ค์น˜

cd ~/[ํ”„๋กœ์ ํŠธ๋ช…]/backend

pip install pipenv --three

11-2. ๊ฐ€์ƒํ™˜๊ฒฝ ์‹คํ–‰ํ•˜๊ธฐ

pipenv shell

11-3. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ํ•˜๊ธฐ

pipenv install -r requirements.txt

pipenv install mysql-client

12. gunicorn ์„ค์ •ํ•˜๊ธฐ

12-1. gunicorn ์„ค์น˜

pipenv install gunicorn

12-2. gunicorn

  • web server gateway interface

    gunicorn django_server.wsgi:application -b 0.0.0.0:8000  --daemon
    • --daemon ๋ถ™์ด๋ฉด Background์—์„œ ์‹คํ–‰๋จ

12-3. ์ž˜ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ

lsof -i TCP:8000

12-4. nginx ์žฌ์‹คํ–‰

sudo service nginx restart

๋ฐฐํฌ ๋„์•~

+

์žฌ๋ฐฐํฌ

ํ˜„์žฌ ๋ฐฉ์‹์œผ๋กœ๋Š” ์žฌ๋ฐฐํฌ ์‹œ ์ •๋ง์ •๋ง ๋น„ํšจ์œจ์ ์ด๋‹ค! ์ž๋™ํ™” ํ•  ์˜ˆ์ •!!!! ์ด๋ ‡๊ฒŒ ๊ทธ๋ƒฅ ๋ชป๋‘ฌ!!!!!!!!

backend ์ˆ˜์ • ์‹œ

lsof -i TCP:8000

sudo kill -9 pid๋ฒˆํ˜ธ

git pull origin master

cd backend

pipenv shell

gunicorn django_server.wsgi:application -b 0.0.0.0:8000 --daemon

sudo service nginx restart

frontend ์ˆ˜์ • ์‹œ

git pull origin master

cd frontend

npm run build

sudo service nginx restart

Last updated

Was this helpful?