Configuração do Django, uWSGI e Supervisord

2

OK, eu tenho Django, nginx e uWSGI configurados no meu servidor ... o problema é que eu inicio o uWSGI manualmente através deste comando:

uwsgi -s /home/user/sites/sock/uwsgi.sock -t 10 -M -p 1 -C --pythonpath /home/user/sites/ -w mysite.django_wsgi

E está funcionando muito bem. O que eu gostaria de fazer é usar o supervisord para controlar os processos do uWSGI (start, stop, etc.). Como eu faria isso, como seria a configuração do supervisord?

    
por Veles 27.10.2010 / 13:20

2 respostas

5

Eu achei isso muito confuso até que descobri o modo imperador .

Isso significa que você pode fazer uma instância do supervisord para gerenciar todas as suas configurações:

[program:uwsgi]
command=/usr/local/bin/uwsgi --emperor /etc/uwsgi/apps-enabled
stopsignal=QUIT
autostart=true
autorestart=true
redirect_stderr=true

E então você colocaria qualquer arquivo de configuração (ini, xml, yaml) para aplicativos no diretório /etc/uwsgi/apps-enabled .

Não tenho certeza se isso funciona com 0,9, mas definitivamente funciona com 1,0.

Veja um exemplo de ini para um aplicativo do 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
    
por 26.01.2012 / 01:53
0

Aqui está um arquivo conf supervisor de trabalho (modo normal, não modo imperador):

[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

Seu aplicativo precisa ser instalado em um virtualenv. (E neste exemplo eu tenho o aplicativo rodando como usuário "frite". Então eu criei um usuário unix com o sudo addusr ou algo assim e coloquei o virtualenvs e arquivos lá. Para que ele fique isolado do resto do sistema.

E o frite_deploy_wsgi.py é um tipo de iniciador que contém apenas:

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

Felicidades

    
por 22.02.2012 / 01:21