1. 为什么选择Nginx+Gunicorn部署Flask?
三年前我刚接触Python Web部署时,曾天真地以为直接python app.py就能应对生产环境。直到某个深夜,服务器在200并发请求下崩溃,我才明白WSGI服务器和反向代理的重要性。Nginx+Gunicorn这对黄金组合,已经成为Python Web应用部署的标准范式。
Gunicorn作为WSGI HTTP服务器,专门为Python Web应用提供多进程处理能力。它采用pre-fork worker模型,主进程管理一组worker进程来处理实际请求。这种架构既避免了Python全局解释器锁(GIL)的限制,又能充分利用多核CPU。我常用的配置是workers = (2 * cpu_cores) + 1,这个公式来自Gunicorn官方建议,能在并发性能和内存消耗间取得平衡。
而Nginx作为高性能的反向代理服务器,主要承担以下关键职责:
- 处理静态文件请求(比Python应用直接处理快10倍以上)
- 负载均衡和请求缓冲
- SSL终端和HTTP/2支持
- 防御基础DDoS攻击
实测表明,这种架构组合可以轻松支撑2000+ QPS的流量。去年我用这个方案部署的电商后台API,在双十一期间稳定处理了超过300万次请求。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与组件安装
2.1 Python环境配置
推荐使用pyenv管理Python版本,避免系统Python的依赖污染。这是我常用的初始化命令集:
bash复制# 安装pyenv
curl https://pyenv.run | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
# 安装指定Python版本(以3.9.13为例)
pyenv install 3.9.13
pyenv global 3.9.13
# 验证安装
python -V # 应显示Python 3.9.13
注意:生产环境建议锁定Python小版本号(如3.9.13而非3.9),避免自动升级导致兼容性问题。
2.2 创建虚拟环境
永远不要在系统Python中直接安装项目依赖!使用虚拟环境是Python开发的基本素养:
bash复制python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate.bat # Windows
安装必要依赖:
bash复制pip install flask gunicorn
2.3 Nginx安装与基础配置
不同操作系统的安装方式:
Ubuntu/Debian:
bash复制sudo apt update
sudo apt install nginx
sudo systemctl start nginx
CentOS/RHEL:
bash复制sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx
验证Nginx安装:
bash复制curl -I 127.0.0.1
应返回类似响应:
code复制HTTP/1.1 200 OK
Server: nginx/1.18.0
3. Flask应用准备
3.1 最小化示例应用
创建一个基础的Flask应用app.py:
python复制from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return '<h1>Hello, World!</h1>'
@app.route('/health')
def health():
return {'status': 'healthy'}, 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
测试应用:
bash复制flask run
# 或
