当前位置: 首页 > article >正文

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

1. 安装 Gunicorn

在项目虚拟环境中安装 Gunicorn:

2. 基本用法

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

示例 gunicorn_config.py:

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):
[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 配置
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):

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:

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):
pip install gevent
gunicorn app:app -k gevent --worker-connections 1000

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

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

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


http://www.kler.cn/a/573926.html

相关文章:

  • 代理与 hosts 文件冲突问题解决方案
  • uniapp封装路由管理(兼容Vue2和Vue3)
  • 批量对 Word 优化与压缩,减少 Word 文件大小
  • 通信小贾的西天取经之路:从茫然小白到工业互联网售前
  • Java基础知识大全(含答案,面试基础)
  • FX-结构体
  • FusionInsight MRS云原生数据湖
  • 江科大51单片机笔记【8】LED点阵屏显示图形及动画(下)
  • Hive-优化(参数优化篇)
  • 扩散语言模型:从图像生成到文本创造的范式跃迁
  • 随手记录第十六话 -- Go 语言入门:基础知识与常用框架
  • 计算机网络开发(2)TCP\UDP区别、TCP通信框架、服务端客户端通信实例
  • 每天一个Flutter开发小项目 (13) : 本地数据随心存取 - 构建SQLite ToDo 应用,掌握Flutter本地数据库操作
  • 算法·搜索
  • 《张一鸣,创业心路与算法思维》
  • 汽车AI识别及处理解决方案,引领未来驾驶新风尚
  • MybatisPlus从入门到精通
  • Linux基础 IO 和文件
  • Git安装与配置
  • 游戏树搜索与优化策略:Alpha-Beta剪枝及其实例分析