连线uWSGI以在Ubuntu 16.04上使用Django和Nginx


14

我试图按照本教程设置uWSGIDjangonginxUbuntu16.04

一切正常,直到我尝试执行此命令的最后一步(哦,具有讽刺意味的...):

sudo service uwsgi start

如果失败并出现以下错误:

无法启动uwsgi.service:找不到单元uwsgi.service。

其他人似乎也遇到类似的错误:

无法启动uwsgi.service:单元uwsgi.service无法加载:没有这样的文件或目录。

该问题似乎与Ubuntu版本有关。虽然该教程针对的是Ubuntu 14.04,但它似乎不适用于较新的版本,因为在版本15中,Ubuntu从upstartinit守护程序切换到了systemdinit守护程序

如何使用systemd启动uWSGI,使其与nginx和Django兼容?

Answers:


27

第一个需要修改是该/etc/uwsgi/sites/firstsite.ini文件。唯一需要做的更改是替换从664到的权限666。该脚本如下所示:

[uwsgi]
project = firstsite
base = /home/user

chdir = %(base)/%(project)
home = %(base)/Env/%(project)
module = %(project).wsgi:application

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true

其次,由于我们使用systemd而不是upstart,因此不需要以下文件,可以将其删除:/etc/init/uwsgi.conf

第三,我们在以下位置创建以下systemd脚本/etc/systemd/system/uwsgi.service

[Unit]
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

使用板上的此新uWSGI服务刷新systemd初始化系统的状态

sudo systemctl daemon-reload

为了启动脚本,您需要运行以下命令:

sudo systemctl start uwsgi

为了uWSGI重新启动,您还需要:

sudo systemctl enable uwsgi

您可以使用以下方法检查其状态:

systemctl status uwsgi

一些进一步的细节可以在这里找到。


1
如何使systemd使用python virtualenv?当我跑步时systemctl status uwsgi我得到ImportError: No module named site
tlng05 2013年

2
史诗般的.....我为此苦苦思索了很长时间....谢谢您在这里编写的简单直接的分步解决方案。+1
拉基布'16

1
我用了几次,非常有帮助的答案
jozi 2016年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.