Назад | Перейти на главную страницу

Конфигурация Django, uWSGI и Supervisord

Хорошо, у меня на сервере установлены 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()

Ура