在生产环境中部署 Flask 应用程序需要考虑稳定性、安全性、可扩展性和性能。以下是 Flask 应用的常见生产部署方法及最佳实践:
常见的 Flask 生产环境部署方式包括:
部署方式 | 适用场景 | 说明 |
---|---|---|
Gunicorn + Nginx | 适合中小型项目 | 轻量级,性能稳定 |
uWSGI + Nginx | 高性能并发、生产环境推荐 | 生产级别,支持异步工作 |
Docker + Kubernetes | 容器化部署,微服务架构 | 适合大规模微服务集群 |
AWS/GCP/Azure | 云平台,自动扩展 | 部署到云端,支持负载均衡等 |
确保你的 Flask 应用具有以下结构:
my_flask_app/
│-- app/
│ ├── __init__.py
│ ├── routes.py
│ ├── models.py
│-- static/
│-- templates/
│-- config.py
│-- requirements.txt
│-- run.py
│-- wsgi.py
run.py
: 入口文件,启动 Flask。requirements.txt
: 依赖库清单。wsgi.py
: WSGI 入口点。示例 wsgi.py
文件:
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run()
在服务器上执行以下命令:
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 安装依赖
pip install -r requirements.txt
在生产环境中,不建议使用 Flask 自带的开发服务器,改用 Gunicorn 作为 WSGI 服务器:
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app
说明:
-w 4
表示使用 4 个工作进程。-b 0.0.0.0:8000
绑定到 8000 端口。gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app --daemon
Nginx 作为反向代理,将外部请求转发到 Flask 应用,提高性能和安全性。
sudo apt update
sudo apt install nginx -y
创建配置文件 /etc/nginx/sites-available/flask_app
:
server {
listen 80;
server_name your_domain.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/app/static/;
}
}
sudo ln -s /etc/nginx/sites-available/flask_app /etc/nginx/sites-enabled
sudo nginx -t # 测试配置
sudo systemctl restart nginx
使用 Supervisor 监控 Gunicorn 进程,保证 Flask 应用自动重启。
sudo apt install supervisor -y
在 /etc/supervisor/conf.d/flask_app.conf
添加如下内容:
[program:flask_app]
command=/path/to/your/venv/bin/gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app
directory=/path/to/your/app/
autostart=true
autorestart=true
stderr_logfile=/var/log/flask_app.err.log
stdout_logfile=/var/log/flask_app.out.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start flask_app
使用免费的 Let’s Encrypt SSL 证书,确保应用使用 HTTPS。
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com
证书续订:
sudo certbot renew --dry-run
可以使用 Docker 容器化 Flask 应用:
Dockerfile
FROM python:3.9
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "wsgi:app"]
docker build -t flask_app .
docker run -d -p 8000:8000 flask_app
在云环境中,推荐使用:
为了保障 Flask 应用的性能和稳定性,请遵循以下最佳实践:
完整的 Flask 生产环境部署流程如下: