Repository navigation
Audit and Validation
当前 updater 清理交付见 PR #15,公开版本为 fc6adc75c7cdb9064163f938a31f176add843e0a。源码、Updater 镜像发布、fc 的 Updater 校验与旧 CD 入口已移除。保留证书 certificate-agent,它只负责 TLS 生命周期,不承担项目升级。
当前发布只编译、发布 Web/Nginx 两种镜像;证书 agent 使用 Web 镜像中的证书命令。升级由每台主机显式执行 fc upgrade plan/apply/open,无自动整群发布、后台 Docker socket 升级或现场源码编译。数据库代际为 7,本次没有 DDL 变化。
现行命令、备份和恢复边界见 fc 手动升级与边界,源码契约以 main 的 运维手册 和 升级契约 为准。RN 预生产和外部 CD 已退役,不能声称完成 live staging 验收。
本次生产执行状态见 fc 手动升级与边界;公开发布成功不等于生产更新完成。
2026-10-11 及此前的历史记录(旧命令及版本不用于当前部署)
正式版本:785af2d2c4595d210bf3bf2de8d39ef6f0b42983,main/dev 同步;PR #9 和 PR #10 已审查合并。迁移前发现旧 endpoint 校验拒绝 Direct 443,先暂停生产迁移,补齐标准 HTTPS 443 与高位 Relay 兼容的事务回归,再完成开发机相关 Go 测试、源码检查和精确 dev CI。正式 CI/发布、匿名 digest 证据见 Runtime-Image-Delivery。
下表为实际生产部署记录,不是配置示例:
| 节点 | HTTPS 入口 | 版本 / schema | Go 申请的正式证书 |
|---|---|---|---|
| Master | 520mall.cc:443 | 785af2d2c459 / 3 | Let’s Encrypt YE1,2027-01-09 13:32:32 UTC 到期 |
| EVOXT Direct | ml.520mall.cc:443 | 785af2d2c459 / 3 | Let’s Encrypt YE2,2027-01-09 13:38:52 UTC 到期 |
| RN Relay | www4399.sbs:8443 | 785af2d2c459 / 3 | Let’s Encrypt YE2,2027-01-09 14:01:17 UTC 到期 |
三节点均由新 Go Certificate Manager 对正式 ACME 目录完成真实 HTTP-01 首次签发。未导入旧证书或测试 CA,未关闭 TLS 验证。公开可信握手的证书指纹与各节点托管状态一致;状态 ACTIVE、自动续期启用。两个存储节点验证结束后释放宿主 80,Direct 常驻 443,Relay 不常驻 80/443。业务仍由 Nginx 终止 TLS。
- 维护期独立冷备份数据库、节点身份/配对凭据、运行密钥、旧配置/镜像及所有媒体;离机备份逐文件哈希验证。升级后完整核对 2762 / 21 / 14 个物理媒体文件(约 11.30 / 1.55 / 11.84 GB),数据、媒体哈希、加密事实、节点身份、密钥和配对关系保持。Direct endpoint 经原生维护 fence、签名身份校验和审计事务从 8443 改为 443,没有手工改数据库。RN 执行受保护的 schema 2 → 3 迁移。
- 三个证书控制容器分别真实强制重建;正式证书指纹、持久账户缓存和实际 HTTPS 恢复通过。新证书/账户私有恢复包再次离机备份。
- 主节点认证 Admin 链路读取自身与两存储节点真实证书状态,两个关系均 active/online;会话验收后注销。没有为展示读取存储私钥。
- 从公网逐个验证本地、Direct、Relay 的媒体 Range 206,1024 字节响应与冷备份一致;Direct 实际重定向至 443,中继保持主节点媒体入口。三节点 UDP 3478 STUN 探测严格串行,全部通过,页面公布三个地址。
- 三个一核 Web 各完成五次连续一秒空闲采样,均低于 20%。非本项目容器及应用保持;每次 SSH 退出前清理包缓存,删除已确认无引用的本项目旧镜像,保留当前及冷回退镜像,不做全局 prune / 删卷。原 sing-box / Cloudreve 仍依赖的 Certbot 证书及续期保留;Master 旧 Certbot 的 FrontierCloud Nginx 重启钩子离机备份后退役。仅在 Master 的操作者 Compose 覆盖中为原 sing-box Certbot 保留只读公共 challenge token 路由,真实 HTTP 200 和 Nginx 重建就绪通过;不挂载外部证书/私钥,不恢复业务证书路径配置,也不加入产品默认部署。
开发机没有公网 IP:测试使用私有本地模拟 ACME CA,通过真实 CertMagic/acmez 客户端验证 Challenge、CSR、签发、续期、热加载、重建及故障恢复。模拟 CA 不替代公网 DNS、CAA、网络与正式 CA 授权;以上三台真实正式签发及可信公网握手补足本次生产验证。生产不携带测试 CA 或私有信任。真实到期续期尚未发生,不能宣称已观察一个完整自然续期周期;未实测物理宿主重启,DNS-01 API 未实现。
RN 预发布/CD 保持退役,STAGING_CD_ENABLED=false;不把缺失的预发布验收算作通过。
以下为 PR #9 合并前候选 e2b060aa2c8b2b14856a3f4697fb67114bfdb2c6 的开发阶段记录,不能替代上方正式发布与生产验收。
最终源码轻量检查发现 197 个 Python 测试,195 个通过、2 个明确跳过;9 个发布策略检查、JavaScript smoke、schema/assets、英文注释、CPU 与 CI 预算检查通过。精确 dev CI、协议与分支检查通过。
完整开发机基线在 40931ee05c0e6d641717209b908c9bae533e6c33 执行:
- 全部 Go 单元与 race;真实 MySQL/Redis 业务、API、进程停写、Nginx 维护,以及 SQLite/MySQL Compose 部署通过。
- HTTP 默认、仅 TLS_ENABLED/SERVER_NAME 两值的真实 Compose;本地测试 CA 的 Business/Direct/Relay 首次签发、重建恢复、续期、Go 热加载、首次配对与临时 80 释放通过。
- 真实 Chromium:证书状态与移动端布局,浏览器 ECDH 证书/私钥解包及身份、nonce、密文、指纹篡改拒绝;媒体加密选择、上传、Range/拖动/连续播放、下载、删除/重命名、录音与歌词通过。真实 TLS 1.2/1.3、HTTP/2、旧 TLS 拒绝及 CSP/维护恢复通过。
- 默认 SQLite/MySQL 无 Python 应用启动、数据库/Redis/Web 重启和容器 IP 变化后的恢复通过。
- 一 Master、两 Direct、两 Relay:SQLite 277.94 秒、MySQL 389.60 秒;节点身份、串行 STUN、媒体/备份/录音、Master 镜像交接及回退、持久化与五次空闲 CPU 检查通过。测试容器保持规定的一核业务边界。
- 可选旧外部证书迁移脚本的真实隔离容器测试通过:发现正在使用的证书、验证、独立备份、新私有卷暂存、拒绝覆盖、Go 控制器接管和真实 HTTPS 指纹一致;原旧服务保持运行。使用私有 CA,不冒充生产 CA 迁移。
最终两次修正补齐 CI Web 镜像自动 TLS 能力标记,并跳过未声明 STUN/证书能力的历史节点;完整媒体矩阵的业务路径没有改动。最终提交已复验源码、Node/Updater/Certificate Go race 和真实浏览器(含旧节点按钮禁用);全部通过。三种最终公开镜像的匿名证明及拉取通过,Web/Nginx 的自动 TLS 标记完整。SQLite/MySQL 的真实七服务升级、updater 自交接、回退、实际 HTTPS 指纹、媒体及 secret 保持均通过,隔离资源已清理。
最终镜像发布 的三项编译与三项发布成功;旧预发布通知失败、latest 推进跳过。不可变 digest 见 运行镜像交付。最终源码 + 最终不可变公开镜像的五节点矩阵已通过:SQLite 275.02 秒、MySQL 309.99 秒,共 585.02 秒;配对、证书查询、串行实际 UDP STUN、明文/加密各存储路径、Range/授权复用、录音/删除/备份、离线/重启恢复、Master 镜像交接与回退、身份/会话/加密数据持久化均通过。每个数据库组合均完成五次连续一秒空闲采样,五个一核 Web 全部低于 20%。隔离容器、网络、卷及私有工作目录已核实清理。
未通过 / 未执行不能算通过: 独立 test-go-updater.sh 的首个 SQLite 源码构建 fixture 在 building 阶段超时,随后 MySQL 和隔离 CD case 未执行。原 source.go 与 Engine.Build 相对 main 未改;未确定根因。按照所有者明确指示,本次不扩展修理旧滚动/源码构建路径。无 DNS-01 API 集成,未实测物理宿主重启;此开发阶段未进行真实生产 CA 首次迁移,后续三节点实测见上方记录。
RN 预发布及外部 CD 已按所有者授权撤销,生产存储和其他应用保留;STAGING_CD_ENABLED=false。旧 main 通知器当时仍会失败;正式 785af2d2c459 已正确跳过退役通知器并完整发布。没有当前 live staging 验收。PR #9 与生产 Master 迁移于所有者后续生产更新指令下完成,见上方记录。
剩余 Python 文件仅 scripts/ 23 个与 tests/ 39 个;应用 app/、main.py、Python updater 已移除。保留 Python 运维、迁移与测试驱动。三种最终不可变公开 Web/Updater/Nginx 镜像还在只读、无网络隔离容器中实际检查,均无 Python 解释器及应用入口。
旧仓库历史审计不自动认证新仓库发布。Bootstrap 分支、镜像标签、单元测试或 CI 绿色均不单独构成完整发布证明。
最终开发机验证针对 07ab30726ddbd1924e9b841db693f710fb7faef0,合并 main 8a6e30975c109d6f59763dbc5f43e33935e71bd6 与之完全同树。CI 仅轻量检查,完整验证不放进 CI。
- Gin 默认/API 黑盒:SQLite、MySQL 均通过。
- 五节点私有 CA 矩阵:SQLite 259.84 秒、MySQL 281.21 秒,均通过。
- 真实业务、进程停写、Nginx 维护、完整 Go race 检查通过;SQLite/MySQL Compose 部署检查通过。
- 真实原生升级及回退:SQLite 768.07 秒、MySQL 804.33 秒,均通过。
- Nginx UA/空上游耗时的四项真实测试通过;冷编译限 1 CPU / 1 GiB,未发生 OOM。
- Go JSON 测试日志中的 586 个 pass 事件、15 个 skip 事件涉及 28 个包;事件数不是测试定义数,不能与旧 Python 测试数量直接等同。
- 分类页真实浏览器隔离测试中,即使观测脚本下载不返回,目录仍可显示;不是特斯拉车机弱网验收。
生产迁移于 2026-10-09 完成,数据保持证据见 发布与迁移。EVOXT 预发布按本轮明确授权跳过,未运行、未启动 CD,不能把它计为通过。
随后维护者另行授权启动预发布。2026-10-09 09:40(北京时间),真实 dev CI 成功事件已完成 EVOXT 签名通知、构建期间事件等待、精确提交部署和升级器自交接。当时预发布业务及升级器均为 7051c3da71b7d1d1a13a4f0dcbb136f617e71dfd,日志成功、就绪及音乐页 200;这不追溯改变此前生产切换的豁免记录。后续安全版本的完整开发机、CI、CD 与发布证据见 公开网站安全基线。见 EVOXT 预发布 CD。