Windows service服务器怎么部署Flask?

1. 环境准备
操作系统: Windows Server 2016/2019/2022
Python: 安装最新稳定版(如 Python 3.10+),确保勾选 Add Python to PATH。
Nginx for Windows: 从 官网 下载 Windows 版本(如 nginx/Windows-1.25.3)。
依赖工具: Git(可选,用于代码拉取)、文本编辑器(如 VS Code)。
2. 创建 Flask 应用
2.1 项目结构
C:\flask-app\ ├── app.py # Flask 主程序 ├── requirements.txt ├── static\ # 静态文件 └── venv\ # Python 虚拟环境2.2 示例 app.py
from flask import Flaskapp = Flask(__name__)@app.route('/')def home(): return "Hello, World! Flask on Windows Server with Nginx!"if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)2.3 安装依赖
# 创建虚拟环境python -m venv venvvenv\Scripts\activate# 安装 Flask 和 Waitress(生产级 WSGI 服务器)pip install flask waitress3. 使用 Waitress 启动 Flask
3.1 启动命令
waitress-serve --port=5000 --threads=4 app:app参数说明: --port: 监听端口 --threads: 线程数(根据 CPU 核心调整)
3.2 创建启动脚本 start_server.bat
@echo offcall venv\Scripts\activatewaitress-serve --port=5000 --threads=4 app:app4. 配置 Nginx 反向代理
4.1 修改 Nginx 配置文件 nginx.conf
worker_processes 1;events { worker_connections 1024;}http { include mime.types; default_type application/octet-stream; # 反向代理配置 upstream flask_app { server 127.0.0.1:5000; # Waitress 监听地址 } server { listen 80; server_name your_domain.com; # 替换为域名或服务器 IP # 静态文件处理(由 Nginx 直接代理) location /static { alias C:/flask-app/static; # 替换为实际路径 expires 30d; } # 动态请求代理到 Flask location / { proxy_pass http://flask_app; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }}4.2 启动 Nginx
# 检查配置语法nginx -t# 启动 Nginxstart nginx# 重启(修改配置后)nginx -s reload5. 配置 Windows 服务(开机自启)
5.1 使用 NSSM 工具(推荐) 下载 nssm.exe 注册 Nginx 服务
nssm install Nginx "C:\nginx\nginx.exe" # 替换为 Nginx 实际路径nssm start Nginx注册 Waitress 服务:
nssm install FlaskApp "C:\flask-app\venv\Scripts\python.exe" "C:\flask-app\venv\Scripts\waitress-serve.exe" --port=5000 app:appnssm start FlaskApp6. 常见问题与解决方案
6.1 端口冲突 错误: bind() to 0.0.0.0:5000 failed: 仅允许使用一个套接字地址
解决: 检查是否有其他程序占用端口,使用 netstat -ano | findstr :5000 并终止进程。
6.2 静态文件 404 错误: 浏览器无法加载 /static/style.css
解决: 确保 Nginx 配置中的 alias 路径使用正斜杠(C:/flask-app/static),且目录存在。
6.3 Nginx 502 Bad Gateway 原因: Nginx 无法连接后端 Flask 服务。
排查: 检查 Waitress 是否运行 (tasklist | findstr waitress)。
检查防火墙是否允许端口 5000。
7. 扩展知识
7.1 启用 HTTPS 使用 Let’s Encrypt 获取免费证书(需域名)。 修改 Nginx 配置
server { listen 443 ssl; ssl_certificate C:/ssl/your_domain.crt; ssl_certificate_key C:/ssl/your_domain.key; # ... 其他配置}7.2 负载均衡
upstream flask_app { server 127.0.0.1:5000; server 127.0.0.1:5001; # 启动第二个实例 least_conn; # 使用最少连接算法}8. 注意事项
生产环境禁用调试模式:
确保 Flask 的 app.run(debug=False)。
日志管理: 配置 Nginx 和 Flask 的日志路径,定期归档。 备份配置: 修改关键文件前备份(如 nginx.conf)。
通过以上步骤, Flask 应用将在 Windows Server 上以高可靠性的方式运行
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。



