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

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

相关推荐
RW~5 小时前
Minio安装配置,桶权限设置,nginx代理 https minio
运维·nginx·https·minio
CodeWithMe7 小时前
Nginx入门进阶:从零到高手的实战指南
运维·nginx
Ahlson7 小时前
【fnNAS】docker的nginx配置html
nginx·docker·容器·fnnas
斯普信专业组9 小时前
K8s环境下基于Nginx WebDAV与TLS/SSL的文件上传下载部署指南
nginx·kubernetes·ssl
亦舒.10 小时前
宝塔面板Nginx手动配置负载均衡实战指南
运维·nginx·负载均衡
deming_su12 小时前
轻松上手:使用Nginx实现高效负载均衡
运维·nginx·负载均衡
苹果醋313 小时前
Navicat Premium 12连接Oracle时提示oracle library is not loaded的问题解决
java·运维·spring boot·mysql·nginx
Jack_hrx14 小时前
docker部署nginx
linux·nginx·docker·centos
紫璨月17 小时前
nginx反向代理的bug
运维·nginx·bug
就叫飞六吧10 天前
基于keepalived、vip实现高可用nginx (centos)
python·nginx·centos