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

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

一、写在前面

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

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

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

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

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

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

    • Windows 命令提示符:

      bash 复制代码
      # 进入本地项目根目录
      cd D:\本地项目路径\flask_project  
      # 激活虚拟环境(若用 venv 模块创建)
      venv\Scripts\activate  
    • Mac/Linux 终端:

      bash 复制代码
      cd /本地项目路径/flask_project  
      source venv/bin/activate  
  • 生成依赖清单

    在虚拟环境激活状态下,执行以下命令,自动在项目根目录生成 requirements.txt

    bash 复制代码
    pip freeze > requirements.txt  
  • 检查文件内容

    打开 requirements.txt,确认包含项目所需依赖(如 Flask、数据库驱动等),示例:

    txt 复制代码
    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"。

  • 安装必备工具

    bash 复制代码
    python -m pip install --upgrade pip  
    pip install virtualenv  # 可选,用于虚拟环境管理

2. 项目上传与解压

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

3. 虚拟环境与依赖安装

bash 复制代码
# 进入项目目录
cd D:\flask_project  

# 创建并激活虚拟环境
python -m venv venv  
venv\Scripts\activate  

# 安装依赖
pip install -r requirements.txt  

4. Flask 应用配置

  • 设置环境变量

    bash 复制代码
    set FLASK_APP=app.py  # 指定入口文件
  • 数据库配置检查 :确保 mysqlDao.py 中数据库 IP、端口、账号等与服务器一致。

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

方式 1:开发环境(Flask 内置服务器)
bash 复制代码
flask run --host=0.0.0.0 --port=5000  # 绑定所有网卡,允许外网访问
方式 2:生产环境(Waitress 服务器)
bash 复制代码
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,内容如下:

batch 复制代码
@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:绝对路径(推荐,稳定不易错)
vbscript 复制代码
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 在同一目录,可自动获取路径:

vbscript 复制代码
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 TD A[本地准备] --> 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 项目部署。遇到问题欢迎留言交流!