gpt4 book ai didi

django - 在 virtualenv 中的 chrooted nginx 后面运行 Gunicorn

转载 作者:行者123 更新时间:2023-12-04 17:21:29 26 4
gpt4 key购买 nike

如果我手动启动 gunicorn 或者将 gunicorn 添加到我的 django 安装的应用程序中,我可以使用此设置。但是当我尝试使用 systemd 启动 gunicorn 时,gunicorn 套接字和服务启动良好,但它们对 Nginx 没有任何服务;我得到一个 502 坏网关。

Nginx 在“http”用户/组、chroot jail 下运行。我使用 pythonbrew 来设置 virtualenvs,所以 gunicorn 安装在我的主目录中的 .pythonbrew 下。 vitualenv 目录归我的用户和 adm 组所有。

我很确定某处存在权限问题,因为如果我启动 gunicorn 一切正常,但如果 systemd 启动它就不行。我已经尝试更改 gunicorn.service 文件中的用户和组指令,但没有任何效果;如果 root 启动服务器,那么我没有错误和 502,如果我的用户启动它,我没有错误和 504。

我已经检查了 Nginx 日志并且没有错误,所以我确定这是一个 gunicorn 问题。我应该在应用程序目录中有 virtualenv 吗?谁应该是应用程序目录的所有者?我怎样才能缩小问题的范围?

/usr/lib/systemd/system/gunicorn-app.service

#!/bin/sh

[Unit]
Description=gunicorn-app

[Service]
ExecStart=/home/noel/.pythonbrew/venvs/Python-3.3.0/nlp/bin/gunicorn_django
User=http
Group=http
Restart=always
WorkingDirectory = /home/noel/.pythonbrew/venvs/Python-3.3.0/nlp/bin

[Install]
WantedBy=multi-user.target

/usr/lib/systemd/system/gunicorn-app.socket
[Unit] 
Description=gunicorn-app socket

[Socket]
ListenStream=/run/unicorn.sock
ListenStream=0.0.0.0:9000
ListenStream=[::]:8000

[Install]
WantedBy=sockets.target

我意识到这是一个庞大的问题,但我相信我可以通过一些指示来查明问题。谢谢。

更新

我开始缩小范围。当我手动运行 gunicorn 然后运行 ​​ ps aux|grep gunicorn然后我看到两个启动的进程:master 和 worker。但是当我用 systemd 启动 gunicorn 时,只启动了一个进程。我尝试添加 Type=forking到我的 gunicorn.services文件,但随后在加载服务时出现错误。我想也许 gunicorn 没有在 virtualenv 下运行,或者 venv 没有被激活?

有谁知道我在这里做错了什么?也许 gunicorn 没有在 venv 中运行?

最佳答案

我在带有launchd的OSX上遇到了类似的问题。
问题是我需要允许进程产生子进程。

尝试添加 Type=forking :

[Unit]
Description=gunicorn-app

[Service]
Type=forking

关于django - 在 virtualenv 中的 chrooted nginx 后面运行 Gunicorn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16632848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com