๊ธฐ์
ํ์
์งํํ๋ฉด์, ๊ฑฐ์ ์ดํ์ ๊ฑธ์ณ์ ์งํํ๋ ์์
์ด์๋ค.
์์ฝ๋์์ ํ๋ก์ ํธ ํ ๋๋, ํฐ๋ฏธ๋์์ runserver
ํน์ gunicorn
์ผ๋ก ์๋ฒ ์ฌ๋ ๊ฒ ๊น์ง๊ฐ ์ ๋ถ์๋๋ฐ ์ฒ์ ์ ํ๋ nginx๋ฅผ ํ๊ฒ ๋๋ ๋ง์ ์ํ์ฐฉ์ค๊ฐ ์์๋ค.
๐ ๋์ ํ๊ฒฝ
- mac os
- miniconda ์ฌ์ฉ
- Django 3.1.1
- python 3.8
๐ ํ์ฌ ์ํฉ
1. ๋ก์ปฌ์ Django ์ด๊ธฐ ์ธํ ๋ฐ views ์์ฑ
2. AWS EC2 ์์ฑ
3. ํฐ๋ฏธ๋์์ AWS ์ ์ํด์ gunicorn ๋ฐ nginx ์ค์ ํด์ ์๋ฒ ์ด๊ธฐ
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์๊ฐ ์๋ ์์ ์ด๋ผ ๋ฐ๋ก ์ค์ ํ์ง ์์๋ค
๋ฏธ๋์ฝ๋ค & ์ฅ๊ณ ๊ธฐ์ด์ ํ & ํ์ด์ฌ์ด ์ค๋น๋์ด ์๋ค๋ ๊ฐ์ ํ์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
https://aws.amazon.com/ko/ ์ ์ + ํ์๊ฐ์ + ๋ก๊ทธ์ธ
์๋น์ค > EC2 > ์ธ์คํด์ค ์์
Ubuntu Server 18.04 LTS (HVM), SSD Volume Type
์ ํ
t2 / t2 micro(ํ๋ฆฌํฐ์ด ์ฌ์ฉ๊ฐ๋ฅ) ์ ํ > ๋ค์:์ธ์คํด์ค ์ธ๋ถ ์ ๋ณด ๊ตฌ์ฑ
์๋ ์ด๋ฏธ์ง์ ๊ฐ์ด ๊ตฌ์ฑ
๋ค์:ํ๊ทธ ์ถ๊ฐ
๋ฒํผ ํด๋ฆญํ๋จ ๊ท์น ์ถ๊ฐ ๋ฒํผ
- ์ ํ : ์ฌ์ฉ์์ง์ TCP๊ท์น
- ํฌํธ๋ฒ์ : 8000
- ์์ค : ์์น ๋ฌด๊ด
๊ฒํ ๋ฐ ์์๋ฒํผ ๋๋ฅด๋ฉด ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค.
์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด์, ํคํ์ด ํ์ผ์ ๋ค์ด ๋ฐ์ ๋์ ๊ฒ ์์ ๊ฒ์ด๋ค.
ssh๋ก ์ ์์ด ๊ฐ๋ฅํ๊ฒ๋ pemํ์ผ์ ๊ถํ์ ๋ฐ๊ฟ์ค์ผ ํ๋ค.
# ํฐ๋ฏธ๋์ ํค๊ณ , pem ํ์ผ์ ๋ฐ์ ๋์ ์์น๋ก ๊ฐ๋ค
# ex. aws ๋ผ๋ ํ์ผ์ ์๋ค๋ฉด, cd aws
# ํด๋น ์์น์์ ์๋์ ๋ช
๋ น์ด ์
๋ ฅ
$ chmod 400 ํคํ์ดํ์ผ์ด๋ฆ.pem
๊ถํ์ ๋ฐ๊ฟ์คฌ์ผ๋ฉด, ssh ์ ์์ ํด๋ณด์
$ ssh -i ํคํ์ดํ์ผ์ด๋ฆ.pem ubuntu@๊ณต์ธIP
ex. ssh -i proejct.pem ubuntu@33.121.14.11
33.121.14.11 ์ ์๋ก ๋ ๊ฒ์ด๋ฉฐ, ๊ณต์ธ IP๋ AWS์ EC2 ๋ก ๊ฐ๋ฉด ์์์ ์์ฑํ ์ธ์คํด์ค๊ฐ ์์ ๊ฒ์ด๋ค. ์ธ์คํด์ค๋ฅผ ํด๋ฆญํ๋ฉด ํผ๋ธ๋ฆญ IPv4
์ฃผ์๊ฐ ์๋๋ฐ, ์ด ์ฃผ์๋ฅผ ๋ฃ์ผ๋ฉด ๋๋ค.
์ฐ๋ถํฌ๋ผ๋ ์๋ก์ด ํ๊ฒฝ์ด ํฐ๋ฏธ๋์์ ์ด๋ฆฐ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ๋ด๊ฐ ๋ก์ปฌ์์ ๊ฐ์ง๊ณ ์๋ ๊ฒ๋ค์ ์ฐ๋ถํฌ ํ๊ฒฝ์ ์๋ ์ํ๋ค. ๊ทธ๋์ ๋ฏธ๋์ฝ๋ค ๋ฐ ํ์ํ ํด๋ค์ ์ค์นํด์ค์ผ ํ๋ค.
# ํฐ๋ฏธ๋๋ก ๋์์์ ์๋ ๋ด์ฉ ์
๋ ฅ(๋งํฌ๋ ์์ ์ด๋ฏธ์ง์ฒ๋ผ ๋งํฌ ๋ณต์ฌ ํ ๊ฒ)
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
#์คํ๊ถํ ์ฃผ๊ธฐ
$ chmod +x Miniconda3-latest-Linux-x86_64.sh
#๋ฏธ๋์ฝ๋ค ์คํ์์ผ์ ์ค์นํ๊ธฐ
$ ./Miniconda3-latest-Linux-x86_64.sh
# ์ํฐ์ํฐ์ํฐ ๊ณ์ ๋๋ฅด๊ณ ๋ค yesํด์ ์ค์นํ๊ธฐ
# bash shell ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด์ ๋ก์ปฌ ํ๊ฒฝ๊ณผ ๊ฐ๊ฒ ์ค์ ํ๊ธฐ
$ source .bashrc
# ์ด๋ ๊ฒ ์
๋ ฅํ๋ฉด ๋ช
๋ น๋ผ์ธ ์ ์ผ ์์ (base) ์์ฑ
# ํจํค์ง ์
๋ฐ์ดํธ ๋ฐ ์
๊ทธ๋ ์ด๋
$ sudo apt-get update
$ sudo apt-get upgrade
# mysql ํด๋ผ์ด์ธํธ ์ค์น์ ์๋ฌ ์๋๊ฒ ํ๋ ค๋ฉด gcc ์ค์นํด์ผํจ
$ sudo apt-get install gcc
$ sudo apt-get install libmysqlclient dev
# ํ์ฌ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ์์ ๋๊ฐ๋ ํ์ํ์ง ์๋ค
# ๊ฐ์ํ๊ฒฝ ์์ฑ
$ conda create -n project python=3.8
# project๋ ์์ฑํ๊ณ ์ถ์ ๊ฐ์ํ๊ฒฝ ์ด๋ฆ์ด๋ผ, ์ํ๋ ๊ฑธ๋ก ํ๋ฉด ๋๋ค.
# ๊ฐ์ํ๊ฒฝ ํ์ฑํ
$ conda activate project
# git clone๋ฐ๊ธฐ
# ๋์ ๊ฒฝ์ฐ, git์ ์ฅ๊ณ ์ด๊ธฐ์ธํ
์์
ํ ํ์ผ์ ์ฌ๋ ค๋จ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ํด๋ก ๋ฐ์๋ค.
$ git clone ๊น ์ฃผ์
# ๋๋ ํ ๋ฆฌ๋ก ์ด๋
$ cd ์ฅ๊ณ ๋๋ ํ ๋ฆฌ ์ด๋ฆ
# requirements ์ค์
# ๋ก์ปฌ์์ ์ฅ๊ณ ์ด๊ธฐ์ธํ
ํ ๋, ํ๋ก์ ํธ์ ํ์ํ ํจํค์ง ๋ชฉ๋ก์ requirements ํ์ผ๋ก ์์ฑํด๋๋ค.
# ๋ฐฐํฌ๋ฅผ ํด์ผํ๊ธฐ ๋๋ฌธ์, ์ด ํ์ผ์ ์๋ ๋ฆฌ์คํธ๋ฅผ ์ฐ๋ถํฌ์์๋ ๋๊ฐ์ด ์ค์นํด์ค์ผํ๋ค.
# ์๋์ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๋ฉด requirementsํ์ผ์ ์๋ ํจํค์ง๊ฐ ํ๋ฒ์ ์ค์น๋๋ค.
$ pip install -r requirements.txt
$ pip freeze (์ ๋๋ก ์ค์น๋๋ ํ์ธํ๋ ๋ช
๋ น์ด)
# ์ ๋๋ก ์๋ํ๋์ง ํ์ธํด๋ณด๊ธฐ
$ python manage.py runserver 0.0.0.0:8000
gunicorn์?
$ pip install gunicorn
$ pip freeze > requirements.txt
# requirements ํ์ผ์ ์๋ ํจํค์ง๋ฅผ ์ฐ๋ถํฌ์์๋ ์ค์นํ๊ฑฐ๋๊น requirements์๋ ๋๊ฐ์ด ์ฎ๊ธฐ๊ธฐ
# nohup ์ด๋ผ๋ ํด๋ก gunicorn ๋์์ํค๊ธฐ
$ nohup gunicorn --bind=0.0.0.0:8000 ํ๋ก์ ํธ๋ช
.wsgi &
# ํ๋ก์ ํธ ๋ช
์ django ์ค์ ํ ๋, ์์ฑํ๋ ํ๋ก์ ํธ ๋ช
# settings.py ๊ฐ ์๋ ํด๋์ ๋ช
# ์ ๋๋ก ์๋ํ๋ log ํ์ธํ๊ธฐ
$ ps -ef | grep python
# ํฐ๋ฏธ๋์์ ์๋ ๋ช
๋ น์ด๋ก sites-enabled / sites-enabled ์์น๋ก ์ด๋
# ์๋ ๋๊ฐ์ ๊ฒฝ๋ก์ ์๋ ๋ด์ฉ ๋๊ฐ์ด ์
๋ ฅํ๊ธฐ
$ cd /etc/nginx/sites-enabled
$ cd /etc/nginx/sites-available
# ์์ ๊ฒฝ๋ก์ ํ๋ก์ ํธ ๋ช
(settings.py๊ฐ ์๋ ํด๋๋ช
)์ผ๋ก ํ์ผ ์์ฑํ๊ธฐ
$ sudo -vi ํ๋ก์ ํธ๋ช
# ์๋๋ด์ฉ ์
๋ ฅ
server {
listen 80;
server_name [AWS EC2 public ip์ฃผ์];
charset utf-8;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000
}
location /static/ {
alias /home/ubuntu/ํ๋ก์ ํธ ํด๋;
}
}
# ์ฐ๊ฒฐํ ๋๋ฉ์ธ์ด ์๋ค๋ฉด ?! (ex. ๋๋ฉ์ธ์ด http://soohyun.com ์ด๋ผ๊ณ ๊ฐ์ ํ๋ฉด)
server {
listen 80;
server_name soohyun.com www.soohyun.com;
#www ๋ถ์ธ ๊ฒ ํ๋, ์ ๋ถ์ธ ๊ฒ ํ๋ ํด์ ๋๋ฒ ์จ์ฃผ๊ธฐ
charset utf-8;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:8000
}
location /static/ {
alias /home/ubuntu/ํ๋ก์ ํธ ํด๋;
}
}
์ฐพ์๋ณด๋๊น ๋ธ๋ก๊ทธ๋ง๋ค static๊ณผ media ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ๊ณณ๋ ์๊ณ , ์ค์ ํ์ง ์๋ ๊ณณ๋ ์๋๋ฐ ๊ทธ ์ฐจ์ด๋ฅผ ์์ง ๋ชจ๋ฅด๊ฒ ๋ค ใ ใ > ์ ๋ฆฌํ์!!
# nginx ๋ฌธ๋ฒ ์ค๋ฅ ํ๋จ
$ sudo nginx -t
# ์ ์ค์ ๋์ด ์๋์ง ํ์ธํ๋ ค๋ฉด?
$ systemctl status nginx
# ์๋ฌ๊ฐ ์๋ค๋ฉด nginx ๊ตฌ๋
$ sudo systemctl restart nginx
๐ ์ค์!!! ์ฌ๊ธฐ๊น์งํ๋ฉด ํฌ์คํธ๋งจ์ผ๋ก ์๋ฒ๋ฅผ ์คํํ์ ๋ ์๋ฒ๊ฐ ๋์๊ฐ์ง ์๋๋ค. 80๋ฒ ํฌํธ๋ฅผ aws ์์ ๋ฐ๋ก ํ์ฉ์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ ํ๋ค.
- aws ec2 ์ธ์คํด์ค ํด๋ฆญ
- ํ๋จ ๋ณด์ ํญ ํด๋ฆญ
- ๋ณด์ ๊ทธ๋ฃน ๋งํฌ ํด๋ฆญ
- ์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง ํด๋ฆญ
- ์๋์ ๊ฐ์ด 80๋ฒ ํฌํธ 2๊ฐ๋ฅผ ์ถ๊ฐ๋ก ์ค์ ํด์ค์ผ ํ๋ค.
์ธ๋ค์ผ ์ถ๊ฐ...