科技 > 操作系统 > Windows

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

14人参与 2026-04-26 Windows

在 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方案的资料请关注代码网其它相关文章!

(0)

您想发表意见!!点此发布评论

推荐阅读

Windows Server 2019与Windows Server 2022服务器系统之间的区别

04-26

微软承认Win11四月更新KB5083769/KB5082052致远程桌面无法使用

04-24

Win11用户反馈安装4月更新KB5083769后遇到打印故障

04-24

装机初次设置可跳过强制更新! 外媒实测Win11 OOBE 新增稍后更新

04-23

问题已修复! 解决Win11/Win10提示重新连接你的文件历史记录

04-22

String字符串如何转换为实体对象

04-28

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论