交付包安装
安装脚本与离线安装、交付包的获取与内容、deploy.sh 各步骤与提问、自带 Elasticsearch 与 Kibana、多用户账号表、手动安装,以及安装后的验证。
用安装脚本安装
安装脚本 install.sh 随每个版本的 Release 发布。脚本下载交付包与 .sha256 文件,校验后解压到安装目录,再执行 deploy.sh。主机需要已安装 Docker Engine 24 及以上与 Docker Compose v2,并在交互式终端中以 root 执行。
curl -fsSL https://github.com/Reallysec/RST-AI-Copilot-for-Elastic/releases/latest/download/install.sh | sudo bash所有版本使用同一个交付包:未激活许可时以社区版运行,在 系统设置 的 产品激活 中激活许可后,原地解锁对应版本的功能,不需要重装。
| 选项 | 默认值 | 说明 |
|---|---|---|
--version | 最新版 | 安装指定版本 |
--dir | /opt/rst-ai-copilot-for-elastic | 安装目录。已有 /opt/rst-elastic-ai-copilot(1.2.20 及更早版本的安装)时沿用 |
--download-only | 关 | 只下载并校验交付包,保存到当前目录,不安装 |
再次执行安装脚本时,交付包解压到同一目录,目录中的 .env 与 state/ 保留,许可指纹不变。
在离线主机上安装
步骤
-
在能访问 GitHub 的主机上执行:
curl -fsSL https://github.com/Reallysec/RST-AI-Copilot-for-Elastic/releases/latest/download/install.sh | bash -s -- --download-only -
把当前目录下的
RST-AI-Copilot-for-Elastic-<版本>.tar.gz拷到离线主机。 -
在离线主机上按下文 执行 deploy.sh 安装。
使用自带 Elasticsearch 与 Kibana 时,把 Release 页的 RST-AI-Copilot-for-Elastic-elk-images-<版本>.tar.gz 一并拷到解压后的目录,见 自带 Elasticsearch 与 Kibana。
获取交付包
交付包在 GitHub Releases 页面发布,文件为 RST-AI-Copilot-for-Elastic-<版本>.tar.gz 与校验文件 RST-AI-Copilot-for-Elastic-<版本>.tar.gz.sha256。所有版本使用同一个交付包,功能范围由激活的许可决定。
解开后的目录:
RST-AI-Copilot-for-Elastic-<版本>/
├── RST-AI-Copilot-for-Elastic-images-<版本>.tar # 网关与 Caddy 镜像,deploy.sh 自动加载
├── deploy.sh # 交互式安装脚本
├── docker-compose.prod.yml # 标准形态:Caddy、网关、userdb
├── docker-compose.sso.yml # SSO 形态
├── Caddyfile / Caddyfile.sso
├── .env.example # 全部配置项及说明
├── deploy/rst-update.sh # 在线更新安装器
├── scripts/backup.sh / restore.sh
└── docs/ # 部署、备份手册与发版说明安装不访问镜像仓库。解包前执行 sha256sum -c RST-AI-Copilot-for-Elastic-<版本>.tar.gz.sha256 校验完整性。
执行 deploy.sh
tar xzf RST-AI-Copilot-for-Elastic-<版本>.tar.gz
cd RST-AI-Copilot-for-Elastic-<版本>
sudo ./deploy.sh脚本分七步执行。
| 步骤 | 内容 |
|---|---|
| 1 预检 | 检查 Docker、Compose 与必需文件,生成 state/machine-id 与 state/server_guid,已存在时复用 |
| 2 镜像 | 用 docker load 加载目录中的镜像包,包括交付包自带的镜像和 RST-AI-Copilot-for-Elastic-elk-images-<版本>.tar.gz,记录网关 tag |
| 3 现状 | 已有 .env 时询问是否保留并直接启动。升级时选 Y |
| 4 部署选项 | 认证方式:1 为网关自带登录,2 为 SSO(见 SSO)。Elasticsearch 来源:1 为已有集群,2 为自带 Elasticsearch 与 Kibana,见下文 |
| 5 配置 | 逐项提示,见下表 |
| 6 写入 .env | 生成 RST_GATEWAY_SHARED_SECRET、RST_ADMIN_TOKEN、RST_USER_DB_PASSWORD、RST_ADMIN_PASSWORD_HASH,写入 .env(权限 600) |
| 7 启动 | 写入 GATEWAY_IMAGE_TAG,执行 docker compose -f docker-compose.prod.yml up -d,最多等待 90 秒至全部容器 healthy,打印访问地址 |
第 5 步的提示与取值:
| 提示 | 取值 |
|---|---|
| LLM endpoint URL | 默认为火山方舟 https://ark.cn-beijing.volces.com/api/v3。coding 计划使用 /api/coding/v3 |
| LLM model id | 火山方舟 coding 计划为 ark-code-latest,自建 endpoint 为 ep-xxx |
| 时区偏移 | 默认 +08:00。模型据此解释「今天」「昨天」 |
| Elasticsearch URL | 例如 https://es.corp.local:9200。选择自带 Elasticsearch 时不提示 |
| ES 用户名 | Elasticsearch 未启用安全认证时留空。选择自带 Elasticsearch 时不提示 |
| Kibana URL | 例如 https://kibana.corp.local:5601。选择自带 Elasticsearch 时不提示 |
| Caddy 访问域名 | 分析师访问 https://<域名>/v2/,必须是域名 |
| 管理员口令 | 至少 8 位 |
state/machine-id 与 state/server_guid 是许可的硬件指纹,生成后不可重建。
自带 Elasticsearch 与 Kibana
第 4 步 Elasticsearch 来源选 2 时,deploy.sh 在 .env 中写入 ES_URL=http://elasticsearch:9200 与 KIBANA_URL=http://kibana:5601,并以 --profile bundled-elk 启动 docker-compose.prod.yml 中的 elasticsearch 与 kibana 两个容器。这一形态用于 PoC 和没有 ELK 的主机,生产环境连接已有集群。
| 项目 | 取值 |
|---|---|
| 镜像 | elasticsearch:9.5.3、kibana:9.5.3(docker.elastic.co),版本由 .env 的 RST_ELK_VERSION 决定 |
| Elasticsearch | 单节点,未启用安全认证,堆内存 1 GB(ES_JAVA_OPTS=-Xms1g -Xmx1g) |
| 数据 | es_data 卷 |
| 端口 | 两个容器不向主机映射端口,只在 compose 内部网络访问 |
交付包不含这两个镜像。主机能访问 docker.elastic.co 时,deploy.sh 发现缺少镜像后询问是否在线拉取。离线主机把 Release 页的可选附件 RST-AI-Copilot-for-Elastic-elk-images-<版本>.tar.gz 放到安装目录(与 deploy.sh 同一目录),deploy.sh 在第 2 步加载。缺少镜像且不在线拉取时,脚本中止。
deploy.sh 按以下顺序决定写入 .env 的 RST_ELK_VERSION:
.env中已有该值时沿用。- 没有该值、但主机上已有自带 Elasticsearch 的数据卷(
es_data或sso_es_data)时,写入8.12.2。1.2.4 之前的安装属于这种情况。 - 其他情况(新装)写入
9.5.3。离线附件elk-images中也是 9.5.3。
Elasticsearch 9.x 不能直接打开 8.x 的数据。已有自带 Elasticsearch 数据的主机不要只把 RST_ELK_VERSION 改成 9.5.3,否则 Elasticsearch 无法启动。
多用户账号表
多用户与三档角色(admin、analyst、viewer)的账号保存在网关自有的 Postgres 中,不写入 Elasticsearch。deploy.sh 启动 userdb 容器并设置 RST_USER_DB_URL,安装完成后即可在 用户 页添加账号。
手动安装时,在 .env 中设置:
RST_USER_DB_PASSWORD=<32 位随机串>
RST_USER_DB_URL=postgresql://rst:<同上>@userdb:5432/rst_users然后执行 docker compose -f docker-compose.prod.yml up -d userdb gateway caddy。首次启动时网关建表,并把 RST_ADMIN_USERNAME 与 RST_ADMIN_PASSWORD_HASH 写为第一个管理员。使用自有 Postgres 时,把 RST_USER_DB_URL 指向该实例,不启动 userdb。
启用 SSO 后账号由 IdP 管理,RST_USER_DB_URL 不生效。
验证安装
curl -k https://<域名>/healthz # {"status":"ok"}
curl -k https://<域名>/readyz # {"status":"ready","es":"ok","es_write":"ok","timezone":"+08:00",...}
docker compose -f docker-compose.prod.yml psreadyz 字段 | 期望值 | 不符时 |
|---|---|---|
es | ok | 核对 Elasticsearch 地址、账号、证书,查看 docker compose logs gateway |
es_write | ok | denied 表示账号缺少 .rst_copilot_* 的建索引与写权限,见 Elasticsearch 权限 |
timezone | 部署时区 | 修改 .env 中的 RST_TIMEZONE |
sso | 未启用 SSO 时为 disabled |
打开 https://<域名>/v2/,以 admin 和安装时设置的口令登录。默认证书为自签证书,生产环境修改 Caddyfile 换成自有证书。
手动安装
不使用 deploy.sh 时:
docker load < RST-AI-Copilot-for-Elastic-images-*.tar
cp .env.example .env # 填写 LLM_*、ES_*、CADDY_SITE_ADDRESS、RST_GATEWAY_SHARED_SECRET、RST_ADMIN_TOKEN、RST_USER_DB_PASSWORD、GATEWAY_IMAGE_TAG
mkdir -p state
openssl rand -hex 16 > state/machine-id
cat /proc/sys/kernel/random/uuid > state/server_guid
chmod 644 state/* # 网关以 uid 10001 运行,600 无法读取
docker compose -f docker-compose.prod.yml up -dstate/machine-id 与 state/server_guid 必须同时存在。缺少任一文件时,Docker 在该路径挂载一个目录,网关启动失败,或激活时报 no hardware identifier available。这不是许可问题。
管理员口令哈希由 docker exec rst-ai-copilot-for-elastic-gateway python -m backend.session_auth '<口令>' 生成,写入 .env 的 RST_ADMIN_PASSWORD_HASH。哈希中的每个 $ 写为 $$,否则 compose 会把它当作变量。