发布与升级
要运营自己的部署,请从已发布的版本装起;贡献代码则提交到 dev。本页讲怎样确认当前运行的是哪个版本、怎样规划升级;初次安装见安装,服务操作命令见部署。
版本标识与支持
每个版本都是一个 GitHub release,tag 用 UTC 日期,格式为 YYYYMMDD;同一天再发布的版本依次加上 .1、.2,以此类推。它们是按日期标记的快照,不是语义化版本那样的兼容性承诺。维护者发版时把 main 推进到 dev 上的某个 commit,随后 Release 工作流会发布一个带自动生成变更说明的 release。
标识 |
说明 |
|---|---|
已发布的日期 tag |
带有 GitHub 发布说明的固定源码快照 |
|
维护者每次发版时推进到 |
|
开发中的代码,可能比最新的发布版本还新 |
完整 commit SHA |
确切的源码版本;本地改动需另行说明 |
镜像摘要, |
确切的容器产物,可能和宿主机上检出的代码不一致 |
CI 会把后端和控制台的候选镜像打上 dev-<full-sha> tag,并附带短 SHA 别名。候选 tag 只说明这是开发产物,不代表这个 commit 有对应的日期版本。pyproject.toml 和 apps/frontend/package.json 里的 0.1.0 只是包元数据,看不出实际部署的是哪个构建。
报告问题时,尽量针对最新的发布版本。修复一般先合入 dev,再随后续版本发布。项目没有文档约定的 LTS 分支,不保证 backport 的时间窗口,也不承诺响应时间;不要以为旧版本会自动拿到修复。旧版本上的问题报告同样有用:请写明确切的版本,并说明最新发布版本是否也有这个问题。安全问题请按安全政策报告。
在 bug 报告中附上版本
从源码安装的,请在构建或启动服务所用的代码目录里运行:
git rev-parse HEAD
git describe --tags --exact-match HEAD
git status --short
HEAD 不正好在某个 tag 上时,第二条命令会报错,这时报告 SHA 即可。有本地改动请说明,但不要贴出密钥或私有配置。
用标准 Compose 栈部署的,查看正在运行的产物:
docker inspect --format '{{.Name}} image={{.Config.Image}} id={{.Image}}' \
hybridinference-backend hybridinference-frontend
如果部署使用不同的容器名,请替换为实际名称。附上部署配置中固定使用的镜像摘要。构建时提供 SHA 后,控制台页脚也会显示该值;build dev / local build 表示未提供对应元数据。页脚标识的是控制台构建版本,因此前后端独立部署时,还需另行报告后端版本。
兼容性与破坏性变更
阅读当前安装版本到目标版本之间每次发布的说明及关联 PR。日期 tag 本身不能证明兼容性,OpenAI 兼容 API 也不意味着支持所有 provider 扩展。检查你的客户端实际使用的端点、流式行为和模型配置。
修改 HTTP 契约、认证、环境变量或 YAML 配置项、默认值或数据库 schema 时,贡献者应在 PR 中说明前后行为。写清楚哪些使用者需要采取行动,给出配置或迁移步骤,并说明旧版本是否还能使用变更后的数据。在 PR 和发布说明中明确标记破坏性变更;自动生成的 commit 摘要不足以说明运维人员应如何升级。
升级与回滚
记下当前和目标的 release/commit、后端和控制台的镜像标识,以及正在生效的发行版和配置。保留旧的产物,这样回滚时不必重新构建。
阅读目标版本的配置要求。保留部署现有的
.env、overlay 和密钥,把必需的改动合并进去,不要用新的示例文件整个替换掉。JWT_SECRET_KEY、API_KEY_SECRET和ERASURE_FENCE_SECRET在所有副本之间、升级前后都要保持不变。改了第一个,访问 token 会失效;改了第二个,现有 API key 的哈希就无法验证;改了第三个(或者在它留空时顶替它的第二个),后端就无法启动。不要把升级当成轮换密钥的机会。备份每个已配置的数据库,并确认备份可恢复到独立数据库。妥善保存配套的配置和密钥副本。标准 Postgres 命令见数据库备份;其他部署请采用存储服务商的备份流程。
先在隔离的本地或 staging 部署上演练,用独立的存储和合适的测试数据。应用启动时会创建和更新 schema,所以只要让新后端连上某个数据库启动一次,就可能改动它。检查启动日志和
/health/ready,然后验证登录、一个现有的 API key、一次经过路由的请求;客户端用到流式的话,也验证流式请求。用你现有的部署方式部署选定的版本。从源码构建的标准栈里,
make build会用当前检出的代码重新构建镜像并重建服务;make restart则沿用现有镜像。重新构建代码和重新加载配置有什么区别,见部署。放正常流量进来之前,先核对正在运行的产物标识,再把演练时的检查重做一遍。
切回旧镜像不会撤销数据库变更。如果旧版本与升级后的 schema 和数据兼容,可以恢复配套的应用产物和配置。否则,应先停止应用写入,恢复配套的升级前数据库备份,再启动旧版本。这会丢弃备份之后的写入,因此恢复计划必须考虑这些数据。目前没有通用的自动 schema 降级命令;make down 会保留数据,删除 volume 是重置而非回滚。