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

Flask 项目 Windows 服务器部署全流程

Flask 项目 Windows 服务器部署全流程(含本地依赖生成、打包与后台运行指南)

一、写在前面

在 Windows 服务器上部署 Flask 项目时,常常会遇到环境兼容、依赖缺失、外网访问失败等问题,尤其是生产环境中需要“无窗口后台运行”的需求。本文从本地准备到服务器部署全流程拆解,涵盖依赖生成、项目打包、环境配置、服务启动、外网访问及后台静默运行等关键步骤,帮你避坑稳走每一步!

二、本地准备:依赖清单生成与项目打包

部署前需在本地完成 依赖清单生成项目打包,确保服务器环境与本地一致,避免文件遗漏。

1. 生成 requirements.txt(依赖清单)

requirements.txt 用于记录项目所有依赖库及版本,是服务器安装依赖的“说明书”。

操作步骤:
  • 激活本地虚拟环境(推荐使用虚拟环境隔离依赖):

    • Windows 命令提示符:
      # 进入本地项目根目录
      cd D:\本地项目路径\flask_project  
      # 激活虚拟环境(若用 venv 模块创建)
      venv\Scripts\activate  
      
    • Mac/Linux 终端:
      cd /本地项目路径/flask_project  
      source venv/bin/activate  
      
  • 生成依赖清单
    在虚拟环境激活状态下,执行以下命令,自动在项目根目录生成 requirements.txt

    pip freeze > requirements.txt  
    
  • 检查文件内容
    打开 requirements.txt,确认包含项目所需依赖(如 Flask、数据库驱动等),示例:

    Flask==2.3.3
    pymysql==1.1.0
    dbutils==3.0.2
    waitress==2.1.2  # 生产环境服务器依赖
    

2. 本地项目打包(压缩上传准备)

打包目的是将项目文件统一压缩,方便通过 FTP 工具上传到服务器,避免文件遗漏或传输错误。

操作步骤:
  • 确认项目目录结构
    确保根目录包含所有必要文件,典型结构如下(根据实际项目调整):

    flask_project/  # 项目根目录
    ├── app.py  # Flask 入口文件(核心)
    ├── requirements.txt  # 依赖清单(刚生成)
    ├── templates/  # HTML 模板目录
    ├── static/  # 静态资源(CSS/JS/图片)
    ├── mysqlDao.py  # 数据库操作模块(示例)
    └── config.py  # 配置文件(示例)
    
  • 排除无关文件
    打包前删除冗余文件,例如虚拟环境目录(venv/)、本地日志(*.log)、IDE 配置文件等。

  • 压缩为 ZIP 包

    • Windows:右键项目根目录 → 发送到压缩(zipped)文件夹,生成 flask_project.zip

三、服务器部署全流程

1. 环境准备(Windows 服务器)

  • 安装 Python:下载 Python 3.6+ 并勾选“Add Python to PATH”。
  • 安装必备工具
    python -m pip install --upgrade pip  
    pip install virtualenv  # 可选,用于虚拟环境管理
    

2. 项目上传与解压

  • 使用 WinSCP/FileZilla 将 flask_project.zip 上传到服务器目录(如 D:\flask_project )。
  • 右键解压到目标目录,确保结构完整。

3. 虚拟环境与依赖安装

# 进入项目目录
cd D:\flask_project  # 创建并激活虚拟环境
python -m venv venv  
venv\Scripts\activate  # 安装依赖
pip install -r requirements.txt  

4. Flask 应用配置

  • 设置环境变量
    set FLASK_APP=app.py  # 指定入口文件
    
  • 数据库配置检查:确保 mysqlDao.py 中数据库 IP、端口、账号等与服务器一致。

5. 启动 Flask 服务(Windows 兼容方案)

方式 1:开发环境(Flask 内置服务器)
flask run --host=0.0.0.0 --port=5000  # 绑定所有网卡,允许外网访问
方式 2:生产环境(Waitress 服务器)
pip install waitress  # 安装生产级服务器
waitress-serve --host=0.0.0.0 --port=5000 app:app  # 替代 gunicorn

6. 外网访问配置(关键步骤)

(1)防火墙开放端口
  • 路径:控制面板 → 系统和安全 → Windows 防火墙 → 高级设置
  • 新建入站规则:允许 TCP 协议的 5000 端口(与服务端口一致)。
(2)端口映射(内网穿透)
  • 登录路由器管理页,添加端口映射规则:
    • 内网 IP:服务器局域网 IP(通过 ipconfig 获取)。
    • 内外网端口:均设置为 5000。

四、实现无窗口后台运行(静默启动)

在 Windows 服务器上,需让 Flask 应用脱离命令行窗口后台运行,推荐通过 批处理 + VBS 脚本 实现:

1. 创建批处理脚本(start_flask.bat)

在项目根目录新建 start_flask.bat,内容如下:

@echo off
REM 强制切换到脚本所在目录(避免路径问题)
cd /d "%~dp0"  REM 激活虚拟环境
call "venv\Scripts\activate.bat"  REM 启动服务并输出日志(使用 Waitress 或 Flask 内置服务器)
waitress-serve --host=0.0.0.0 --port=5000 app:app > flask_log.txt 2>&1  
REM 若用 Flask 内置服务器,替换为:
REM flask run --host=0.0.0.0 --port=5000 > flask_log.txt 2>&1  

2. 创建 VBS 脚本(隐藏窗口)

新建 start_flask.vbs,用于静默执行批处理脚本,内容如下:

方法 1:绝对路径(推荐,稳定不易错)
Set WshShell = CreateObject("WScript.Shell")
REM 直接指定批处理文件的绝对路径(加引号避免中文/空格问题)
WshShell.Run Chr(34) & "D:\flask_project\start_flask.bat" & Chr(34), 0
Set WshShell = Nothing
方法 2:相对路径(适合脚本与批处理同目录)

start_flask.vbsstart_flask.bat 在同一目录,可自动获取路径:

Set WshShell = CreateObject("WScript.Shell")
' 获取 VBS 脚本所在目录
scriptDir = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
' 拼接批处理路径(同一目录)
batPath = scriptDir & "\start_flask.bat"
' 隐藏窗口运行
WshShell.Run Chr(34) & batPath & Chr(34), 0
Set WshShell = Nothing

3. 启动与停止方式

  • 启动:双击 start_flask.vbs,无窗口弹出即表示成功运行。
  • 停止:打开任务管理器,找到 python.exepythonw.exe 进程(对应 Flask 服务),右键结束任务。

4. 注意事项

  • 路径问题:确保 batvbs 脚本中的路径无中文/空格,或用引号包裹路径。
  • 日志查看:通过 flask_log.txt 查看服务输出,排查启动失败原因。
  • 稳定性:生产环境建议用 Waitress 替代 Flask 内置服务器,避免意外退出。

五、避坑指南(Windows 特有问题)

  1. gunicorn 无法运行:用 Waitress 替代,命令:waitress-serve --host=0.0.0.0 --port=5000 app:app
  2. 外网访问失败:检查防火墙规则是否开放端口、路由器映射是否正确。
  3. 后台启动报错:确认 bat 脚本中虚拟环境路径正确,手动运行 start_flask.bat 排查依赖问题。

六、部署流程

flowchart TDA[本地准备] --> B[生成 requirements.txt]A --> C[打包项目为 ZIP]C --> D[上传 ZIP 到服务器]D --> E[解压到服务器目录]E --> F[创建并激活虚拟环境]F --> G[安装依赖]G --> H[配置环境变量]H --> I[编写批处理与 VBS 脚本]I --> J[后台启动服务(双击 VBS)]J --> K[配置防火墙+端口映射]K --> L[外网访问测试]

七、总结

本文涵盖了 Flask 项目在 Windows 服务器部署的全流程,从本地依赖生成、项目打包到服务器环境配置、外网访问,再到无窗口后台运行,核心是解决 Windows 兼容性问题(如用 Waitress 替代 gunicorn)和路径配置问题。按步骤操作,即可实现稳定的 Flask 项目部署。遇到问题欢迎留言交流!

http://www.lryc.cn/news/610343.html

相关文章:

  • C++信息学奥赛一本通-第一部分-基础一-第一章
  • RTX5060显卡安装cuda版本PyTorch踩坑记录
  • 深度解析:CPU 与 GPU 上的张量运算,为何“快”与“慢”并非绝对?
  • chatgpt plus简单得,不需要求人,不需要野卡,不需要合租,不需要昂贵的价格
  • 从 0 到 1 开发图书管理系统:飞算 JavaAI 让技术落地更简单
  • Oracle MCP Server简单配置以及备份调用
  • Oracle EBS ERP接口开发 — 修复bug基本流程
  • Calcite自定义扩展SQL案例详细流程篇
  • Centos Docker 安装手册(可用)
  • el-table高度自适应vue页面指令
  • Mac中M系列芯片采用rbenv管理ruby版本
  • 板子指示灯状态设计
  • 2SA2016-TD-E ON安森美 功率晶体管 0.18Ω超低压降+30MHz高频 工业电源专用
  • C语言的指针
  • python采集拍立淘按图搜索API接口,json数据参考
  • 2.4.3-2.4.8控制成本-控制资源-监督沟通-监督干系人-监督风险-控制采购
  • 每日任务day0804:小小勇者成长记之药剂师的小咪
  • 断点续传Demo实现
  • 【目标检测基础】——yolo学习
  • 设备电机状态监测中的故障诊断与定位策略
  • HCIP笔记1
  • 微信小程序本地存储与Cookie的区别
  • 【node】如何开发一个生成token的接口
  • DolphinScheduler 集成DataX
  • 【REACT18.x】封装react-rouer实现多级路由嵌套,封装登录态权限拦截
  • 《Python 实用项目与工具制作指南》· 2.1 输入输出
  • 基于Matlab实现LDA算法
  • 【机器学习】(算法优化一)集成学习之:装袋算法(Bagging):装袋决策树、随机森林、极端随机树
  • MiDSS复现
  • 测试-概念篇(3)