14人参与 • 2026-04-26 • Windows
在 windows 生产环境中部署 flask 应用,你需要使用 windows 兼容的 wsgi 服务器(如 waitress、hypercorn)以及 windows 服务管理工具(如 nssm 或直接使用 python 的 win32service)。本文将为你提供一套完整的 windows 系统 flask 部署方案,并对比与 linux 方式的异同。
| linux 组件 | windows 替代方案 | 说明 |
|---|---|---|
| gunicorn | waitress 或 hypercorn | waitress 是纯 python wsgi 服务器,原生支持 windows,性能稳定 |
| supervisor / systemd | nssm(non-sucking service manager)或 windows 任务计划程序 | nssm 可将任何 exe 包装成 windows 服务,支持自启、崩溃重启 |
| 日志管理 | python logging 模块 + 文件轮转(rotatingfilehandler) | windows 没有内置的 journald,建议在应用内配置日志 |
注意:hypercorn 支持 http/2 和 asgi,但配置稍复杂;waitress 简单稳定,是 flask 官方推荐的生产服务器之一。
c:\myapp\app.py)在项目目录创建虚拟环境(强烈推荐):
cd c:\myapp python -m venv venv venv\scripts\activate pip install flask waitress
由于 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 输出即为成功。
下载 nssm(官网),将 nssm.exe 放在 c:\windows\system32 或项目目录下。
以管理员身份打开命令提示符,执行:
nssm install flaskapp
弹出 gui 配置界面:
c:\myapp\venv\scripts\python.exec:\myapprun.pyflaskapp(可自定义)点击 “install service”。
然后启动服务:
nssm start flaskapp
检查状态:
nssm status flaskapp
nssm 安装的服务默认就是“自动”启动类型,可以在 windows 服务管理器(services.msc)中确认。
nssm 默认会将 stdout/stderr 重定向到文件。在 nssm gui 的 “i/o” 选项卡中可以设置日志文件路径:
c:\myapp\logs\service-out.logc:\myapp\logs\service-err.log并勾选 “redirect error output to stdout” 简化。
在 “process” 选项卡中:
restart(进程意外退出时自动重启)5000(毫秒)nssm restart flaskapp # 重启服务 nssm stop flaskapp # 停止 nssm remove flaskapp # 删除服务(需加 confirm 参数)
如果不想安装 nssm,可以用 windows 任务计划程序创建一个“不管用户是否登录都运行”的任务,并设置触发器为“启动时”,以及“如果失败则重启”。缺点是配置较繁琐,且重启策略不如 nssm 灵活。
步骤简述:
创建启动脚本 start.bat:
@echo off cd c:\myapp call venv\scripts\activate python run.py
打开“任务计划程序” → “创建任务”:
cmd.exe,参数 /c "c:\myapp\start.bat"。这种方法不推荐用于生产环境,因为进程管理能力弱,无优雅停止。
windows 下同样建议在 waitress 前面加一层 nginx for windows 或 iis 做反向代理,用于:
nginx for windows 配置与 linux 类似,下载官方 windows 版本即可。
在 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)threads 参数建议设置为 cpu 核心数的 2-4 倍。asyncore 或使用 hypercorn 配合 uvloop(但 windows 上 uvloop 不可用,性能不如 linux)。确保 windows 防火墙允许外部访问你的端口(例如 8080):
netsh advfirewall firewall add rule name="flask app" dir=in action=allow protocol=tcp localport=8080
由于 nssm 只是管理进程,修改代码后需要重启服务才能加载新代码:
nssm restart flaskapp
注意:restart 会立即杀死当前进程,可能导致正在处理的请求失败。要实现优雅重启,waitress 本身不支持热重载,你可以在代码中使用 watchdog 库监听文件变化并触发 sys.exit(),配合 nssm 的自动重启策略,但较为复杂。更简单的做法是:在低流量时段重启,或使用负载均衡摘除节点。
手动停止任务(在任务计划程序库中右键结束),然后重新启动任务。
| 方面 | linux (gunicorn+systemd) | windows (waitress+nssm) |
|---|---|---|
| wsgi 服务器 | gunicorn(多进程) | waitress(多线程) |
| 进程管理 | systemd(原生,功能强大) | nssm(第三方,稳定) |
| 性能 | 高(多进程 + 预派生) | 中(python 多线程受 gil 限制) |
| 优雅重启 | 支持(kill -hup) | 不支持(需手动重启或变通) |
| 日志管理 | journald / syslog | 需应用自行配置文件轮转 |
| 开机自启 | systemctl enable | nssm 服务默认自启 |
| 资源隔离 | cgroup / namespace | 无(依赖 windows 进程隔离) |
| 部署复杂性 | 中等(需理解 systemd unit) | 低(nssm gui 配置简单) |
结论:
flask run 或内置服务器用于生产,无论何种平台。为了方便,提供一个完整的 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方案的资料请关注代码网其它相关文章!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论