本机升级与回滚
升级会让四个产品和数据库结构一起前进;回滚会把上一个发布连同升级前写的数据库备份一起恢复。
第 1 步:看看现在装的是哪个版本
soln status --dir "$HOME/soln-tenant-runtime"
- 成功:打印已安装的发布版本、四个产品的容器状态,以及
ready DEPLOYMENT_NOT_INSTALLED: No Soln deployment state exists in this directory.—— 这个目录不是部署目录,路径写法见部署文件与目录
想知道控制面里有没有更新的发布:
soln upgrade --check --dir "$HOME/soln-tenant-runtime"
Soln <版本> is up to date.—— 已是最新,无需操作Update available: <当前> -> <新版本>—— 继续第 2 步Update required: <当前> -> <新版本>—— 控制面已强制要求这个版本,尽快升级以免 Runtime 断连
第 2 步:先确认磁盘空间
df -h "$HOME"
- 成功:
Avail一列至少 10 GiB。升级期间新旧镜像会短暂共存,并且会写一份数据库备份 - 不足 10 GiB —— 先清理磁盘;否则升级会在动手前以
DEPLOYMENT_DISK_INSUFFICIENT中止
第 3 步:升级
soln upgrade --dir "$HOME/soln-tenant-runtime"
非交互执行可以加 --yes;只有在必须装某个确切版本时才加 --release <版本>。CLI 依次做这些事:
- 跑
soln doctor检查,任何一项失败就停下 - 校验环境变量与已记录的部署状态是否一致(不一致报
DEPLOYMENT_BINDING_MISMATCH) - 把 PostgreSQL 备份写到
<部署目录>/.soln/backups/postgres-tenant-<时间戳>.sql.gz.enc - 在
.soln/deployment.json里记录这次升级未完成,中途崩溃也能恢复 - 重新校验签名发布清单和每个镜像的 Cosign 签名,再用短期只读凭据拉取镜像
- 执行 Database Migrator
- 重启 Runtime Service、Runtime Web 和 Workflow Worker
- 等待
/health/ready,然后清除未完成标记
- 成功:
Soln upgraded to <版本>. Backup: <部署目录>/.soln/backups/postgres-tenant-<时间戳>.sql.gz.enc DEPLOYMENT_ALREADY_CURRENT—— 这个版本已经装好了DEPLOYMENT_RECOVERY_REQUIRED—— 上一次升级没有走完,先按第 5 步回滚- 签名校验或 doctor 检查失败时,升级在改数据库之前就会停下;修好原因再执行同一条命令
第 4 步:验证新版本
soln status --dir "$HOME/soln-tenant-runtime"
- 成功:版本号是新版本,状态仍是
ready
curl -fsS -o /dev/null -w '%{http_code}\n' https://soln-<租户子域名>.localhost:8443/health/ready
- 成功:
200 - 不是
200:按第 5 步回滚,不要手改文件
第 5 步:回滚
soln rollback --dir "$HOME/soln-tenant-runtime"
迁移或健康检查失败、或新版本表现更差时使用。CLI 依次做这些事:
- 确认上一个发布和它的数据库备份还在(没有则报
DEPLOYMENT_ROLLBACK_UNAVAILABLE) - 停止业务服务
- 恢复 PostgreSQL 备份
- 用上一个发布执行 Database Migrator
- 启动上一个发布并等待
/health/ready
- 成功:
Soln rolled back to <版本>. No previous release and database backup are available.—— 要么还没升级过,要么备份已经被上一次回滚用掉了;用soln status看一下- 回滚后上一个发布成为当前版本,并且不再保留回滚目标,所以下次升级会重新写一份备份
注意事项
- 不要手改
.soln/deployment.json和.soln/docker-compose.release.yml:它们记录当前发布、镜像摘要和未完成的操作 .soln/backups要留在同一块加密磁盘上,且不要删掉属于当前发布的那份备份- 只有打算重连 Runtime 时才轮换 Agent 密钥;本机部署里密钥只存在于部署目录的
.env - 不要在这个目录里重新执行
soln install(会报DEPLOYMENT_ALREADY_INSTALLED),升级和回滚才是正确路径