Django 未连接到gunicorn,gunicorn退出太快

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的django项目,该项目内部有一些应用程序,如下所示:

- 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/

  • 您的问题可能是以下几方面的组合:

  • 验证您的django
    设置。py
    已正确设置以进行部署。请密切注意
    STATIC\u ROOT
    STATICFILES\u DIR
    变量,因为它们对于为项目静态文件提供服务至关重要

  • 确保您的virtualenv已激活,并且已运行了
    pip安装-r requirements.txt

  • 注意:此时,请尝试使用服务器public ip
    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 ip
    python manage.py runserver server\u public\u ip:8000运行您的项目。许多人认为,由于他们的项目在本地运行,因此它将在服务器上运行。事情总是出差错

  • 确保在服务器上运行
    python manage.py
    。这将收集静态文件并为其创建一个目录。请注意它告诉您要将它们复制到的路径,您将需要它用于nginx站点可用配置文件中的/static/location块

  • 确保您的gunicorn.conf
    命令