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 介绍

相关推荐
xb11328 分钟前
C#——方法的定义、调用与调试
开发语言·c#
元基时代20 分钟前
专业的短视频发布矩阵哪家靠谱
大数据·人工智能·python·矩阵
froginwe1128 分钟前
MVC HTML 帮助器
开发语言
深蓝电商API43 分钟前
实战:爬取豆瓣电影Top250,并生成Excel榜单
爬虫·python·excel
王嘉俊9251 小时前
ThinkPHP 入门:快速构建 PHP Web 应用的强大框架
开发语言·前端·后端·php·框架·thinkphp
syty20201 小时前
AST语法树应用于sql检查
java·开发语言·ast
倔强菜鸟1 小时前
2025.8.10-学习C++(一)
开发语言·c++·学习
ZXF_H1 小时前
C/C++预定义宏与调试日志输出模板
开发语言·c++·日志·调试·预定义宏
阿星_2 小时前
PyCharm 开发 Python 项目后,将其打包并部署到 Nginx 服务器
python·pycharm
蓝桉~MLGT2 小时前
Python学习历程——组织结构(包含for、if、while等等)
开发语言·python·学习