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,确保高可用性和安全性。

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

相关推荐
章老师说1 天前
NGINX官方谈Lua风险:这其实是两条网关技术路线之争
运维·nginx·负载均衡·lua·openresty
xixingzhe22 天前
SpringBoot + Nginx 免鉴权接口安全防护方案
运维·nginx·安全
酷炫的水壶2 天前
使用memc-nginx和srcache-nginx模块构建高效透明的缓存机制
运维·nginx·缓存
智商偏低2 天前
Windows Nginx 完整安装 + 启动教程
运维·nginx
oscar9992 天前
3.4 Nginx 负载均衡——动态再平衡的反人性纪律
nginx·github·负载均衡·财富源代码
川石课堂软件测试2 天前
性能测试|Nginx中间件监控与调优
linux·python·nginx·中间件·单元测试·压力测试·harmonyos
m0_740859623 天前
Nginx进行配置文件拆分(以windows解压版为例)
nginx
开发小程序的之朴3 天前
认识安企CMS-安装安企CMS的环境要求
nginx·golang·系统架构
考虑考虑3 天前
nginx配置ssl
运维·后端·nginx
至乐活着3 天前
ELK日志系统从零搭建到实战:Nginx日志采集与可视化全攻略
nginx·elk·elasticsearch·docker·日志系统