1. 为什么需要Nginx+Gunicorn+Systemd组合部署Flask?
很多刚接触Flask开发的朋友可能会疑惑:为什么不能直接用app.run()启动服务?我在本地测试时运行python app.py明明可以正常访问啊?这里有个关键认知需要转变——开发服务器≠生产环境。
Flask自带的开发服务器(Werkzeug)设计初衷是给开发者调试用的,它有几个致命缺陷:
- 单进程单线程:同一时间只能处理一个请求
- 无负载均衡:突发流量直接压垮服务
- 缺乏安全防护:没有请求过滤机制
- 稳定性差:进程崩溃后不会自动重启
去年我负责的一个项目就吃过这个亏。当时图省事直接用开发服务器上线,结果活动期间用户量激增,服务器CPU直接飙到100%,最终导致服务不可用。后来改用Nginx+Gunicorn方案后,同样的业务量CPU负载始终稳定在30%以下。
这套组合拳的分工非常明确:
- Gunicorn:作为WSGI容器管理多个Flask worker进程
- Nginx:处理静态文件、负载均衡和反向代理
- Systemd:实现服务监控和自动恢复
2. 环境准备与基础配置
2.1 系统环境检查
建议使用Ubuntu 20.04/22.04 LTS或CentOS 7/8作为生产环境。首先更新系统:
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y
# CentOS/RHEL
sudo yum update -y
安装必备工具链:
# 安装编译工具和Python环境
sudo apt install -y build-essential python3-dev python3-pip python3-venv
2.2 创建Python虚拟环境
永远不要在系统Python中直接安装依赖!虚拟环境能有效隔离项目依赖:
mkdir ~/flask_project && cd ~/flask_project
python3 -m venv venv
source venv/bin/activate # 激活环境
验证虚拟环境:

419

被折叠的 条评论
为什么被折叠?



