Хорошо, у меня на сервере установлены Django, nginx и uWSGI ... проблема в том, что я запускаю uWSGI вручную с помощью этой команды:
uwsgi -s /home/user/sites/sock/uwsgi.sock -t 10 -M -p 1 -C --pythonpath / home / user / sites / -w mysite.django_wsgi
И он отлично работает. Я бы хотел использовать supervisord для управления процессами uWSGI (запуск, остановка и т. Д.). Как мне это сделать, как будет выглядеть конфигурация супервизора?
Я обнаружил, что это довольно запутанно, пока не обнаружил режим императора.
Это означает, что вы можете использовать один экземпляр супервизора для управления всеми своими конфигурациями:
[program:uwsgi]
command=/usr/local/bin/uwsgi --emperor /etc/uwsgi/apps-enabled
stopsignal=QUIT
autostart=true
autorestart=true
redirect_stderr=true
Затем вы вставляете любые файлы конфигурации (ini, xml, yaml) для приложений в папку /etc/uwsgi/apps-enabled
каталог.
Не уверен, что это работает с 0.9, но определенно работает с 1.0.
Вот пример ini для приложения Flask:
[uwsgi]
socket = /tmp/uwsgi_%n.sock
module = wire:app
chdir = /srv/%n/wire
env = WIRE_SETTINGS=/srv/%n/wire/config.py
virtualenv = /srv/%n
uid = wire
gid = www-data
single-interpreter = false
chmod = 770
processes = 3
Вот рабочий файл конфигурации супервизора (нормальный режим, а не режим императора):
[program:frite]
command=/home/mep/envs/frite_prod/bin/uwsgi
--home frite_prod
--module frite_deploy_wsgi
--socket /home/frite/envs/frite_prod/frite.sock
--chmod-socket 666
--pythonpath /home/mep/envs/frite_prod/fr-frite
--pythonpath /home/mep/envs/frite_prod/fr-frite/frite
--processes 8
--master -L -l 250 -z 5
--post-buffering 1
directory=/home/frite/envs/
environment=DJANGO_SETTINGS_MODULE='frite.settings'
user=frite
autostart=true
autorestart=true
stdout_logfile=/home/frite/envs/frite_prod/uwsgi.log
redirect_stderr=true
stopsignal=QUIT
Ваше приложение необходимо установить в virtualenv. (И в этом примере у меня есть приложение, работающее от имени пользователя frite. Итак, я создал пользователя unix с помощью sudo addusr или чего-то еще и поместил туда virtualenvs и файлы. Так что он изолирован от остальной системы.
А frite_deploy_wsgi.py - это своего рода пусковая установка, которая содержит только:
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Ура