python flask 项目部署

文章目录

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

概述

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

windows 部署

准备工作

  1. 确保你已经安装了 Python:Waitress 需要 Python 环境,请确保你的系统上已经安装了 Python,并且版本适合你的项目需求。

  2. 创建虚拟环境(可选但推荐) :为了管理项目的依赖关系,建议为你的 Flask 项目创建一个虚拟环境。

    bash 复制代码
    python -m venv venv

    激活虚拟环境:

bash 复制代码
   .\venv\Scripts\activate
  1. 安装 Flask 和 Waitress :如果你还没有安装 Flask 和 Waitress,可以通过 pip 安装它们。

    bash 复制代码
    pip install flask waitress

使用 Waitress 部署 Flask 应用

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

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

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

    bash 复制代码
    waitress-serve --port=8080 --call "app:create_app"

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

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

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

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

    然后运行以下命令:

    bash 复制代码
    waitress-serve --port=8080 --call "app:create_app"

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

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

linux 部署

2. 使用 WSGI 服务器

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

  • Gunicorn(适合 Linux/Unix 系统)
  • Waitress(适合 Windows 系统)
示例:使用 Gunicorn
bash 复制代码
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:

    bash 复制代码
    sudo apt update
    sudo apt install nginx
  2. 创建 Nginx 配置文件(例如 /etc/nginx/sites-available/flask_app):

    nginx 复制代码
    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:

    bash 复制代码
    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):

    ini 复制代码
    [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. 启动并启用服务:

    bash 复制代码
    sudo systemctl start flask_app
    sudo systemctl enable flask_app

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

相关推荐
Brilliant Nemo1 分钟前
四、SpringMVC实战:构建高效表述层框架
开发语言·python
2301_7875528733 分钟前
console-chat-gpt开源程序是用于 AI Chat API 的 Python CLI
人工智能·python·gpt·开源·自动化
懵逼的小黑子37 分钟前
Django 项目的 models 目录中,__init__.py 文件的作用
后端·python·django
Y3174291 小时前
Python Day23 学习
python·学习
Ai尚研修-贾莲2 小时前
Python语言在地球科学交叉领域中的应用——从数据可视化到常见数据分析方法的使用【实例操作】
python·信息可视化·数据分析·地球科学
格林威2 小时前
Baumer工业相机堡盟工业相机的工业视觉中为什么偏爱“黑白相机”
开发语言·c++·人工智能·数码相机·计算机视觉
橙子199110162 小时前
在 Kotlin 中什么是委托属性,简要说说其使用场景和原理
android·开发语言·kotlin
androidwork2 小时前
Kotlin Android LeakCanary内存泄漏检测实战
android·开发语言·kotlin
qq_508576093 小时前
if __name__ == ‘__main__‘
python
学地理的小胖砸3 小时前
【Python 基础语法】
开发语言·python