Django – Nginx uWSGI 배포

본 개발에서는 virtualenv 가상환경을 사용하여 개발하였고 서버 구동 또한 가상환경을 활용한 배포를 진행한다.
가상환경에 대한 이야기는 아래 링크를 통해 참조

모든 라이브러리들을 가상환경에 설치하고 난 후 배포 설정을 하는 것을 권장한다.

본 개발 디렉터리 트리

myapp - db.sqlite3
	  - manager.py
	  - mysite
		  -- settings.py
		  -- urls.py
		  -- wsgi.py
		  ....
	  - static
	  - uwsgi.ini
	  - uwsgi.sock
	  .....

STATIC 디렉터리 설정

mysite/settings.py

import os
STATIC_ROOT = os.path.join(BASE_DIR,'static')

수정했으니 적용한다.

python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py collectstatic

서버 구동이 잘 되는지 확인한다

python3 manage.py runserver 0.0.0.0:8000

uWSGI 설치

pip3 install uwsgi

구동 확인

uwsgi --http :8000 --home /virtualenv루트 --chdir /프로젝트루트 --module 프로젝트명.wsgi

서버구동이 잘 되면 가상환경에서 나온다
deactivate

uWSGI 설정

uwsgi.sock 파일 생성(빈파일로 생성)

touch uwsgi.sock

ini 파일 생성

nano uwsgi.ini
[uwsgi]
uid = pi
home = /가상환경경로
chdir = /프로젝트경로
module = 프로젝트명.wsgi:application
master = true
processes = 5
socket = /uwsgi.sock경로
chmod-socket = 666
enable-threads = true
vacuum = true
logger = file: uwsgi.log

uWSGI 실행

sudo uwsgi --http :8000 -i uwsgi.ini절대경로

실행이 잘 되면 종료하고 서버 실행 시 자동으로 시작할 수 있도록 다음 설정을 진행한다.

uWSGGI 자동 실행

sudo nano /etc/systemd/system/uwsgi.service
[Unit]
Description=uWSGI Emperor service
[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
NotifyAccess=all
StandardError=syslog
[Install]
WantedBy=multi-user.target

상단에서 프로젝트 디렉터리에 만든 ini파일을 링크를 걸어 sudo nano /etc/uwsgi/sites 폴더에 모아 여러 사이트가 구동될 수 있도록 설정한다.

sudo mkidr /etc/uwsgi/sites
sudo ln -s /프로젝트디렉터리/uwsgi.ini /etc/uwsgi/sites

nginx 사이트 설정폴더에 사이트에 맞는 이름의 설정 파일을 만들어 다음과 같이 작성한다.

sudo nano /etc/nginx/sites-available/mysite
upstream 사이트명 {
    server unix:/프로젝트디렉터리/uwsgi.sock;
}
server {
    listen 포트;
    server_name 서버주소;
    location = /favicon.ico { access_log off; log_not_found off; }
     location /static/ {
        root /프로젝트디렉터리/;
    }
    location / {
        include /etc/nginx/uwsgi_params;
        uwsgi_pass 서버명;
    }
}

작성한 파일을 링크를 걸어 /etc/nginx/site-enabled 폴더에 작성하여 연결해준다.

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/site-enabled/

작성이 완료됬으면 데몬 및 서비스를 재시작 한다.

sudo systemctl daemon-reload
sudo systemctl restart nginx.service uwsgi.service
sudo systemctl enable uwsgi
systemctl status uwsgi

완료.

Leave a Comment