supervisord管理Gunicorn进程,使用Nginx作为反向代理运行flask web项目

1. 安装 Gunicorn

bash 复制代码
在项目虚拟环境中安装 Gunicorn:

2. 基本用法

配置文件

创建一个 Gunicorn 配置文件(如 gunicorn_config.py),方便管理复杂配置。

示例 gunicorn_config.py:

bash 复制代码
bind = "0.0.0.0:8000"      # 绑定地址和端口
workers = 4                 # 工作进程数
threads = 2                 # 每个工作进程的线程数
daemon = False              # 是否以守护进程运行(建议用 supervisord 管理)
accesslog = "-"             # 访问日志输出到标准输出
errorlog = "-"              # 错误日志输出到标准错误
timeout = 30                # 请求超时时间(秒)
keepalive = 5               # 保持连接的时间(秒)

启动命令:

gunicorn app:app -c gunicorn_config.py

3. 配合 Supervisord 管理进程

使用 supervisord 可以确保 Gunicorn 进程在后台持续运行,并自动重启。

  1. 创建 Supervisord 配置文件
    在 /etc/supervisord.d/ 目录下新建文件(如 flask_app.ini):
bash 复制代码
[program:flask_app]
command=/path/to/venv/bin/gunicorn -c /path/to/gunicorn_config.py app:app
directory=/path/to/your/flask/project  ; 项目根目录
autostart=true
autorestart=true
stderr_logfile=/var/log/flask_app.err.log
stdout_logfile=/var/log/flask_app.out.log
user=www-data  ; 运行用户(根据实际情况修改)
  1. 重新加载 Supervisord 配置
bash 复制代码
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start flask_app

supervisorctl restart flask_app  #重启项目

3. 配合 Nginx 反向代理

在 Gunicorn 前使用 Nginx 作为反向代理,处理静态文件、SSL 和负载均衡。

示例 Nginx 配置(/etc/nginx/conf.d/flask_app.conf):

bash 复制代码
server {
    listen 80;
    server_name your_domain.com; #域名或者服务器IP

    # 静态文件处理
    location /static {
        alias /path/to/your/flask/project/static;
    }

    # 反向代理到 Gunicorn
    location / {
        proxy_pass http://127.0.0.1:8000; # 项目启动的端口号
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

重启 Nginx:

bash 复制代码
nginx -t 检查配置文件是否错去
nginx -s reload 重启
sudo systemctl restart nginx 重启

4. 常见问题解决

Gunicorn 无法启动

  • 错误日志:查看 --error-logfile 指定的日志文件。
  • 端口占用:检查端口是否被其他进程占用:
    netstat -tuln | grep 8000

静态文件无法加载

  • 确保 Nginx 配置中 location /static 的路径正确。
  • 在 Flask 中设置 STATIC_FOLDER。

性能优化

  • 调整 workers 和 threads 参数。
  • 使用异步工作模式(需安装 gevent 或 eventlet):
bash 复制代码
pip install gevent
gunicorn app:app -k gevent --worker-connections 1000

总结

开发环境:直接运行 gunicorn app:app。

生产环境:使用配置文件 + Supervisord + Nginx,确保高可用性和安全性。

如果有其他问题,欢迎提供具体错误信息进一步排查!

相关推荐
肠胃炎6 小时前
挂载方式部署项目
服务器·前端·nginx
曲幽10 小时前
FastAPI实战:WebSocket vs Socket.IO,这回真给我整明白了!
python·websocket·nginx·socket·fastapi·web·async·socketio
袁庭新13 小时前
M系列芯片Mac上通过Homebrew一键安装/卸载Nginx并上线项目全指南
运维·nginx·macos·袁庭新·袁庭新ai
Densen201413 小时前
发布blazor应用到Linux, 使用nginx作为WebSocket代理
linux·websocket·nginx
不是书本的小明14 小时前
Apache vs Nginx vs Tomcat 核心区别与优化
nginx·tomcat·apache
困惑阿三1 天前
客户消息及时反馈
nginx·node.js·飞书·企业微信
liurunlin8882 天前
httpslocalhostindex 配置的nginx,一刷新就报404了
运维·nginx
BullSmall2 天前
Nginx负载均衡会话保持配置指南
运维·nginx·负载均衡
你才是臭弟弟2 天前
Nginx部署前后端
运维·nginx