![使用 systemd 设置 gunicorn 套接字的 Django 部署,gunicorn 不遵守 Debian 9.4 上的 gunicorn.conf 文件设置](https://linux22.com/image/724994/%E4%BD%BF%E7%94%A8%20systemd%20%E8%AE%BE%E7%BD%AE%20gunicorn%20%E5%A5%97%E6%8E%A5%E5%AD%97%E7%9A%84%20Django%20%E9%83%A8%E7%BD%B2%EF%BC%8Cgunicorn%20%E4%B8%8D%E9%81%B5%E5%AE%88%20Debian%209.4%20%E4%B8%8A%E7%9A%84%20gunicorn.conf%20%E6%96%87%E4%BB%B6%E8%AE%BE%E7%BD%AE.png)
我按照这里的 systemd 部署说明进行操作http://docs.gunicorn.org/en/stable/deploy.html
/etc/systemd/system/gunicorn3.service:
[Unit]
Description=gunicorn3 daemon
Requires=gunicorn3.socket
After=network.target
[Service]
PIDFile=/run/gunicorn3/pid
User=feritsuser
Group=feritsuser
RuntimeDirectory=gunicorn3
WorkingDirectory=/home/feritsuser/Ferits
ExecStart=/usr/bin/gunicorn3 --pid /run/gunicorn3/pid \
--bind unix:/run/gunicorn3/socket Ferits.wsgi
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
/etc/systemd/system/gunicorn3.socket
[Unit]
Description=gunicorn3 socket
[Socket]
ListenStream=/run/gunicorn3/socket
[Install]
WantedBy=sockets.target
/etc/tmpfiles.d/gunicorn3.conf:
d /run/gunicorn3 0755 feritsuser feritsuser \
--workers 2 \
--timeout 300 \
--error-logfile /var/log/gunicorn3/error.log \
--log-level=debug
我也将 gunicorn.conf 符号链接到 gunicorn3.conf。
我的 Gunicorn 套接字的 nginx 代理正在运行。我可以加载应用程序并在浏览器中使用它,但在一个页面上出现 502 超时。Nginx 错误日志为:
2018/07/25 10:31:18 [错误] 614#614:*3 上游在读取上游响应标头时过早关闭连接,客户端:10.18.3.145,服务器:_,请求:“GET /browse/expenses/ HTTP/1.1”,上游:“http://unix:/run/gunicorn3/socket:/browse/expenses/", 主机:“10.18.3.59”, 引用者:“http://10.18.3.59/“
30 秒后发生超时,并且没有写入 gunicorn3.conf/gunicorn.conf 中指定的日志文件,因此看来我的套接字实现不遵守 .conf 文件。我做错了什么?我尝试更改 feritsuser:feritsuser 的 .conf 文件,但仍然没有结果。
答案1
我无法让它使用 .conf 文件,即使在 gunicorn3.service 中指定它也是如此。最终有效的方法是完全删除 .conf 文件并更改我的 gunicorn3.service 文件,如下所示:
[Unit]
Description=gunicorn3 daemon
Requires=gunicorn3.socket
After=network.target
[Service]
PIDFile=/run/gunicorn3/pid
User=feritsuser
Group=feritsuser
RuntimeDirectory=gunicorn3
WorkingDirectory=/home/feritsuser/Ferits
ExecStart=/usr/bin/gunicorn3 --pid /run/gunicorn3/pid \
--bind unix:/run/gunicorn3/socket Ferits.wsgi \
--workers 2 \
--timeout 300 \
--error-logfile /var/log/gunicorn3/error.log \
--log-level=debug
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target