BLOG
웹 개발

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 파일을 이용하여 자동화 할 수 있습니다. 그 방법은 저의 다른 포스트에서 확인하세요!

.sh 로 서버 실행 자동화

이상으로 uWSGI와 Nginx를 이용해 우분투 환경에서 Django 프로젝트를 배포하는 방법을 알아보았습니다!

Django Ubuntu Nginx uWSGI



Search