使用 Gunicorn 部署 Django 项目

准备工作. 安装 Gunicorn

复制代码
pip install gunicorn

1. 使用配置文件

创建 gunicorn_conf.py 文件:

复制代码
import multiprocessing

bind = "127.0.0.0:8001"
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "gthread"
threads = 4
max_requests = 1000
timeout = 30
keepalive = 2
accesslog = "/var/log/gunicorn/access.log"
errorlog = "/var/log/gunicorn/error.log"

然后运行:这是手动测试

复制代码
gunicorn -c gunicorn_conf.py zhiliaoblog.wsgi:application

2. 结合 Nginx

Nginx 配置示例:

nginx

复制代码
upstream django_app {
    server 127.0.0.1:8001;
}

server {
    listen 80;
    server_name blog.larance.xyz;

    location / {
        proxy_pass http://django_app;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_redirect off;
    }
    
    location /static/ {
        alias /home/ubuntu/zhiliaoblog/static/;
    }
    
    location /media/ {
        alias /home/ubuntu/zhiliaoblog/media/;
    }
}

3. 创建 Supervisor 配置文件

/etc/supervisor/conf.d/zhiliaoblog.conf

复制代码
[program:zhiliaoblog]
command=/home/ubuntu/zhiliaoblog/blog_env/bin/gunicorn -c /home/ubuntu/zhiliaoblog/gunicorn_conf.py zhiliaoblog.wsgi:application
directory=/home/ubuntu/zhiliaoblog
user=ubuntu
autostart=true
autorestart=true
startsecs=5
startretries=3
redirect_stderr=true
stdout_logfile=/var/log/supervisor/zhiliaoblog.log
environment=
    DJANGO_SETTINGS_MODULE="zhiliaoblog.settings",
    PATH="/home/ubuntu/zhiliaoblog/blog_env/bin:%(ENV_PATH)s",
    PYTHONPATH="/home/ubuntu/zhiliaoblog"

启用并启动服务:

sudo supervisorctl reread

sudo supervisorctl update

sudo supervisorctl start zhiliaoblog