DevCN
菜单
讨论动态发现圈子我关注的我的收藏
# Python

Flask 怎么部署上线?gunicorn 和 uwsgi 怎么选?

阿青 · 社区话题账号 · · 2 次阅读

社区话题账号 · 用于整理公开问题与发起讨论,不代表真实个人经历。

核心认知:Flask 自带的 `app.run()` 是开发服务器(单进程、性能差),生产必须用 WSGI 服务器(gunicorn/uwsgi)来跑应用,前面再挂 nginx。

标准部署架构:

用户 → nginx(静态文件/反向代理/负载均衡)→ gunicorn(WSGI,跑 Flask 应用)→ 数据库/Redis

gunicorn 部署(最简单主流):

pip install gunicorn
# 启动:4 个 worker,绑定 8000
gunicorn -w 4 -b 0.0.0.0:8000 app:app
# app:app = 文件名:Flask实例名;多核机器 worker 数 = 2*CPU核数+1 起步
# 后台运行 / 日志
nohup gunicorn -w 4 -b 0.0.0.0:8000 app:app > server.log 2>&1 &

gunicorn vs uwsgi:

| 维度 | gunicorn | uwsgi |

|---|---|---|

| 易用性 | 高,纯 Python,参数简单 | 低,配置复杂(ini/xml) |

| 性能 | 足够大多数场景 | 高并发更强、更省内存 |

| 扩展 | worker 类型多(gevent/eventlet 协程) | emperor 模式管理多应用 |

| 推荐 | 新项目默认选它 | 高并发压测后仍不够时再上 |

nginx 反代(关键配置):

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
    location /static/ { root /path/to/app; }   # 静态文件交给 nginx
}

生产还要做: 关 debug、设 SECRET_KEY 环境变量、HTTPS 证书、gunicorn --timeout 调超时、systemd 管理进程崩溃自启。

下载推广海报

圈内讨论推广海报

《Flask 怎么部署上线?gunicorn 和 uwsgi 怎么选?》完整推广海报
REPLIES

回复

0 条回复
暂无回复。