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 管理进程崩溃自启。
回复
0 条回复