跳到主要内容

升级、回滚与备份

用交付包、在线更新或手动切换镜像升级网关,回滚到上一版本,以及需要备份的四类数据和恢复演练。

网关有三种升级方式。交付包适用于所有部署。在线更新需要在线许可。手动切换镜像 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。

用交付包升级

步骤

  1. 把新交付包解压到原安装目录:

    tar xzf RST-AI-Copilot-for-Elastic-<版本>.tar.gz --strip-components=1 -C <安装目录>
  2. 在安装目录执行 sudo ./deploy.sh。

  3. 提示「保留现有 .env,直接启动?」时输入 Y。这一项默认为 N,直接回车会覆盖 .env。

  4. 提示「升级到 <版本> ?」时输入 Y。

脚本和 compose 文件被新版本覆盖,.env 和 state/ 保留。脚本加载目录中的全部镜像包,把 GATEWAY_IMAGE_TAG 切到其中最新的版本,以 --force-recreate 重建容器并等待 healthy。compose 需要的镜像不齐时,脚本在启动前列出缺少的镜像名。

升级后核对运行中的镜像:

docker inspect rst-ai-copilot-for-elastic-gateway --format '{{.Config.Image}}'

在线更新

前提条件

步骤

  1. 在 系统设置 > 版本与更新 中,选择 下载并暂存。

  2. 在主机的安装目录执行:

    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-<日期>.sql

userdb_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。网关启动后,许可状态应为 有效,审计和知识库数据完整。

恢复到另一台主机时主机指纹改变,许可需要重新激活。在线许可先在旧主机上撤销。

本页内容