Bootstrap

如何部署 Flask 应用程序到生产环境?

在生产环境中部署 Flask 应用程序需要考虑稳定性、安全性、可扩展性和性能。以下是 Flask 应用的常见生产部署方法及最佳实践:


1. 选择部署方式

常见的 Flask 生产环境部署方式包括:

部署方式适用场景说明
Gunicorn + Nginx适合中小型项目轻量级,性能稳定
uWSGI + Nginx高性能并发、生产环境推荐生产级别,支持异步工作
Docker + Kubernetes容器化部署,微服务架构适合大规模微服务集群
AWS/GCP/Azure云平台,自动扩展部署到云端,支持负载均衡等

2. 生产部署步骤

步骤 1:准备 Flask 应用

确保你的 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()

步骤 2:设置虚拟环境并安装依赖

在服务器上执行以下命令:

# 创建虚拟环境
python3 -m venv venv

# 激活虚拟环境
source venv/bin/activate

# 安装依赖
pip install -r requirements.txt

步骤 3:使用 Gunicorn 运行 Flask

在生产环境中,不建议使用 Flask 自带的开发服务器,改用 Gunicorn 作为 WSGI 服务器:

安装 Gunicorn
pip install gunicorn
启动 Flask 应用
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

步骤 4:配置 Nginx 作为反向代理

Nginx 作为反向代理,将外部请求转发到 Flask 应用,提高性能和安全性。

安装 Nginx
sudo apt update
sudo apt install nginx -y
配置 Nginx

创建配置文件 /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

步骤 5:使用 Supervisor 进行进程管理

使用 Supervisor 监控 Gunicorn 进程,保证 Flask 应用自动重启。

安装 Supervisor
sudo apt install supervisor -y
配置 Supervisor

/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

步骤 6:启用 HTTPS(Let’s Encrypt)

使用免费的 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

步骤 7:Docker 部署 Flask 应用

可以使用 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

步骤 8:使用 AWS/GCP 进行云端部署

在云环境中,推荐使用:

  • AWS Elastic Beanstalk:自动管理 Flask 应用。
  • GCP App Engine:零服务器管理。
  • Azure Web Apps:简化部署。

3. 生产环境最佳实践

为了保障 Flask 应用的性能和稳定性,请遵循以下最佳实践:

  1. 使用 WSGI 服务器(Gunicorn、uWSGI)而非 Flask 内建服务器。
  2. 使用 Nginx 或 Apache 作为反向代理,提高安全性和性能。
  3. 启用 HTTPS 以保护数据传输安全。
  4. 使用 Supervisor 或 Systemd 管理进程,防止意外退出。
  5. 使用日志监控(例如 ELK、Prometheus + Grafana)追踪应用状态。
  6. 使用环境变量管理敏感信息,避免硬编码。
  7. 定期备份和更新依赖,修复安全漏洞。

总结

完整的 Flask 生产环境部署流程如下:

  1. 准备 Flask 应用代码。
  2. 创建虚拟环境并安装依赖。
  3. 使用 Gunicorn 运行 Flask 应用。
  4. 配置 Nginx 作为反向代理。
  5. 使用 Supervisor 进行进程管理。
  6. 配置 HTTPS 证书(Let’s Encrypt)。
  7. 可选:Docker 容器化部署。
  8. 可选:使用 AWS/GCP 等云平台托管。

;