Skip to main content

升级、回滚与备份

三种升级方式(同目录重跑 deploy.sh、在线更新、手动切 tag)、健康门控回滚,以及要备份的四样东西和恢复演练。

升级

方式一:新交付包,同目录重跑 deploy.sh

把新包解到同一个目录(覆盖脚本和 compose,.envstate/ 不会被覆盖),再跑一次:

rm -f /opt/rst-copilot/RST-Elastic-AI-Copilot-images-*.tar   # 先删旧镜像包,见下
tar xzf RST-Elastic-AI-Copilot-<新版>.tar.gz --strip-components=1 -C /opt/rst-copilot
cd /opt/rst-copilot && ./deploy.sh      # 「保留现有 .env,直接启动?」选 Y;「升级到 <新版本>?」选 Y

它会 docker load 新镜像、把 GATEWAY_IMAGE_TAG 切到新版本、--force-recreate 重启、等 healthy。结束后核对 docker inspect rst-elastic-ai-copilot-gateway --format '{{.Config.Image}}' 是新版本。

1.1.21 及之前的 deploy.sh 只加载目录里按文件名排第一的 RST-Elastic-AI-Copilot-images-*.tar。旧包不删,它加载的还是旧镜像、GATEWAY_IMAGE_TAG 不变,却照样打印「部署完成」。1.1.22 起会加载全部并切到最新。

方式二:在线更新

激活了在线许可的网关会在心跳里得知新版本。系统设置 → 版本与更新里点「下载并暂存」,网关验签后把镜像存到 ./release/staging。然后在宿主机上:

./deploy/rst-update.sh              # 载暂存镜像 → 切 GATEWAY_IMAGE_TAG → 健康探测
./deploy/rst-update.sh --rollback   # 回上一版

/healthz 连续 3 次 200 才算成功,否则自动回滚

方式三:手动

docker load < RST-Elastic-AI-Copilot-images-<新版>.tar
sed -i 's/^GATEWAY_IMAGE_TAG=.*/GATEWAY_IMAGE_TAG=<新版本>/' .env
docker cp rst-elastic-ai-copilot-gateway:/app/state/server_guid state/server_guid 2>/dev/null || true   # 从 1.1.20 及更早升级时
docker compose -f docker-compose.prod.yml up -d

回滚

用上一个镜像 tag 重启即可:

sed -i 's/^GATEWAY_IMAGE_TAG=.*/GATEWAY_IMAGE_TAG=<上一版本>/' .env
docker compose -f docker-compose.prod.yml up -d

许可状态在 state/gateway_state 卷里,不随镜像走,回滚不丢。

任何一种方式都不要 docker compose down -v,也不要重建 state/machine-id / state/server_guid。卷和这两个文件一起构成许可的主机身份。

各版本的升级须知(离线许可重签、心跳修复、server_guid 迁移)见 产品激活 → 升级时注意

备份什么

数据在哪

数据在哪怎么备
主机身份(machine-id + server_guid)./state/整个目录
网关配置、许可激活记录、配额、provider、通道密钥gateway_state 卷(/app/statescripts/backup.sh
账号 / 角色userdb_data 卷(Postgres)pg_dump
审计、知识库、会话、报告、分析记录、告警、台账你的 ES 里的 .rst_copilot_*并入你的 ES 快照策略

网关状态

bash scripts/backup.sh /backup/rst-copilot     # 产物 gateway-state-<时间戳>.tar.gz,自动保留 30 天

建议 cron 每日 02:00:

0 2 * * * cd /opt/rst-copilot && bash scripts/backup.sh /backup/rst-copilot >> /var/log/rst-backup.log 2>&1

这个包等价于明文:里面同时有加密后的 ES 密码 / SMTP 口令 / webhook secret 和解密它们的 .rst_secret_key。备份目录 chmod 700,离机保存再加一层加密。恢复时必须带上 .rst_secret_key(或同一个 RST_SECRET_KEY 环境变量),否则界面上那些密钥会显示成「没设置」。

恢复:

bash scripts/restore.sh /backup/rst-copilot/gateway-state-XXXX.tar.gz
docker compose -f docker-compose.prod.yml restart gateway

账号表

docker exec rst-elastic-ai-copilot-userdb pg_dump -U rst rst_users > /backup/rst-copilot/users-$(date +%F).sql
# 恢复
docker exec -i rst-elastic-ai-copilot-userdb psql -U rst rst_users < users-XXXX.sql

丢了这个卷部署照样能打开:网关重建表并把 .env 里的首管理员种回去,但其他账号都没了。

ES 索引

用 ES 原生快照,把 .rst_copilot_* 加进你现有的快照 indices 列表:

PUT /_snapshot/<仓库>/snap-20260915?wait_for_completion=true
{ "indices": ".rst_copilot_*", "include_global_state": false }

审计日志按等保要求至少留 180 天。

恢复演练

上线前至少演练一次:在一台测试机 restore.sh + ES _restore,确认网关起来后许可 valid、审计和知识库数据齐全。换到另一台机器恢复时许可需要重新激活(主机指纹变了),在线许可先在旧机器上「撤销当前 license」。

本页内容