当前位置: 首页 > news >正文

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"
    

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

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

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

    # app.py
    from flask import Flaskdef 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" 表示:

    • app 是包含工厂函数的 Python 文件名。
    • 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 介绍

http://www.xdnf.cn/news/8965.html

相关文章:

  • 源码分析之Leaflet中Point
  • CSS 美化页面(五)
  • TikTok流量变现全攻略:免费与付费玩法解析
  • 【项目管理】第19章 配置与变更管理-- 知识点整理
  • 嵌入式ARM RISCV toolchain工具 梳理arm-none-eabi-gcc
  • 第八篇:系统分析师第三遍——3、4章
  • index: 自动化浏览器智能体
  • 【 图像梯度处理,图像边缘检测】图像处理(OpenCv)-part6
  • HarmonyOS 基础语法概述 UI范式
  • 双击热备方案及不同方案的需求、方案对比
  • hive的基础配置优化与数仓流程
  • GitHub Copilot在产品/安全团队中的应用实践:处理Markdown、自动化报告与电子表格、使用CLI命令等
  • leetcode0145. 二叉树的后序遍历-easy
  • AutoSAR从概念到实践系列之MCAL篇(一)——MCAL架构及其模块详解
  • 手撕数据结构算法OJ——栈和队列
  • eNSP无法启动AR报错码40,而且按照eNSP帮助手册排查都没用,我的处理方法【自己存档版】
  • 2N60-ASEMI功业控制与自动化专用2N60
  • python中,处理多分类时,模型之间的参数设置
  • sort和swap函数
  • 数据结构之稀疏矩阵与三元组表示法
  • 23种设计模式全面解析
  • 告别Feign:基于Spring 6.1 RestClient构建高可靠声明式HTTP客户端
  • 今日多肽之——订书肽
  • Linux文件类型
  • 建筑科技的未来图景:探究中建海龙的创新基因
  • C语言超详细结构体知识
  • 工程化实践:Flutter项目结构与规范
  • 广东中级消防设施操作员理论考试精选题
  • SpringAI+DeepSeek大模型应用开发——5 ChatPDF
  • 相比其他缓存/内存数据库(如 Memcached, Ehcache 等),Redis 在微服务环境中的优势和劣势是什么?