본 개발에서는 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
완료.