所以我想在这里遵循这个:
除了最新的树莓派。我认为或认为我已经正确配置了所有内容......
在上面的那个教程中,它让你从创建一个 django 项目到让它在 gunicorn 下运行,甚至测试它:
激活虚拟环境,然后
cd ~/myproject
gunicorn --bind 0.0.0.0:8000 myproject.wsgi
这部分有效,一旦出现,就像我做了一个 python3 manage.py runserver 0.0.0.0:8000
我可以然后转到我的浏览器并输入主机名:
webserver2.abc.com:8000
并且所有作品的应用程序都出现了。
如果我停止 gunicorn 命令并键入 deactivate,然后我尝试使用我在 /etc/systemd/system 中添加的 .service 运行它。它似乎在运行并且
sudo systemctl status gunicorn
● gunicorn.service - gunicorn daemon
Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2020-10-21 13:24:51 MDT; 50s ago
Main PID: 7645 (gunicorn)
Tasks: 4 (limit: 4915)
Memory: 55.0M
CGroup: /system.slice/gunicorn.service
├─7645 /home/pi/myvirtualenv_covid19/covid19env/bin/python /home/pi/myvirtualenv_covid19/covid19env/bin/gunicorn --workers 3 --bind unix:/tmp/covid19.sock covid19.wsgi:application
├─7651 /home/pi/myvirtualenv_covid19/covid19env/bin/python /home/pi/myvirtualenv_covid19/covid19env/bin/gunicorn --workers 3 --bind unix:/tmp/covid19.sock covid19.wsgi:application
├─7652 /home/pi/myvirtualenv_covid19/covid19env/bin/python /home/pi/myvirtualenv_covid19/covid19env/bin/gunicorn --workers 3 --bind unix:/tmp/covid19.sock covid19.wsgi:application
└─7653 /home/pi/myvirtualenv_covid19/covid19env/bin/python /home/pi/myvirtualenv_covid19/covid19env/bin/gunicorn --workers 3 --bind unix:/tmp/covid19.sock covid19.wsgi:application
Oct 21 13:24:51 webserver2 systemd[1]: Started gunicorn daemon.
Oct 21 13:24:51 webserver2 gunicorn[7645]: [2020-10-21 13:24:51 -0600] [7645] [INFO] Starting gunicorn 20.0.4
Oct 21 13:24:51 webserver2 gunicorn[7645]: [2020-10-21 13:24:51 -0600] [7645] [INFO] Listening at: unix:/run/gunicorn.sock (7645)
Oct 21 13:24:51 webserver2 gunicorn[7645]: [2020-10-21 13:24:51 -0600] [7645] [INFO] Using worker: sync
Oct 21 13:24:51 webserver2 gunicorn[7645]: [2020-10-21 13:24:51 -0600] [7651] [INFO] Booting worker with pid: 7651
Oct 21 13:24:51 webserver2 gunicorn[7645]: [2020-10-21 13:24:51 -0600] [7652] [INFO] Booting worker with pid: 7652
Oct 21 13:24:51 webserver2 gunicorn[7645]: [2020-10-21 13:24:51 -0600] [7653] [INFO] Booting worker with pid: 7653
确认。
所以它似乎正在运行,虽然这次再次访问 webserver2.abc.com:8000 不起作用,这是 /etc/systemd/system 中的 gunicorn.service
[Unit]
Description = gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=pi
WorkingDirectory=/home/pi/myvirtualenv_covid19/covid19
ExecStart=/home/pi/myvirtualenv_covid19/covid19env/bin/gunicorn --workers 3 --bind unix:/tmp/covid19.sock covid19.wsgi:application
Restart=always
[Install]
WantedBy=multi-user.target
好奇没有要绑定的端口吗?也许我在我的 django 项目中缺少一个额外的配置???
所以其次让 nginx 看到这些似乎是一个问题,因为如果我转到
http://webserver2.abc.com:8080/
给我一个 502 坏网关。通常会告诉我 /var/log/nginx 中的错误:
2020/10/21 13:33:11 [crit] 1836#1836: *65 connect() to unix:/tmp/covid19.sock failed (2: No such file or directory) while connecting to upstream, client: 10.75.1.245, server: , request: "GET / HTTP/1.1", upstream: "http://unix:/tmp/covid19.sock:/", host: "webserver2.abc.com:8080"
它似乎正在运行,但 /tmp 中没有 sock 文件让我相信 gunicorn 没有从 systemd/system .service 文件运行
所以看起来袜子并没有被创建,尽管 gunicorn.socket 文件确实设置了一个 /run/gunicorn.sock 文件。只是 /tmp/covid19.sock 文件不是。
我觉得我很亲密,只需要一点帮助来连接点。
(我的 nginx 也设置为侦听端口 8080,但我没有看到我在 gunicorn.service 文件中告诉它在 8080 上运行的位置?)
为了完整起见,我的 covid19.conf 文件来自 /etc/nginx/ 中可用的站点
server {
listen 8080;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/pi/myvirtualenv_covid19/covid19;
}
location / {
include proxy_params;
proxy_pass http://unix:/tmp/covid19.sock;
}
}
好的,我刚刚使用相同的说明设置了一个 Pi 来为我的 django 应用程序提供服务(实际上我在找到要遵循的 digitalocean 指南之前发现了你的问题,因为我知道我不想要 20.04/upstart)。
遵循指南对我来说效果很好,所以我会尽力提供帮助。我注意到要调查的事情是:
我的里面没有那个
requires=gunicorn.socket
。我将套接字文件放在我的用户主目录中以避免任何权限问题(我以前遇到过这个问题),所以我建议这样做。
AFAIK gunicorn 通过套接字与 nginx 通信,因此不需要告诉它要监听的端口 - nginx 进行监听,然后将其传递给 gunicorn。
我认为您可能需要检查日志,但我认为它位于 gunicorn.service 文件中的额外行与我首先要开始的套接字位置之间;完成这些事情(没有参考,主文件夹中的套接字)我已经启动并运行没有问题。
高温高压