文章目录
🔥 为什么你的Flask项目还在裸奔?(必看)
还在用flask run
启动项目?每次重启都要手动敲命令?访问量稍微大点就崩溃?(别问我怎么知道的)是时候给你的玩具级开发服务器升级了!今天咱们就来聊聊如何把Flask应用部署成真正的生产级应用!
🛠️ 部署前的灵魂三问
- WSGI服务器选哪个?(Gunicorn/uWSGI/Waitress)
- 反向代理怎么配?(Nginx/Apache/Caddy)
- 进程管理怎么做?(Supervisor/systemd)
💻 实战部署四步走(含避坑指南)
第一步:准备生产环境(千万别跳过!)
# 创建虚拟环境(Python老司机的基操)
python -m venv venv
source venv/bin/activate
# 安装依赖(记得先导出开发环境依赖!)
pip install -r requirements.txt
# 安装生产依赖(划重点)
pip install gunicorn psycopg2-binary # 根据实际数据库选装
第二步:选择你的WSGI战车
Gunicorn极简配置:
gunicorn -w 4 -b 0.0.0.0:8000 app:app
(参数解释:4个工作进程/绑定所有IP的8000端口)
uWSGI高级玩法:
[uwsgi]
module = app:app
master = true
processes = 5
socket = myapp.sock
chmod-socket = 660
vacuum = true
第三步:Nginx反向代理配置(核心!)
server {
listen 80;
server_name yourdomain.com;
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;
}
location /static {
alias /path/to/your/static/files; #(超级重要)静态文件别让Flask处理!
}
}
重启Nginx前记得测试配置:sudo nginx -t
第四步:进程管理(防猝死神器)
Supervisor配置示例:
[program:myflaskapp]
command=/path/to/venv/bin/gunicorn -w 4 app:app
directory=/path/to/your/project
user=yourusername
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
🚨 常见翻车现场(血泪教训)
- 端口冲突:检查
netstat -tulpn | grep :80
- 权限问题:别用root运行!建议新建专用用户
- 环境变量丢失:推荐使用
python-dotenv
- 静态文件404:检查Nginx配置路径权限
- 数据库连接失败:生产环境别用SQLite!
🔧 高级技巧(装逼必备)
- 日志切割:用logrotate管理日志文件
- 性能监控:Prometheus + Grafana组合拳
- 自动化部署:Git Hook + Webhook实现CI/CD
- 配置管理:使用.env文件区分环境配置
🌟 我的私藏配置方案
推荐组合:Gunicorn + Nginx + Supervisor
(适合中小型项目,上手快配置简单)
# 一键安装全家桶
sudo apt-get install nginx supervisor
pip install gunicorn
📈 性能调优小抄
参数 | 推荐值 | 说明 |
---|---|---|
worker数量 | CPU核数*2+1 | 根据实际负载调整 |
timeout | 30-60秒 | 防止长时间阻塞 |
keepalive | 2秒 | 减少连接建立开销 |
worker_class | gevent | 异步处理提升并发能力 |
🚀 最终检验清单
✅ 应用在后台稳定运行
✅ 静态文件由Nginx直接处理
✅ 错误日志正常记录
✅ 服务开机自动启动
✅ 配置了防火墙规则
✅ 域名解析正确
部署完别急着走!用ab -n 1000 -c 100 http://yourdomain.com
做个压力测试,看看你的应用能抗住多少并发!(测试前记得备份数据库)
最后说句掏心窝的:部署不是终点,而是运维的起点!遇到问题多查日志,善用监控工具,你的Flask应用才能真正从玩具车进化成超级跑车!