升级、回滚与备份
用交付包、在线更新或手动切换镜像升级网关,回滚到上一版本,以及需要备份的四类数据和恢复演练。
网关有三种升级方式。交付包适用于所有部署。在线更新需要在线许可。手动切换镜像 tag 适合需要逐步控制的场景。许可状态保存在 state/ 目录和 gateway_state 卷中,不随镜像变化。
任何升级和回滚都不执行 docker compose down -v,也不重建 state/machine-id 或 state/server_guid。这两个文件决定主机指纹,gateway_state 卷保存激活记录,任一变化后都需要重新激活。
升级到 1.2.22
请升级到 1.2.22 或更新版本。1.2.22 起,激活时会附带许可令牌,用来证明持有该许可。许可服务器之后会要求激活必须附带许可令牌,届时 1.2.21 及更早版本在新安装或重新激活时会失败。
- 1.2.21:直接在线更新。
- 1.2.20 及更早版本:先按下一节用新交付包升级一次,安装命令会直接装上最新版本。
本版另外修复:手动升级(deploy.sh)之后,rst-update.sh --rollback 只退回一个版本;rst-update.sh --prune-old 能删除改名前的旧名镜像。界面没有变化。
从 1.2.20 及更早版本升级到 1.2.21
1.2.21 起交付包、镜像和容器改用产品名 RST-AI-Copilot-for-Elastic,GitHub 仓库改为 Reallysec/RST-AI-Copilot-for-Elastic。1.2.20 及更早版本的网关不能在线更新到 1.2.21,需要用新交付包升级一次,任选一种方式:
-
重新执行安装命令:
curl -fsSL https://github.com/Reallysec/RST-AI-Copilot-for-Elastic/releases/latest/download/install.sh | sudo bash -
把新交付包解压到原安装目录,在该目录执行
./deploy.sh,步骤见用交付包升级。
沿用原安装目录。老安装的目录是 /opt/rst-elastic-ai-copilot,安装命令自动识别并沿用。数据、设置和激活状态保留。升级到 1.2.21 后在线更新恢复正常。之后命令中的容器名改为 rst-ai-copilot-for-elastic-*,例如 docker exec rst-ai-copilot-for-elastic-gateway。
用交付包升级
步骤
-
把新交付包解压到原安装目录:
tar xzf RST-AI-Copilot-for-Elastic-<版本>.tar.gz --strip-components=1 -C <安装目录> -
在安装目录执行
sudo ./deploy.sh。 -
提示「保留现有 .env,直接启动?」时输入
Y。这一项默认为N,直接回车会覆盖.env。 -
提示「升级到
<版本>?」时输入Y。
脚本和 compose 文件被新版本覆盖,.env 和 state/ 保留。脚本加载目录中的全部镜像包,把 GATEWAY_IMAGE_TAG 切到其中最新的版本,以 --force-recreate 重建容器并等待 healthy。compose 需要的镜像不齐时,脚本在启动前列出缺少的镜像名。
升级后核对运行中的镜像:
docker inspect rst-ai-copilot-for-elastic-gateway --format '{{.Config.Image}}'在线更新
前提条件
- 网关使用在线许可,并且已完成一次心跳。
- 网关为 1.2.21 或更新版本。1.2.20 及更早版本见从 1.2.20 及更早版本升级到 1.2.21。
步骤
-
在 系统设置 > 版本与更新 中,选择 下载并暂存。
-
在主机的安装目录执行:
sudo ./deploy/rst-update.sh
网关验签后把镜像保存在 ./release/staging。rst-update.sh 加载暂存的镜像,切换 GATEWAY_IMAGE_TAG 并探测健康状态:连续 3 次检查通过视为成功,120 秒内未通过则自动回滚到上一版本。
手动回到上一版本时执行 sudo ./deploy/rst-update.sh --rollback。部署带覆盖层时,先把 COMPOSE_FILE 设为冒号分隔的文件列表,例如 docker-compose.prod.yml:my-overlay.yml。
手动切换镜像
docker load < RST-AI-Copilot-for-Elastic-images-<版本>.tar
sed -i 's/^GATEWAY_IMAGE_TAG=.*/GATEWAY_IMAGE_TAG=<版本>/' .env
docker compose -f docker-compose.prod.yml up -d回滚
把 GATEWAY_IMAGE_TAG 改回上一版本并重启:
sed -i 's/^GATEWAY_IMAGE_TAG=.*/GATEWAY_IMAGE_TAG=<上一版本>/' .env
docker compose -f docker-compose.prod.yml up -d备份范围
| 数据 | 位置 | 备份方式 |
|---|---|---|
主机身份(machine-id、server_guid) | ./state/ | 复制整个目录 |
| 网关配置、许可激活记录、provider、通道密钥 | gateway_state 卷(/app/state) | scripts/backup.sh |
| 账号与角色 | userdb_data 卷(Postgres) | pg_dump |
| 审计、知识库、会话、报告、分析记录、告警、台账 | Elasticsearch 中的 .rst_copilot_* | 并入现有快照策略 |
备份网关状态
bash scripts/backup.sh /backup/rst-copilot备份文件为 gateway-state-<时间戳>.tar.gz,超过 30 天的自动删除。每天 02:00 执行的 cron 示例:
0 2 * * * cd <安装目录> && bash scripts/backup.sh /backup/rst-copilot >> /var/log/rst-backup.log 2>&1备份文件等同明文。其中既有加密后的 Elasticsearch 密码、SMTP 口令和 webhook secret,也有解密它们的 .rst_secret_key。备份目录设为 chmod 700,离机保存前再加密一次。恢复时必须带上 .rst_secret_key(或相同的 RST_SECRET_KEY 环境变量),否则界面上这些密钥显示为未设置。
恢复:
bash scripts/restore.sh /backup/rst-copilot/gateway-state-<时间戳>.tar.gz
docker compose -f docker-compose.prod.yml restart gateway备份账号表
docker exec rst-ai-copilot-for-elastic-userdb pg_dump -U rst rst_users > /backup/rst-copilot/users-$(date +%F).sql恢复:
docker exec -i rst-ai-copilot-for-elastic-userdb psql -U rst rst_users < users-<日期>.sqluserdb_data 卷丢失后部署仍能启动。网关重建账号表,并从 .env 重新写入首个管理员,其他账号丢失。
备份 Elasticsearch 索引
用 Elasticsearch 快照备份,把 .rst_copilot_* 加入现有快照的索引列表:
PUT /_snapshot/<仓库>/snap-<日期>?wait_for_completion=true
{ "indices": ".rst_copilot_*", "include_global_state": false }等保要求审计日志至少保留 180 天。
恢复演练
上线前在一台测试主机上执行 restore.sh 和 Elasticsearch _restore。网关启动后,许可状态应为 有效,审计和知识库数据完整。
恢复到另一台主机时主机指纹改变,许可需要重新激活。在线许可先在旧主机上撤销。