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

相关推荐
01漫游者1 分钟前
JavaScript函数与对象增强知识
开发语言·javascript·ecmascript
IGAn CTOU3 分钟前
Java高级开发进阶教程之系列
java·开发语言
leo825...6 分钟前
Claude Code Skills 清单(本地)
java·python·ai编程
csbysj20209 分钟前
SQL NULL 函数详解
开发语言
其实防守也摸鱼12 分钟前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学
NGSI vimp13 分钟前
Java进阶——如何查看Java字节码
java·开发语言
A7bert77732 分钟前
【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·python·深度学习·yolo·目标检测
We་ct1 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
skywalk81631 小时前
在考虑双轨制,即在中文语法的基础上,加上数学公式的支持,这样像很多计算将更加简单方便,就像现在的小学数学课本里面一样,比如:定x=2*x + 1
开发语言
小书房1 小时前
Kotlin的by
android·开发语言·kotlin·委托·by