用Trae Work开发的Python Flask项目,部署到windows + Apache实操记录,相关技术栈:Python应用 + Python虚拟环境 + Flask框架 + Waitress WSGI伺服器 + Apache子域名。
一、在windows服务器上准备 Python 与项目文件
- 安装 Python 环境
访问官网(https://www.python.org),下载最新的Python for win 版本
安装时的重要点:勾选”Add Python to PATH”选项
验证安装:python –versionpip –version - 复制项目全部文件到服务器
举例:D:\Pythons\Anonymous_jh - 进入项目目录,创建虚拟环境并安装依赖
cd D:\Pythons\Anonymous_jh
python -m venv venv
.\venv\Scripts\activate
python -m pip install –upgrade pip
pip install -r requirements.txt
二、检查 .env 与 config.json 配置是否合适
run_waitress.py 将从 .env 调地址端口等参数
三、手动测试 waitress 服务器
- cd D:\Pythons\Anonymous_jh
- .\venv\Scripts\activate
- python run_waitress.py
- 检验:服务器上浏览器 http://127.0.0.1:5016
四、把 waitress 做成开机自启服务(用 nssm)
- 下载地址:https://nssm.cc/download
- 解压到可以全局使用的目录,注意区分32位64位
- 把本项目的Waitress服务注册成windows服务
nssm.exe install Anonymous-jh
打开界面后填写下列参数:
Path:D:\Pythons\Anonymous_jh\venv\Scripts\python.exe
Startup directory:D:\Pythons\Anonymous_jh
Arguments:run_waitress.py
Display name:AnonymousEmail jinhui
Description: 匿名举报邮件系统5016
Log on 选项卡:勾选 Local System account
I/O 选项卡:
Output (stdout):D:\Pythons\Anonymous_jh\logs\service_stdout.log
Error (stderr):D:\Pythons\Anonymous_jh\logs\service_stderr.log - 启动服务
nssm start Anonymous-jh
也可通过 services.msc 找到服务项并启动服务
若出问题查:D:\Pythons\Anonymous_jh\logs\service_stderr.log
五、安装并配置Apache
- 下载地址:https://www.apachelounge.com/download/
举例解压到 C:\WebSer\Apache24
对应 Win2016 需先装 Visual C++ Redistributable 2015-2022 x64
C:\WebSer\Apache24\bin\httpd.exe -t #测试Apache本身能跑
httpd.exe -k install -n “Apache24” #把Apache注册为服务 - 开启Apache的代理模块,编辑 conf\httpd.conf
找到下面几行,去掉行首的 #
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule rewrite_module modules/mod_rewrite.so
Include conf/extra/httpd-vhosts.conf - 编辑 conf\extra\httpd-vhosts.conf,加入子域名反向代理
#文件补充的内容详见文章末尾 - 测试配置语法并重启 Apache
bin\httpd.exe -t
net stop Apache24
net start Apache24
六、防火墙放行与验证
- 放行 80 端口入站
New-NetFirewallRule -DisplayName “Apache HTTP 80” -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow - 局域网内电脑验证接口
Invoke-WebRequest http://127.0.0.1/api/captcha -UseBasicParsing - 终极验证:在开发电脑上用浏览器访问项目
七、注意事项
- 路径分隔符:Apache 配置里用正斜杠 /(如 C:/Apache24/htdocs),PowerShell 命令里用反斜杠。
- 端口冲突:若 80 被 IIS 占用,停止 IIS,或让 Apache 监听别的端口。
- 服务账户权限:nssm 服务默认以 LocalSystem 运行
九、conf\extra\httpd-vhosts.conf 补充虚拟机范本
#spAnonymous - 举报邮件系统
<VirtualHost *:80>
ServerAdmin sandal@jh1999.cn
ServerName jb.jh1999.cn
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5016/
ProxyPassReverse / http://127.0.0.1:5016/
# 上传附件上限 100MB
<Location />
LimitRequestBody 104857600
</Location>
#日志定义
ErrorLog "D:/WebSite/logs/error_anymail.log"
CustomLog "D:/WebSite/logs/access_anymail.log" common
</VirtualHost>
