Django、uWSGI 和 Supervisord 配置

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进程(启动、停止等)。我该怎么做,supervisord配置是什么样的?

答案1

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

这意味着你可以创建一个 Supervisord 实例来管理你的所有配置:

[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。

以下是 Flask 应用程序的 ini 示例:

[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

答案2

这是一个有效的主管配置文件(正常模式,不是皇帝模式):

[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

您的应用需要安装在虚拟环境中。(在此示例中,我以“frite”用户身份运行应用。因此,我使用 sudo addusr 或其他方式创建了一个 unix 用户,并将虚拟环境和文件放在那里。这样它就与系统的其余部分隔离了。

frite_deploy_wsgi.py 是一种启动器,仅包含:

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

干杯

相关内容