Add software version manifest management

This commit is contained in:
lwt
2026-06-08 22:02:51 +08:00
parent 228d625e16
commit b272026ac9
8 changed files with 508 additions and 26 deletions
+97 -3
View File
@@ -275,7 +275,100 @@ curl -i -b /tmp/sumi-player.cookie http://127.0.0.1:3030/api/auth/me
curl -i -H "X-Admin-Token: change-this-admin-token" http://127.0.0.1:3030/api/admin/software
```
## 10. 数据与备份
## 10. version.json 与检查更新
管理后台上传软件时可以同时上传 `version.json`,也可以直接编辑“版本内容 JSON”。如果上传安装包且版本内容留空,服务端会自动生成一个兼容更新器的 version.json。
推荐 `version.json`
```json
{
"version": "1.2.0",
"changelog": "修复已知问题并优化启动速度",
"forceUpdate": false,
"minSupportedVersion": "1.0.0",
"sha256": "package-sha256-if-known"
}
```
也兼容下面这种更新器常用格式:
```json
{
"version": "1.1.5",
"update_url": "https://sumi.work/api/software/server-manager/version.json",
"release_notes": "数据库测试连接改为真实 MySQL 连接探测。",
"download_url": "https://sumi.work/api/software/server-manager/download",
"full_installer_url": "https://sumi.work/api/software/server-manager/download",
"delta_updates": {}
}
```
字段说明:
- `version`:最新版本号,检查更新时用于和客户端当前版本对比
- `changelog`:更新说明
- `release_notes`:更新说明,等同于 `changelog`
- `update_url`version.json 地址,建议改成当前下载中心的 `/api/software/<软件ID>/version.json`
- `download_url`:完整安装包下载地址,建议改成当前下载中心的 `/api/software/<软件ID>/download`
- `full_installer_url`:完整安装包下载地址,等同于 `download_url`
- `delta_updates`:差分更新信息,会原样返回
- `forceUpdate`:是否强制更新
- `minSupportedVersion`:最低支持版本,客户端版本低于它时会返回 `forceUpdate: true`
- `sha256`:安装包校验值;如果未提供,会使用服务端上传安装包计算出的值
如果使用你原来的内网文件服务地址,例如:
```json
"update_url": "http://172.18.180.94:3000/api/file?path=server_manager/build/output/version.json",
"download_url": "http://172.18.180.94:3000/api/download?path=server_manager/build/output/ServerManager_Setup.exe"
```
它也能被服务端读取和保存。但如果希望下载中心继续执行“玩家登录后才能下载”的规则,应改成下载中心自己的地址:
```json
"update_url": "https://sumi.work/api/software/server-manager/version.json",
"download_url": "https://sumi.work/api/software/server-manager/download",
"full_installer_url": "https://sumi.work/api/software/server-manager/download"
```
其中 `server-manager` 是软件 ID。新增软件时服务端会按软件名自动生成 ID;也可以上传后在管理接口返回结果里查看 `id``versionManifestUrl``downloadUrl`
后台操作规则:
- 只上传安装包,版本内容留空:服务端自动生成 version.json。
- 上传安装包,同时填写版本内容 JSON:安装包会更新,版本内容按填写的 JSON 保存。
- 不上传安装包,只修改版本内容 JSON:只更新版本清单和检查更新内容。
- 上传 `version.json` 文件:文件内容优先于文本框内容。
获取版本清单:
```bash
curl -i http://127.0.0.1:3030/api/software/sumi-launcher/version.json
```
检查更新:
```bash
curl -i "http://127.0.0.1:3030/api/software/sumi-launcher/check-update?version=1.0.0"
```
返回重点字段:
```json
{
"currentVersion": "1.0.0",
"latestVersion": "1.2.0",
"updateAvailable": true,
"forceUpdate": false,
"downloadUrl": "/api/software/sumi-launcher/download",
"versionManifestUrl": "/api/software/sumi-launcher/version.json"
}
```
`downloadUrl` 仍然受玩家登录保护,未登录下载会返回 `401` 或跳转到登录页。
## 11. 数据与备份
需要持久化和备份:
@@ -283,6 +376,7 @@ curl -i -H "X-Admin-Token: change-this-admin-token" http://127.0.0.1:3030/api/ad
- `server/data/players.json`:玩家账号数据
- `server/uploads/icons/`:上传的软件图标
- `server/uploads/packages/`:上传的软件安装包
- `server/uploads/manifests/`:上传的 version.json 文件
建议备份命令:
@@ -292,7 +386,7 @@ tar -czf sumi-work-data-$(date +%F).tar.gz server/data server/uploads
恢复时把这两个目录放回仓库根目录,然后重启服务。
## 11. 常见问题
## 12. 常见问题
端口被占用:
@@ -324,7 +418,7 @@ lsof -i :3030
- 不要配置 Nginx 直接静态暴露 `server/uploads/packages/`
- 正确做法是所有请求都反代到 Node 服务
## 12. 快速执行清单
## 13. 快速执行清单
```bash
cd /path/to/sumi.work