Ubuntu 환경에서 Django 프로젝트를 Nginx, uWSGI를 이용해서 배포하기
Nov. 7, 2021, 7:34 p.m.
Django 프로젝트를 Ubuntu에서 배포하려고 할 때 다양한 방법이 있습니다. 그냥 장고의 runserver를 사용해도 되지만 이것은 테스트 용으로만 추천하고 있습니다. Apache를 이용해서 배포 할 수도 있는데 이번 포스트에서는 제 기준에 가장 사용하기 쉬운 uWSGI와 Nginx를 이용해서 배포하는 방법을 알아보겠습니다.
1. Nginx 설치
먼저 Nginx를 설치해보겠습니다.
$ sudo apt-get install nginx
nginx는 설치가 완료되면 자동으로 실행됩니다. 실행중인지 확인하려면 아래의 명령어를 입력하세요.
$ sudo service nginx status
실행중이면 nginx is running 이라고 나올 것입니다.
2. uWSGI 설치, 설정
두번째로 uWSGI를 설치해 보겠습니다. uWSGI는 pip를 통해 설치합니다.
$ pip install uwsgi
설치가 완료되면 ini 파일을 만들어 uWSGI를 설정해야 합니다.
Ubuntu내장 에디터를 이용하여 파일을 만들겠습니다. 저장할 디렉터리에서 아래의 명령어를 입력하세요. 보통은 Django 프로젝트의 루트 디렉터리에 생성하는 것이 좋습니다.
$ vim samplesite.ini
-jellyhosite.ini-
[uwsgi]
chdir = /home/ubuntu/jellyhosite/jellyhosite
module = jellyho.wsgi
socket=/home/ubuntu/jellyhosite/jellyhosite/jellyho.sock
chmod-socket=666
vacuum=true
deamonize=/home/ubuntu/jellyhosite/jellyhosite/jellyho_uwsgi.log
die-on-term=true
- chdir : 프로젝트의 디렉터리입니다.
- module : 프로젝트 내 생성된 .wsgi 파일 입니다.
- socket : 생성될 .sock 파일의 경로를 입력합니다. 프로젝트 디렉터리 안에 만들어주세요.
- deamonize : 생성될 .log 파일의 경로를 입력합니다. 프로젝트 디렉터리 안에 만들어주세요.
만약 파이썬 가상환경을 사용하고 있다면 그 정보도 추가해주어야 합니다.
.ini 파일 안에
virtualenv = /home/jellyho/.pyenv/versions/jellyhosite/
를 추가해주세요.
:wq를 눌러 저장합니다.
저장이 완료되면 아래의 명령을 통해 uWSGI를 실행할 수 있습니다. .ini 파일이 있는 경로에서 실행해주세요.
$ uwsgi --ini jellyhosite.ini;
uWSGI를 설치하고 설정을 완료하였습니다.
3. Nginx 설정
마지막으로 Nginx의 설정파일을 수정해주면 됩니다.
설정파일 디렉터리로 이동
$ cd /etc/nginx/sites-available/
에디터로 열기
$ vim default
아래와 같이 설정해주세요.
server_name jellyho.com www.jellyho.com;
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
location /static {
alias /home/ubuntu/jellyhosite/jellyhosite/_static;
}
/static에 대한 설정이 있는데 이것은 프로젝트에 static 파일들이 저장되는 폴더의 경로를 설정해주면 됩니다. 이것은 Django의 collectstatic을 통해 생기는 경로입니다.
설정이 완료되면 아래의 명령어를 입력해 적용하고 재시작해주세요.
설정 적용하기
$ sudo nginx -t
Nginx 재시작
$ sudo service nginx restart
이렇게 되면 설정이 모두 완료된 것입니다.
4. 서버에 수정사항이 있을 때
위에서 쭉 uWSGI와 Nginx를 설정했습니다. 잘 서버를 운영하다가 만약에 서버에 수정사항이 있다면 어떻게 해야할까요? 수정사항을 받아온 후 .ini 파일을 다시 실행하면 됩니다. 만약 github에서 수정하고 이것을 pull로 받아온다면 아래와같은 흐름으로 적용할 수 있겠네요.
cd /home/ubuntu/jellyhosite/jellyhosite;
git pull origin master;
python3 manage.py makemigrations;
python3 manage.py migrate;
python3 maange.py collectstatic --noinput;
killall uwsgi;
uwsgi --ini jellyhouwsgi.ini;
프로젝트 디렉터리로 이동해서 pull을 통해 수정사항을 다운받고 migrate를 진행 한 후, collectstatic을 이용해 정적 파일을 모아줍니다. 마지막으로 실행중인 uwsgi를 끄고 다시 .ini 파일을 실행하여 uwsgi를 실행합니다.
Nginx는 계속 실행중이기때문에 따로 건드리지 않아도 된답니다.
매번 저 명령어들을 입력하기 귀찮다면 .sh 파일을 이용하여 자동화 할 수 있습니다. 그 방법은 저의 다른 포스트에서 확인하세요!
이상으로 uWSGI와 Nginx를 이용해 우분투 환경에서 Django 프로젝트를 배포하는 방법을 알아보았습니다!
Django Ubuntu Nginx uWSGI