Django,uWSGI和Supervisordconfiguration

好吧我有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进程(启动,停止等)。 我将如何做到这一点,supervisordconfiguration是什么样子?

我发现这很困惑,直到我发现皇帝模式 。

这意味着你可以做一个supervisord实例来pipe理你所有的configuration:

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

然后,你会popup任何configuration文件(ini,xml,yaml)到应用程序到/etc/uwsgi/apps-enabled目录。

不知道这是否适用于0.9,但明确地适用于1.0。

以下是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 

这里是一个工作主pipeconf文件(正常模式,而不是皇帝模式):

 [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”用户身份运行,所以我使用sudo addusr或者其他东西创build了一个unix用户,并把virtualenvs和文件放到那里,这样就和系统的其他部分隔离了。

frite_deploy_wsgi.py是一种仅包含以下内容的启动程序:

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

干杯