将 uWSGI 连接到 Ubuntu 16.04 上的 Django 和 nginx

Vla*_*zki 15 ubuntu nginx django wsgi uwsgi

我正在尝试按照本教程uWSGI使用Djangonginxon进行设置Ubuntu16.04

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

sudo service uwsgi start
Run Code Online (Sandbox Code Playgroud)

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

启动 uwsgi.service 失败:未找到单元 uwsgi.service。

其他人似乎得到了类似的错误:

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

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

如何使用systemduWSGI 启动 uWSGI 以便它与 nginx 和 Django 一起使用?

Vla*_*zki 28

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

[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
Run Code Online (Sandbox Code Playgroud)

其次,由于我们使用的是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
Run Code Online (Sandbox Code Playgroud)

使用这个新的 uWSGI 服务刷新 systemd init 系统的状态

sudo systemctl daemon-reload
Run Code Online (Sandbox Code Playgroud)

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

sudo systemctl start uwsgi
Run Code Online (Sandbox Code Playgroud)

为了uWSGI在重新启动时开始,您还需要:

sudo systemctl enable uwsgi
Run Code Online (Sandbox Code Playgroud)

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

systemctl status uwsgi
Run Code Online (Sandbox Code Playgroud)

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

  • 史诗......我为此苦苦挣扎了这么久......感谢你在这里写的直接简单的分步解决方案。+1 (2认同)