Django 未连接到gunicorn,gunicorn退出太快
我有一个名为MySite的django项目,该项目内部有一些应用程序,如下所示:Django 未连接到gunicorn,gunicorn退出太快,django,gunicorn,Django,Gunicorn,我有一个名为MySite的django项目,该项目内部有一些应用程序,如下所示: - MySite -- app -- venv -- media -- django_project --- wsgi.py --- settings.py --- urls.py --- asgi.py 要在aws上部署,我正处于gunicorn配置阶段。然而,我面临着这个错误: guni:gunicorn BACKO
- MySite
-- app
-- venv
-- media
-- django_project
--- wsgi.py
--- settings.py
--- urls.py
--- asgi.py
要在aws上部署,我正处于gunicorn配置阶段。然而,我面临着这个错误:
guni:gunicorn BACKOFF Exited too quickly (process log may have details)
SyntaxError: invalid syntax
[2021-02-10 10:12:40 +0000] [6914] [INFO] Worker exiting (pid: 6914)
[2021-02-10 10:12:40 +0000] [6912] [INFO] Shutting down: Master
[2021-02-10 10:12:40 +0000] [6912] [INFO] Reason: Worker failed to boot.
但是,第一次状态类似于:
gunicorn STARTING
这是我的gunicorn.conf
:
[program:gunicorn]
directory=/home/ubuntu/MySite
command=/usr/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/MySite/app.sock django_project.wsgi.application
autostart=true
autorestart=true
stderr_logfile=/var/log/gunicorn/gunicorn.err.log
stdout_logfile=/var/log/gunicorn/gunicorn.out.log
[group:guni]
program:gunicorn
在gunicorn.err.log
中,它说问题出在:
usage: gunicorn [OPTIONS] [APP_MODULE]
gunicorn: error: unrecognized arguments: django_project.wsgi.application
当我尝试这个:
gunicorn --bind 0.0.0.0:8000 django_project.wsgi:application
我得到这个错误:
guni:gunicorn BACKOFF Exited too quickly (process log may have details)
SyntaxError: invalid syntax
[2021-02-10 10:12:40 +0000] [6914] [INFO] Worker exiting (pid: 6914)
[2021-02-10 10:12:40 +0000] [6912] [INFO] Shutting down: Master
[2021-02-10 10:12:40 +0000] [6912] [INFO] Reason: Worker failed to boot.
安装和运行gunicorn的整个过程,我做到了:
**********************************START********************************
sudo apt-get upgrade -y
sudo apt-get update -y
1) Clone the git project
git clone https://github.com/XX/MyProj.git
2) cd /MySite ## there is a venv with django installed in
3) Activate venv
source venv/bin/activate
5. Instal NGINX and GUNICORN
pip3 install gunicorn ## install without sudo..
sudo apt-get install nginx -y
pip install psycopg2-binary
6. Connect gunicorn (#Error: Worker failed to boot.)
gunicorn --bind 0.0.0.0:8000 django_project.wsgi:application
7. Install supervisor
sudo apt-get install -y supervisor ## This command holds the website after we logout
8. Config supervisor
cd /etc/supervisor/conf.d
sudo touch gunicorn.conf
9) ##In the file file do following###
[program:gunicorn]
directory=/home/ubuntu/MySite
command=/usr/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/MySite/app.sock django_project.wsgi:application
autostart=true
autorestart=true
stderr_logfile=/var/log/gunicorn/gunicorn.err.log
stdout_logfile=/var/log/gunicorn/gunicorn.out.log
[group:guni]
Program:gunicorn
####endfile####
10). Config supervisor
cd /etc/supervisor/conf.d
sudo touch gunicorn.conf
11). Connect file to supervisor
sudo mkdir -p /var/log/gunicorn
sudo supervisorctl reread
sudo supervisorctl reread
sudo supervisorctl update
12. Check if gunicorn is running in background
sudo supervisorctl status
**********************************END********************************
错误告诉您启动gunicorn的方式是错误的 看起来您正在使用supervisor。根据,正确的语法为:
[program:gunicorn]
command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py
directory=/path/to/project
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
错误告诉您启动gunicorn的方式是错误的 看起来您正在使用supervisor。根据,正确的语法为:
[program:gunicorn]
command=/path/to/gunicorn main:application -c /path/to/gunicorn.conf.py
directory=/path/to/project
user=nobody
autostart=true
autorestart=true
redirect_stderr=true
本指南应该很好用:-)
[user@machine]$sudo apt更新和sudo apt升级-y
[user@machine]$sudo apt安装python3 dev python3 pip主管nginx-y
[user@machine]$sudo systemctl enable nginx.service
[user@machine]$sudo systemctl重新启动nginx.service
[user@machine]$sudo systemctl status nginx.service
/etc/nginx/sites available/
本指南应该很好用:-)
[user@machine]$sudo apt更新和sudo apt升级-y
[user@machine]$sudo apt安装python3 dev python3 pip主管nginx-y
[user@machine]$sudo systemctl enable nginx.service
[user@machine]$sudo systemctl重新启动nginx.service
[user@machine]$sudo systemctl status nginx.service
/etc/nginx/sites available/
您的问题可能是以下几方面的组合:
设置。py
已正确设置以进行部署。请密切注意STATIC\u ROOT
和STATICFILES\u DIR
变量,因为它们对于为项目静态文件提供服务至关重要
pip安装-r requirements.txt
python manage.py runserver server\u public\u ip:8000运行您的项目。许多人认为,由于他们的项目在本地运行,因此它将在服务器上运行。事情总是出差错
确保在服务器上运行python manage.py
。这将收集静态文件并为其创建一个目录。请注意它告诉您要将它们复制到的路径,您将需要它用于nginx站点可用配置文件中的/static/location块
确保gunicorn.conf命令
变量指向virtualenv路径,并且它指向gunicorn和nginx可以访问的.sock文件(sudo chown user:group
)。以下是一个例子:
[program:gunicorn]
command=/home/user/.virtualenvs/djangoproject/bin/gunicorn -w3 --bind unix:/etc/supervisor/socks/gunicorn.sock djangoproject.wsgi:application --log-level=info
directory=/home/user/djangoproject
numprocs=3
process_name=%(program_name)s_%(process_num)d
user=user
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8,HOME="/home/user/djangoproject", USER="user"
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/gunicorn.err.log
stdout_logfile=/var/log/supervisor/gunicorn.out.log
upstream django {
server unix:/etc/supervisor/socks/gunicorn.sock;
}
server {
listen 80;
server_name www.example.com;
client_max_body_size 4G;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_max_size 1024;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log debug;
location /media/ {
autoindex off;
alias /home/user/djangoproject/media/;
}
location /static/ {
autoindex off;
alias /home/user/djangoproject/static/;
}
location / {
proxy_pass http://django;
proxy_redirect off;
}
}
有几种方法可以设置nginx配置文件。有些文档要求您在nginx.conf文件中完成所有操作,但是,您应该将其分解为多个站点,并启用指向站点的符号链接。无论哪种方法都会得到相同的结果。以下是一个例子:
[program:gunicorn]
command=/home/user/.virtualenvs/djangoproject/bin/gunicorn -w3 --bind unix:/etc/supervisor/socks/gunicorn.sock djangoproject.wsgi:application --log-level=info
directory=/home/user/djangoproject
numprocs=3
process_name=%(program_name)s_%(process_num)d
user=user
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8,HOME="/home/user/djangoproject", USER="user"
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/gunicorn.err.log
stdout_logfile=/var/log/supervisor/gunicorn.out.log
upstream django {
server unix:/etc/supervisor/socks/gunicorn.sock;
}
server {
listen 80;
server_name www.example.com;
client_max_body_size 4G;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_headers_hash_max_size 1024;
proxy_read_timeout 300s;
proxy_connect_timeout 75s;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log debug;
location /media/ {
autoindex off;
alias /home/user/djangoproject/media/;
}
location /static/ {
autoindex off;
alias /home/user/djangoproject/static/;
}
location / {
proxy_pass http://django;
proxy_redirect off;
}
}
确保在每次更改nginx配置后运行sudo服务nginx restart
确保在每次管理器配置文件更改后运行sudo-supervisortl-reread
,sudo-supervisortl-update-all
,以及sudo-supervisortl-restart-all
。在您的情况下,每个gunicorn.conf文件都会更改
最后,作为一般规则,请确保所有目录路径都与其受尊重的进程相匹配。例如:假设您的gunicorn命令变量指向一个sock文件,该文件位于/path/to/project/gunicorn.sock
,但是您的nginx配置有一个到/etc/supervisor/socks/gunicorn.sock
的代理传递,nginx不知道将请求传递到哪里,因此gunicorn永远看不到请求。此外,您还可以将其添加到nginx位置块中,以便在浏览器开发工具响应头中查看每个请求到达的位置:add_header X-debug-message“端口80,/location由django提供服务”始终代码>
注意:如果您收到“欢迎使用Nginx”页面,则意味着Nginx不知道向何处发送请求。很多时候,您会遇到静态根目录路径问题。然而,还有其他一些问题,但与如何设置有关。你得试着调试一下。另外,尝试向已知url添加位置块,如http://example.com/login
,如果您到了那里,您就知道您有nginx配置问题。如果找不到404,则很可能是django项目问题或gunicorn问题。您的问题可能是以下几方面的组合:
验证您的django设置。py
已正确设置以进行部署。请密切注意STATIC\u ROOT
和STATICFILES\u DIR
变量,因为它们对于为项目静态文件提供服务至关重要
确保您的virtualenv已激活,并且已运行了pip安装-r requirements.txt
注意:此时,请尝试使用服务器public ippython manage.py runserver server\u public\u ip:8000运行您的项目。许多人认为,由于他们的项目在本地运行,因此它将在服务器上运行。事情总是出差错
确保在服务器上运行python manage.py
。这将收集静态文件并为其创建一个目录。请注意它告诉您要将它们复制到的路径,您将需要它用于nginx站点可用配置文件中的/static/location块
确保您的gunicorn.conf命令