Python Flask 项目部署指南

文章目录

  • 概述
  • windows 部署
  • 准备工作
  • 使用 Waitress 部署 Flask 应用
  • linux 部署
  • **2. 使用 WSGI 服务器**
  • 示例:使用 Gunicorn
  • nginx反向代理
  • **5. 使用进程管理工具**
  • 示例:使用 Systemd

  • 概述

    在 Windows 上使用 Waitress 部署 Flask 应用是一个不错的选择,因为 Waitress 是一个纯 Python 编写的 WSGI 服务器,它兼容 Windows 系统。以下是具体步骤来帮助你在 Windows 上通过 Waitress 部署 Flask 应用。

    windows 部署

    准备工作

    1. 确保你已经安装了 Python:Waitress 需要 Python 环境,请确保你的系统上已经安装了 Python,并且版本适合你的项目需求。
    2. 创建虚拟环境(可选但推荐):为了管理项目的依赖关系,建议为你的 Flask 项目创建一个虚拟环境。
      python -m venv venv
      

      激活虚拟环境:

       .\venv\Scripts\activate
    
    1. 安装 Flask 和 Waitress:如果你还没有安装 Flask 和 Waitress,可以通过 pip 安装它们。
      pip install flask waitress
      

    使用 Waitress 部署 Flask 应用

    假设你已经有了一个简单的 Flask 应用,文件名为 app.py。接下来,我们将使用 Waitress 来运行这个应用。

    1. 修改你的 Flask 应用:确保你的 Flask 应用可以被外部访问。通常情况下,你需要指定主机和端口。但是,Waitress 在 Windows 上运行时,你可以直接使用以下命令而不需要特别修改代码。

    2. 使用 Waitress 运行 Flask 应用:打开命令提示符或 PowerShell,激活你的虚拟环境(如果使用的话),然后运行下面的命令来启动你的 Flask 应用。

      waitress-serve --port=8080 --call "app:create_app"
      

      这里有几个关键点需要注意:

    3. --port=8080:指定服务监听的端口号,可以根据需要进行调整。
    4. "app:create_app":这是告诉 Waitress 如何加载你的 Flask 应用。这里的 app 是包含 Flask 应用实例的 Python 文件名(不包括 .py 扩展名),而 create_app 是该文件中返回 Flask 应用实例的函数名称。
      如果你的 Flask 应用实例是直接定义的(如 app = Flask(__name__)),可以直接引用它,而无需使用 --call 参数。
    5. waitress-serve --port=8080 app:app
      

      如果你希望使用 --call 参数,可以通过工厂函数来创建 Flask 应用实例。修改 app.py 文件如下:

      # app.py
      from flask import Flask
      
      def create_app():
          app = Flask(__name__)
      
          @app.route('/')
          def home():
              return "Hello, World!"
      
          return app
      

      然后运行以下命令:

      waitress-serve --port=8080 --call "app:create_app"
      

      这里 --call "app:create_app" 表示:

    6. app 是包含工厂函数的 Python 文件名。
    7. create_app 是返回 Flask 应用实例的函数。

    linux 部署

    2. 使用 WSGI 服务器

    Flask 内置的开发服务器不适合生产环境。推荐使用以下 WSGI 服务器:

  • Gunicorn(适合 Linux/Unix 系统)
  • Waitress(适合 Windows 系统)
  • 示例:使用 Gunicorn
    pip install gunicorn
    gunicorn -w 4 -b 0.0.0.0:8000 app:app
    
  • -w 4:启动 4 个工作进程(根据 CPU 核心数调整)。
  • -b 0.0.0.0:8000:绑定到所有网络接口的 8000 端口。
  • app:app:第一个 app 是文件名(如 app.py),第二个 app 是 Flask 实例名称。
  • nginx反向代理

    ubuntu 配置

    1. 安装 Nginx:
      sudo apt update
      sudo apt install nginx
      
    2. 创建 Nginx 配置文件(例如 /etc/nginx/sites-available/flask_app):
      server {
          listen 80;
          server_name your_domain_or_ip;
      
          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;
              proxy_set_header X-Forwarded-Proto $scheme;
          }
      }
      
    3. 启用配置并重启 Nginx:
      sudo ln -s /etc/nginx/sites-available/flask_app /etc/nginx/sites-enabled/
      sudo nginx -t  # 测试配置是否正确
      sudo systemctl restart nginx
      

    5. 使用进程管理工具

    为了确保 Flask 应用在后台持续运行并能够自动重启,可以使用进程管理工具,如:

  • Supervisor
  • Systemd
  • PM2(适合 Node.js,但也可以用于 Python)
  • 示例:使用 Systemd
    1. 创建服务文件(例如 /etc/systemd/system/flask_app.service):
      [Unit]
      Description=Gunicorn instance to serve Flask app
      After=network.target
      
      [Service]
      User=your_user
      Group=www-data
      WorkingDirectory=/path/to/your/app
      ExecStart=/path/to/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
      
      [Install]
      WantedBy=multi-user.target
      
    2. 启动并启用服务:
      sudo systemctl start flask_app
      sudo systemctl enable flask_app
      

    windows 可以使用之前 winsw的介绍
    winsw 介绍

    作者:心之语歌

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python Flask 项目部署指南

    发表回复