OTA 自动更新
VOMS 集成了 BanyanHub 中央发版系统,支持后端二进制的 OTA(Over-The-Air)自动更新。管理员在 BanyanHub Dashboard 发布新版本后,运行中的 VOMS 服务会自动检测、下载并完成更新,无需手动登录服务器操作。
工作原理
VOMS Server ──心跳──> BanyanHub API ──检测更新──> 有新版本?
│ │
│ <────── 返回更新信息(版本号、SHA256、签名) ──┘
│
├── 下载制品(支持断点续传)
├── SHA256 + Ed25519 签名校验
├── 原子替换二进制(旧版备份为 .bak)
└── SIGTERM 优雅退出 → systemd 自动重启关键特性
- 自动检测:服务运行期间定期心跳上报,发现新版本自动触发更新
- 安全校验:下载的制品经 SHA256 哈希 + Ed25519 签名双重验证
- 原子替换:使用 go-selfupdate 原子替换二进制,旧版自动备份为
.bak - 自动重启:systemd 服务配置
Restart=always,更新后自动拉起新版本 - 版本识别:基于二进制 SHA256 哈希自动识别版本号,无需手动配置
更新流程
管理员操作(BanyanHub Dashboard)
- 在本地构建新版本二进制
- 登录 BanyanHub Dashboard,上传制品(需 SHA256 和 Ed25519 签名)
- 将制品标记为"已发布"并设为"最新版本"
- 等待 VOMS 服务下次心跳检测到更新
服务端自动执行
- 心跳检测 — 定期向 BanyanHub 上报当前版本
- 发现更新 — BanyanHub 返回
update_available信号 - 下载制品 — 从 BanyanHub R2 下载新版本二进制
- 完整性校验 — SHA256 哈希比对 + Ed25519 签名验证
- 原子替换 — 当前二进制备份为
/opt/voms/bin/server.bak,新版本写入/opt/voms/bin/server - 优雅退出 — 发送 SIGTERM,systemd 自动重启新版本
验证更新状态
bash
# 查看当前运行版本
curl -s http://localhost:8181/api/v1/public/system/health | jq .
# 查看服务状态与启动时间
systemctl status voms-server --no-pager
# 查看最近的 OTA 相关日志
journalctl -u voms-server --no-pager -n 50 | grep -i -E "update|ota|version"
# 确认备份文件存在
ls -la /opt/voms/bin/server.bak手动回滚
如果新版本出现问题,可以使用 OTA 创建的备份文件快速回滚:
bash
# 1. 停止服务
sudo systemctl stop voms-server
# 2. 用备份替换当前二进制
sudo cp /opt/voms/bin/server.bak /opt/voms/bin/server
# 3. 重启服务
sudo systemctl start voms-server
# 4. 验证
curl -s http://localhost:8181/api/v1/public/system/health | jq .TIP
OTA 更新时会自动将旧版本备份为 .bak 文件。如果需要保留更多历史版本,建议在更新前手动备份:
bash
sudo cp /opt/voms/bin/server /opt/voms/bin/server.$(date +%Y%m%d%H%M%S)注意事项
- OTA 仅更新后端二进制(
server),前端资源和 Worker 需要通过发布包更新 - 更新过程中会有短暂的服务中断(通常 2-5 秒),systemd 会自动重启
- 如果网络不稳定导致下载失败,SDK 会在下次心跳时重试
- 许可证状态异常(过期、暂停)时不会触发 OTA 更新