video_monitor/deploy/windows/README.md
2026-09-04 18:16:14 +08:00

7.7 KiB
Raw Permalink Blame History

Monitor Windows 部署

客户安装与使用

支持 Windows 10/11 x64 的 CPU 部署。运行 Monitor-Setup-x64.exe 安装,随后双击桌面 Monitor。安装时需要管理员权限安装器会要求指定日常运行的 Windows 账号(默认当前安装账号);如果使用了另一个管理员账号授权安装,应填写实际操作员的账号。日常启动使用该指定账号。首次启动只监听本机:导出机器申请、导入厂商签名授权、设置至少 12 位管理员密码并选择局域网网卡。完成后自动重启服务,浏览器访问 http://127.0.0.1:10001/login;其他电脑使用部署电脑的 IP。

程序目录在 Program Files\Monitor,运行数据在 ProgramData\Monitor。多 Windows 用户共享同一安装需要系统管理员明确授予数据目录权限,安装器不向所有本机用户开放密钥。不要把程序目录当作数据备份。

托盘可访问网页、查看状态、打开日志、重启和退出。关闭浏览器不会停止服务;退出托盘或注销 Windows 用户会结束服务。本版不是 Windows 系统服务,不自动开机启动。视频分析需登录后手动开始,已配置的录像和视频代理由后台启动。

初始防火墙规则仅作用于专用/域网络、本地子网与本程序。默认端口Web TCP 10001SIP TCP/UDP 15060ZLM TCP 10002、10554、10935RTP TCP/UDP 2000240000含 SIP 分配的 2000230000 与 ZLM 的 3000140000。修改端口或网络网段后由管理员同步调整规则。不要把管理端暴露到公网公网或不可信网络需要另行部署 HTTPS 与访问限制。

安装包不附带开发数据库、摄像头密码、模型、录像或发行私钥。模型通过后台上传;对会反序列化 Python 的 .pt 文件,须先验证来源,再在部署电脑执行:

& 'C:\Program Files\Monitor\Monitor.exe' --trust-model 'C:\ProgramData\Monitor\static\upload\weight\reviewed.pt' --yes

离线签发(仅厂商)

厂商保留源仓库与签发工具;客户只收到安装包和授权文件。使用 Ed25519公钥编译关联到发行包客户程序中没有签发私钥。

本次工作目录内的 vendor-private/issuer.dpapi 用当前 Windows 用户 DPAPI 加密,配套公钥是 vendor-private/license-public.pem不得将 vendor-private 发给客户或提交 Git。 DPAPI 私钥只能在原 Windows 用户及可用的原 DPAPI 凭据下解密;仅复制该文件不能保证重装系统后的恢复。长期发行建议由厂商另外生成带口令的可备份 PEM 私钥,并用对应公钥重新构建。

生成新发行密钥(不会覆盖已有文件):

& .build-venv/Scripts/python.exe deploy/windows/issue_license.py keygen --private-key '厂商离线目录/issuer.pem' --public-key '厂商离线目录/public.pem'

签发有期限授权;省略 --expires 表示永久:

& .build-venv/Scripts/python.exe deploy/windows/issue_license.py issue --private-key vendor-private/issuer.dpapi --request '客户机器申请.json' --customer '客户名称' --expires '2027-12-31T23:59:59+08:00' --output '客户授权.json'

机器指纹不依赖 IP/MAC。硬件或系统重装可能需要重新签发。过期、签名错误、机器不符或明显时间回拨会禁止业务仍可在本机登录并续期。运行中发现失效会停止后台业务并切换为本机授权模式。离线方案无法可靠阻止本机管理员修改程序或回滚整机快照。

构建

需要 Windows x64 Python 3.12、Visual Studio C++ Build Tools、Windows SDK、Inno Setup 6.7.3。依赖来源锁定在 requirements-windows-cpu.lock.txtbuild-tools.lock.txt。构建脚本使用独立 .build-venv,首次可复制当前已验证的 CPU 环境,再安装独立构建依赖;不会修改 .venv

./deploy/windows/build.ps1 -PublicKey vendor-private/license-public.pem -PrepareEnvironment

如工具不在默认路径,提供 -Vcvars-Iscc。也可分阶段执行:

& .build-venv/Scripts/python.exe deploy/windows/build.py --public-key vendor-private/license-public.pem --phase compile
& .build-venv/Scripts/python.exe deploy/windows/build.py --public-key vendor-private/license-public.pem --phase bundle
& .build-venv/Scripts/python.exe deploy/windows/build.py --public-key vendor-private/license-public.pem --phase installer

完整构建或 --phase stage 必须先执行。暂存区只会清理 .windows-build 下对应构建目录。业务模块及授权模块编译为 .pydPython 包与 Django 数字迁移保留自动生成的纯导入入口。构建会拒绝回退到未编译业务模块。模板及浏览器 JavaScript 必须随程序提供,不承诺隐藏客户端代码或绝对防逆向。

输出为 dist/windows/Monitor-Setup-x64.exe、SHA-256 校验文件与运行文件清单。没有代码签名证书时生成未签名安装包Windows 可能提示未知发布者。可给 build.py 提供 --sign-thumbprint 使用证书库中的证书;生产签名的时间戳、证书权限由发行方管理。

数据保护、升级与诊断

安装器升级前要求原进程退出,并备份数据库(含存在的 WAL、配置、密钥及授权备份失败会中止覆盖安装。数据库迁移前也会自动备份数据库、配置与运行密钥。升级不重置用户、不重新生成已有加密密钥。卸载默认保留 ProgramData 数据。备份应包含整个数据目录,不能只备份 SQLite否则摄像头密码等加密数据可能无法恢复。本版不自动导入旧开发目录数据库。

日志:ProgramData\Monitor\log\desktop.logservice.log、应用日志ZLM 工作目录:.runtime\zlm。端口冲突不会自动杀死其他进程。服务失败会明确显示状态,不无限重启。

可在独立空数据目录运行离线自检(不会接入摄像头或加载客户模型):

$env:MONITOR_DATA_DIR = 'D:\Monitor-validation'
& 'C:\Program Files\Monitor\Monitor.exe' --self-test

结果写入指定数据目录的 .runtime/self-test.json,错误见日志。验证后删除该进程环境变量,避免日常误用测试数据目录。

发布前须在干净 Windows 10/11 主机验收安装、普通用户运行、第二台局域网电脑访问、真实 RTSP/GB28181 接入与录像。当前开发机测试不能替代这些环境验收。商业分发须核实 Ultralytics、FFmpeg、ZLM、播放器与模型的许可编译不会改变第三方许可义务。

第三方发行检查

当前附带 FFmpeg 报告版本为 7.1-essentials_build-www.gyan.dev,构建含 --enable-gpl --enable-version3。ZLM 二进制随原仓库提供,版本文件标记 2025/05/11 master。第三方包的许可文本随运行环境收集在 third-party-notices;这些文本不能替代对应源码提供义务或商业授权。当前产物用于部署验证,商业交付前仍须核验所用具体二进制、模型和播放器的完整授权链。

参考:Ultralytics 官方许可FFmpeg 官方许可说明PyInstaller 对 Cython 和源码保护的说明

本机自动验证脚本:tests/test_windows_license.py(签名与机器约束)、tests/windows_integration.py隔离数据库、CSRF、授权与初始化tests/windows_lifecycle.py(真实服务、到期续期、端口冲突与 Job Object。生命周期测试要求显式指定可解密的厂商 DPAPI 测试签发密钥,生成的短期测试授权不得放入安装包。--self-test 还执行随机权重 YOLO 的 CPU 推理,仅验证执行链路,不代表模型准确率验收。