๐๋ค์ด๊ฐ๋ฉฐโฆ
AWS EC2
ubuntu 22.04
ํ๊ฒฝ์์ Nginx & Gunicorn
์ ์ฌ์ฉํ์ฌ Django
๋ฅผ ๋ฐฐํฌํ๊ณ ์ ํ๋ค.
์ธํ
git์ ์ฌ์ฉํ์ฌ ubuntu์ ํ๋ก์ ํธ ํด๋ก ํ๊ธฐ
AWS EC2 & RDS
๋ฅผ ์ค์ ์ด ๋์ด ์๋ค๊ณ ๊ฐ์ ํ๋ค.
git
์ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ํ๊ฒฝ์์ ๊ฐ๋ฐํ์๋ ํ๋ก์ ํธ๋ฅผ ํด๋ก ํ์ฌ EC2 ํ๊ฒฝ์ ๊ฐ์ ธ์จ๋ค.
/srv/
ํด๋์ ํด๋ก ์ ํ๊ธฐ ์ ์, ํด๋น ํด๋๋ root ์ฌ์ฉ์์ ์์ ์ด๊ธฐ์ ํ์ฌ ์ฌ์ฉ์์ ๋ํ ๊ถํ์ ๋ถ์ฌํด์ผ ํ๋ค.
sudo chown -R $(whoami):$(whoami) /srv/
๋ช ๋ น์ด๋ฅผ ์ํํ์ฌ ๊ถํ์ ๋ณ๊ฒฝํ๋ค.git clone [repo]
๋ ํฌ์งํ ๋ฆฌ๋ฅผ ๋ณต์ ํ๋ค.
pyenv
์ pipenv
๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ํ๊ฒฝ ๊ตฌ์ถ
python ๋ฒ์ ผ ๊ด๋ฆฌ์ ๊ฐ์ํ๊ฒฝ ๊ตฌ์ถ์ ์ํด ํ์๋ ๋ณดํต pyenv
& pipenv
๋ฅผ ์ฌ์ฉํ๋ค.
ubuntu ํ๊ฒฝ์ ์ค์น๋ฅผ ์งํํ๋ค.
pyenv
์ค์น๋ฅผ ์ํด ํ์ํ ํจํค์ง๋ฅผ ์ค์นํ๋ค.1 2 3 4 5
sudo apt-get update sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
curl https://pyenv.run | bash
๋ช ๋ น์ด๋ฅผ ์ํํ์ฌpyenv
๋ฅผ ์ค์นํ๋ค.pyenv
ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ๋ค.1 2 3
export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init --path)"pip eval "$(pyenv virtualenv-init -)"
- ๋ณ๊ฒฝ์ฌํญ ์ ์ฉ์ ์ํด ์์ ์ฌ์์ํ๊ฑฐ๋,
source ~/.bashrc
๋ช ๋ น์ด๋ฅผ ์ํํ๋ค. - ํ๋ก์ ํธ์ ๋ง๋ ํ์ด์ฌ ๋ฒ์ ผ ์ค์น ๋ฐ ๊ด๋ฆฌ(ํ์ฌ ec2์์ ํ๋์ ํ๋ก์ ํธ๋ง ์ํํ๋ฏ๋ก, global๋ก ์ค์ ํจ)
1 2
pyenv install 3.11.2 pyenv global 3.11.2
pip install pipenv
pipenv ํจํค์ง ์ค์น- ํ๋ก์ ํธ์
pipenv.lock
๋๋ ํ ๋ฆฌ๋ก ์ด๋ ํpipenv install & pipenv shell
์ํ
Gunicorn
& Nginx
์ธํ
Gunicorn
sudo vi /etc/systemd/system/gunicorn.service
์์ฑ ๋ฐ ํธ์ง
gunicorn.sock
ํ์ผ์ ์๋์ผ๋ก ์์ฑ๋๋ค. /run/ ํด๋๋ก ์ง์ ํ๋ฉด ๊ถํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค.
๊ฐ์ํ๊ฒฝ ์์น๋pipenv --venv
๋ช ๋ น์ด๋ก ์ฐพ์ ์ ์๋ค.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[Unit] Description=Deployment Server After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=[manange.py์ ๋๋ ํ ๋ฆฌ] ExecStart=[๊ฐ์ํ๊ฒฝ ์์น]/bin/gunicorn \ --access-logfile - \ --workers 1 \ --bind unix:/tmp/gunicorn.sock \ server.wsgi:application [Install] WantedBy=multi-user.target
sudo systemctl start gunicorn.service & sudo systemctl enable gunicorn.service
๋ช ๋ น์ด ์คํsudo systemctl status gunicorn.service
์ํ ํ์ธ -> active ์ํ๊ฐ ์ ์์ด๋ค.
Nginx
sudo apt install nginx python3-pip python3-dev libpq-dev
ํจํค์ง ์ค์นsudo vi /etc/nginx/sites-available/server
ํ์ผ ์์ฑ ๋ฐ ํธ์ง- static ํ์ผ ์ค์ ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง,
alias
๊ฐ ์๋root
๋ก ์ค์ ํ ๊ฒฝ์ฐ ์น์๋ฒ๊ฐstaticfiles/static
์ด๋ฐ ์์ผ๋ก ์ ์ ํ์ผ์ ์ฐพ๋๋ค. - ํ์๋ ssl ์ธ์ฆ์๋ฅผ ์ฌ์ฉํ์ฌ https ํต์ ์ ํ๊ธฐ ๋๋ฌธ์ if๋ฌธ์ด ์ถ๊ฐ๋์๋ค. SSL ์ธ์ฆ ๋ฐฉ๋ฒ์ ๋ค์ ํฌ์คํธ์์ ์ค๋ช
ํ ๊ฒ์ด๋ค.
1 2 3
if ($http_x_forwarded_proto = 'http'){ return 301 https://$host$request_uri; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
server { listen 80; server_name [IP or Domain]; location /static/ { alias [ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ]/staticfiles/; } location / { include proxy_params; proxy_pass http://unix:/tmp/gunicorn.sock; } if ($http_x_forwarded_proto = 'http'){ return 301 https://$host$request_uri; } }
- static ํ์ผ ์ค์ ์ ๋ฐ๋ผ ๋ค๋ฅด์ง๋ง,
sudo ln -sf /etc/nginx/sites-available/server /etc/nginx/sites-enabled
๋ณต์ฌsudo nginx -t
-> Nginx ๊ตฌ์ฑ ๊ฒ์ฌsudo systemctl restart nginx
-> Nginx ์ฌ์์sudo ufw allow 'Nginx Full'
Error log ํ์ธ ๋ฐฉ๋ฒ
- Gunicorn
sudo systemctl status gunicorn.service
gunicorn ์ํ ํ์ธsudo journalctl -u gunicorn.service -n 100 --no-pager
์ต๊ทผ 100๊ฐ์ ๋ก๊ทธ ํ์ธsudo systemctl daemon-reload & sudo systemctl restart gunicorn.service
์ฌ์์ ๋ช ๋ น์ด
- Nginx
cat /var/log/nginx/error.log
nginx ๋ช ๋ น์ด ํ์ธ
๋์์ด ๋๋ ์ธํ
- ์๊ฐ ์ค์
sudo timedatectl set-timezone Asia/Seoul
- ์ฌ์ฉ์ ํ์ธ
whoami
- ํด๋ ๊ถํ ์ค์
/srv/
ํด๋์ ๊ถํ ์ค์ ํ ๋,sudo chown ubuntu:ubuntu /srv/
- (ํ๋ก์ ํธ์ ํ๊ฒฝ์ ๋๋ ๊ฒฝ์ฐ)
production.py
์ ์ฉ์ ์ํด,export DJANGO_SETTINGS_MODULE=server.config.settings.production
=> ํฐ๋ฏธ๋ ์ธ์ ์ด ์ข ๋ฃ๋๋ฉด ๋ค์ํด์ค์ผ ํด์ ๊ท์ฐฎ๋ค~/.bashrc
๋๋~/.bash_profile
์์ : Bash ์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํด๋น ํ์ผ์ export DJANGO_SETTINGS_MODULE=server.config.settings.production ๋ผ์ธ์ ์ถ๊ฐํ์
๋ง์น๋ฉฐ
๋ด์ฉ์ ์กฐ๊ธ ๋ ๊ฒํ ํ๊ณ ์์ ํด์ผ ํ๋ค. ์๋ง๋ ๋ฐ๋ผํด๋ณด๋ฉด ์ก๋คํ ์๋ฌ๋ค์ด ๋ฐ์ํ ๊ฒ์ด๋ค. ๋๊ธ์ ๋จ๊ฒจ์ฃผ๊ฑฐ๋, ๊ตฌ๊ธ๋ง์ ํตํด ํด๊ฒฐํ๋๋ก ํ์!