python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Windows部署Flask方案

在Windows环境下部署Flask的完整方案

作者:冉成未来

在 Windows 生产环境中部署 Flask 应用,你需要使用 Windows 兼容的 WSGI 服务器以及 Windows 服务管理工具,本文将为你提供一套完整的 Windows 系统 Flask 部署方案,并对比与 Linux 方式的异同,需要的朋友可以参考下

在 Windows 生产环境中部署 Flask 应用,你需要使用 Windows 兼容的 WSGI 服务器(如 WaitressHypercorn)以及 Windows 服务管理工具(如 NSSM 或直接使用 Python 的 win32service)。本文将为你提供一套完整的 Windows 系统 Flask 部署方案,并对比与 Linux 方式的异同。

Windows 部署 Flask 的完整方案

核心组件替换说明

Linux 组件Windows 替代方案说明
GunicornWaitressHypercornWaitress 是纯 Python WSGI 服务器,原生支持 Windows,性能稳定
Supervisor / SystemdNSSM(Non-Sucking Service Manager)或 Windows 任务计划程序NSSM 可将任何 exe 包装成 Windows 服务,支持自启、崩溃重启
日志管理Python logging 模块 + 文件轮转(RotatingFileHandlerWindows 没有内置的 journald,建议在应用内配置日志

注意:Hypercorn 支持 HTTP/2 和 ASGI,但配置稍复杂;Waitress 简单稳定,是 Flask 官方推荐的生产服务器之一。

一、使用 Waitress + NSSM 部署 Flask(推荐)

1. 环境准备

2. 安装依赖

在项目目录创建虚拟环境(强烈推荐):

cd C:\myapp
python -m venv venv
venv\Scripts\activate
pip install flask waitress

3. 创建启动脚本

由于 NSSM 需要执行一个 .bat.exe,我们编写一个 Python 启动脚本 run.py,它使用 Waitress 运行 Flask 应用:

# run.py
from waitress import serve
from app import app   # 假设你的 Flask 实例名为 app
if __name__ == '__main__':
    # 监听所有IP的8080端口,生产环境建议绑定内网IP并通过反向代理(如 Nginx)暴露
    serve(app, host='0.0.0.0', port=8080, threads=4)

测试脚本是否能正常运行:

python run.py

访问 http://localhost:8080 看到 Flask 输出即为成功。

4. 使用 NSSM 注册为 Windows 服务

下载 NSSM(官网),将 nssm.exe 放在 C:\Windows\System32 或项目目录下。

以管理员身份打开命令提示符,执行:

nssm install FlaskApp

弹出 GUI 配置界面:

点击 “Install service”。

然后启动服务:

nssm start FlaskApp

检查状态:

nssm status FlaskApp

5. 设置服务开机自启

NSSM 安装的服务默认就是“自动”启动类型,可以在 Windows 服务管理器(services.msc)中确认。

6. 查看日志与崩溃自动重启

NSSM 默认会将 stdout/stderr 重定向到文件。在 NSSM GUI 的 “I/O” 选项卡中可以设置日志文件路径:

并勾选 “Redirect error output to stdout” 简化。

在 “Process” 选项卡中:

7. 常用 NSSM 命令

nssm restart FlaskApp    # 重启服务
nssm stop FlaskApp       # 停止
nssm remove FlaskApp     # 删除服务(需加 confirm 参数)

二、使用 Waitress + 任务计划程序(无第三方工具)

如果不想安装 NSSM,可以用 Windows 任务计划程序创建一个“不管用户是否登录都运行”的任务,并设置触发器为“启动时”,以及“如果失败则重启”。缺点是配置较繁琐,且重启策略不如 NSSM 灵活。

步骤简述:

创建启动脚本 start.bat

@echo off
cd C:\myapp
call venv\Scripts\activate
python run.py

打开“任务计划程序” → “创建任务”:

这种方法不推荐用于生产环境,因为进程管理能力弱,无优雅停止。

三、Windows 部署的注意事项

1. 反向代理

Windows 下同样建议在 Waitress 前面加一层 Nginx for WindowsIIS 做反向代理,用于:

Nginx for Windows 配置与 Linux 类似,下载官方 Windows 版本即可。

2. 日志轮转

run.py 中配置 Python logging 的 RotatingFileHandler

import logging
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler('app.log', maxBytes=10*1024*1024, backupCount=5)
handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s: %(message)s'))
app.logger.addHandler(handler)
app.logger.setLevel(logging.INFO)

3. 性能调优

4. 防火墙与端口

确保 Windows 防火墙允许外部访问你的端口(例如 8080):

netsh advfirewall firewall add rule name="Flask App" dir=in action=allow protocol=TCP localport=8080

四、修改代码后如何重新部署

使用 NSSM

由于 NSSM 只是管理进程,修改代码后需要重启服务才能加载新代码:

nssm restart FlaskApp

注意:restart 会立即杀死当前进程,可能导致正在处理的请求失败。要实现优雅重启,Waitress 本身不支持热重载,你可以在代码中使用 watchdog 库监听文件变化并触发 sys.exit(),配合 NSSM 的自动重启策略,但较为复杂。更简单的做法是:在低流量时段重启,或使用负载均衡摘除节点。

使用任务计划程序

手动停止任务(在任务计划程序库中右键结束),然后重新启动任务。

五、与 Linux 部署方式的异同总结

方面Linux (Gunicorn+Systemd)Windows (Waitress+NSSM)
WSGI 服务器Gunicorn(多进程)Waitress(多线程)
进程管理Systemd(原生,功能强大)NSSM(第三方,稳定)
性能高(多进程 + 预派生)中(Python 多线程受 GIL 限制)
优雅重启支持(kill -HUP不支持(需手动重启或变通)
日志管理journald / syslog需应用自行配置文件轮转
开机自启systemctl enableNSSM 服务默认自启
资源隔离cgroup / namespace无(依赖 Windows 进程隔离)
部署复杂性中等(需理解 systemd unit)低(NSSM GUI 配置简单)

结论

六、完整示例脚本

为了方便,提供一个完整的 run.py 示例,包含日志配置和 Waitress 启动:

import logging
from logging.handlers import RotatingFileHandler
from waitress import serve
from app import app
# 配置日志
if not app.debug:
    handler = RotatingFileHandler('logs/app.log', maxBytes=10*1024*1024, backupCount=5)
    handler.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
    handler.setFormatter(formatter)
    app.logger.addHandler(handler)
    app.logger.setLevel(logging.INFO)
    app.logger.info('Flask app starting')
if __name__ == '__main__':
    serve(app, host='0.0.0.0', port=8080, threads=4)

记得创建 logs 文件夹。

希望这份 Windows 部署教程能帮助你顺利完成 Flask 项目的生产环境部署。如果你的环境可以换成 Linux,强烈建议使用 Linux 以获得更成熟、高性能的工具链。

以上就是在Windows环境下部署Flask的完整方案的详细内容,更多关于Windows部署Flask方案的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文