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

相关推荐
努力学习的小廉11 分钟前
【C++】 —— 笔试刷题day_20
开发语言·c++
西柚小萌新40 分钟前
【Python爬虫基础篇】--1.基础概念
开发语言·爬虫·python
ghost1431 小时前
C#学习第17天:序列化和反序列化
开发语言·学习·c#
難釋懷2 小时前
bash的特性-bash中的引号
开发语言·chrome·bash
Hello eveybody3 小时前
C++按位与(&)、按位或(|)和按位异或(^)
开发语言·c++
6v6-博客3 小时前
2024年网站开发语言选择指南:PHP/Java/Node.js/Python如何选型?
java·开发语言·php
Baoing_3 小时前
Next.js项目生成sitemap.xml站点地图
xml·开发语言·javascript
被AI抢饭碗的人3 小时前
c++:c++中的输入输出(二)
开发语言·c++
lqqjuly3 小时前
C++ 面向对象关键语法详解:override、虚函数、转发调用和数组引用传参-策略模式
开发语言·c++
CPPAlien3 小时前
Python for MLOps - 第一阶段学习笔记
python