uwsgi --http :8000 --home /home/mama/.pyenv/versions/maro --chdir /home/mama/garam/maro \ --static-map /static=/home/mama/garam/maro/gov/static --module conf.wsgi
[uwsgi] uid=foo base=/home/%(uid)/garam # the virtualenv (full path) home=/home/%(uid)/.pyenv/versions/maro chdir=/home/%(uid)/garam/maro module=conf.wsgi:application env=DJANGO_SETTINGS_MODULE=conf.settings.product # process-related settings # uWSGI 프로세스를 master로 돌아가게 해줍니다. master=true # maximum number of worker processes processes=5 max-requests=5000 daemonize=/var/log/garam/maro_uwsgi.log # UNIX socket 파일의 위치입니다. socket file의 위치를 잡아줘도 되며 localhost와 port를 명시해줘도 됩니다. socket=/var/log/garam/maro.sock # UNIX socket 소유자 chown-socket=%(uid):www-data # UNIX socket에 대한 권한 설정입니다. 666을 해야 실행이 가능합니다. chmod-socket=660 # uWSGI를 통해서 생성된 파일들은 삭제하는 옵션입니다. vacuum=true # thread 사용을 앱(uWSGI) 내에서 가능하게 해줍니다. enable-threads = true # 단일한 python interpreter를 사용하게 하는 옵션입니다. single-interpreter = true # master말고 각각의 worker에(master에서 spawn한 자식들) 앱을 로드하는 설정입니다. lazy-apps = true
/etc/systemd/system/uwsgi.service 파일을 아래와 같은 내용으로 생성한다.
[Unit] Description=uWSGI Emperor service [Service] ExecStart=/home/foo/django_test/venv/bin/uwsgi \ --emperor /home/foo/django_test/run User=foo Group=www-data Restart=on-failure KillSignal=SIGQUIT Type=notify NotifyAccess=all StandardError=syslog [Install] WantedBy=multi-user.target
–emperor 옵션으로 uwsgi.ini 파일이 들어있는 디렉토리를 지정한다.
sudo systemctl start uwsgi sudo systemctl enable uwsgi
systemctl status uwsgi
만약 구동 실패시 에러 로그는 /var/log/syslog에서 확인할 수 있다.
/etc/nginx/sites-available/django_test 파일을 아래와 같은 내용으로 생성한다.
upstream django {
server unix:///usr/local/share/pythonblog/config/pythonblog.sock;
}
server {
listen 80 default_server;
listen [::]:80 default_server;
#server_name www.xxxxxx.com
charset utf-8;
location / {
uwsgi_pass django;
include /etc/nginx/uwsgi_params;
}
location /static {
alias /usr/local/share/pythonblog/staticfiles;
}
}
sudo ln -s /etc/nginx/sites-available/django_test /etc/nginx/sites-enabled
sudo nginx -t sudo systemctl restart nginx
사용하는 Port에 대한 방화벽확인
sudo ufw delete allow 8000 sudo ufw allow 'Nginx Full'
sudo apt-get install python3-dev python3-pip python3-setuptools sudo -H pip3 install uwsgi
여러 애플리케이션의 .ini 파일을 /etc/uwsgi/sites 디렉토리 한 곳으로 모은다.
[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
ExecStart 변수에서 –emperor /etc/uwsgi/sites 옵션을 두는 것이 핵심이다.
시스템 전역적으로 동작하므로 User, Group 변수 설정을 없앤다.
그리고 시스템 전역의 uWSGI를 이용하므로 가상환경의 uWSGI는 굳이 설치하지 않는다.
upstream 정의 이름이 각 애플리케이션 서버마다 중복되지 않도록 주의한다.
server_name에서 도메인 이름을 올바로 선언하고 정적파일, 로그파일 등의 절대경로를 정확히 지정한다.