版本与发布
版本与发布说明“当前这套服务端/契约是什么版本、怎么确认部署一致”。自托管版没有在线发布/灰度/回滚控制台;版本由代码与 IDL 冻结修订决定,运行时通过 /health 与 /api/__contract/introspect 自证。
概念
| 项 | 值 / 入口 | 说明 |
|---|---|---|
| IDL 版本 | v1.0.0 | 冻结修订号以 /docs/changelog 为准 |
| 运行时自省 | GET /api/__contract/introspect | 返回运行时 operation/事件/错误码,供契约校验器比对 |
| 健康检查 | GET /health | {"ok":true} |
| 构建信息 | 启动日志 / 进程版本 | 二进制版本随发布包;无在线版本 API |
| 发布方式 | 替换二进制 + 重启 | 停机会断开 WS;客户端自动重连 |
- 契约兼容策略是 additive-only:v1.x 只新增可选字段/接口/事件/错误码,不改语义。
- 升级前用运行时自省接口比对运行时与契约是否一致。
- 没有“发布审批/灰度/一键回滚”控制台功能;回滚即换回旧二进制与匹配的数据目录。
前置条件
- 服务端已启动(默认
http://127.0.0.1:8080),控制台入口http://127.0.0.1:8080/console/#apiconfig(tab#apiconfig:服务与 API 配置)。 - 请求头
X-Admin-Secret与服务端IM_ADMIN_SECRET一致(本地默认dev-admin)。 - 已在控制台选中应用;带
{appkey}的接口都按应用隔离。 - 自托管版无购买、计费、套餐、续费与发票流程(不适用项);本页只覆盖配置、查询与治理接口。
步骤
- 确认当前版本
读 manifest 的
idlVersion/freezeRevision,并调用 introspect 对比。 - 升级前备份
备份
IM_DATA_DIR;确认新版本的数据格式兼容(additive-only)。 - 替换并重启
停止旧进程、替换二进制、以相同环境变量启动;观察
/health。 - 升级后校验
跑契约校验与冒烟;确认客户端重连、消息收发与回调正常。
参数表
| 操作 | 方法与路径 | 参数 |
|---|---|---|
| 健康检查 | GET /health | — |
| 运行时契约 | GET /api/__contract/introspect | — |
| 契约清单 | 契约清单(IDL manifest) | 文件(非 HTTP) |
| 更新日志 | /docs/changelog | 页面 |
示例
确认部署版本与契约
Shell
curl -sS http://127.0.0.1:8080/health
curl -sS http://127.0.0.1:8080/api/__contract/introspect | jq '{idlVersion, operations: (.operations|length), errors: (.errors|length)}'
curl -sS -H "X-Admin-Secret: dev-admin" http://127.0.0.1:8080/api/__contract/introspect | jq '{idlVersion, operations: (.operations|length), errors: (.errors|length)}'常见问题
有在线版本/发布 API 吗?
没有。版本随二进制与 IDL 冻结修订,控制台不提供发布操作。
升级会丢数据吗?
按 additive-only 兼容策略不应丢;仍建议先备份 IM_DATA_DIR。
如何确认文档与运行时代码一致?
用 contract-check 比对 introspect 与 IDL;文档由同一 IDL 生成。
回滚怎么做?
停服、换回旧二进制、使用匹配的数据目录启动;没有控制台一键回滚。