交付包安装
交付包里有什么、deploy.sh 每一步在做什么、每个提问怎么答、不用脚本手动装怎么做,以及装完的验证清单。
交付包
一体包 RST-Elastic-AI-Copilot-<版本>.tar.gz 解开是这样一个目录:
RST-Elastic-AI-Copilot-1.1.21/
├── RST-Elastic-AI-Copilot-images-1.1.21.tar # 网关 + caddy 镜像,deploy.sh 自动 docker load
├── 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-Elastic-AI-Copilot-<版本>.tar.gz.sha256。
deploy.sh 做什么
tar xzf RST-Elastic-AI-Copilot-<版本>.tar.gz
cd RST-Elastic-AI-Copilot-<版本>
./deploy.sh[1/7] 预检
检查 Docker / Compose、四个必需文件;生成 state/machine-id 和 state/server_guid(许可的硬件指纹,永不重建)。老安装升级时会从旧的 gateway_state 卷里把 server_guid 迁出来,指纹不变。
[2/7] 镜像
docker load 包里的镜像 tar,记下网关 tag。
[3/7] 现状
已有 .env 时问「保留现有 .env,直接启动?」,升级选 Y;全新安装没有这一步。
[4/7] 部署选项
认证方式:1 = 网关自带登录(标准);2 = 企业 SSO(需要 IdP 信息,见 SSO)。
Elasticsearch:1 = 连客户已有 ELK(标准);2 = 自带 ES + Kibana(PoC 用,--profile bundled-elk)。
[5/7] 填写配置
| 提问 | 填什么 |
|---|---|
| LLM endpoint URL | 默认火山方舟 https://ark.cn-beijing.volces.com/api/v3;coding 计划用 /api/coding/v3 |
| LLM API key | 不回显 |
| LLM model id | 火山方舟 coding 计划 ark-code-latest,自建 endpoint ep-xxx |
| 时区偏移 | 默认 +08:00。模型理解「今天 / 昨天」靠它,国内部署必须是 +08:00 |
| Elasticsearch URL | https://es.corp.local:9200 |
| ES 用户名 / 密码 | 没开安全认证留空 |
| Kibana URL | 可留空 |
| Caddy 访问域名 | 分析师打开 https://<这个>/v2/,用域名 |
| 管理员口令 | 至少 8 位,输两次 |
[6/7] 写 .env
自动生成 RST_GATEWAY_SHARED_SECRET、RST_ADMIN_TOKEN、RST_USER_DB_PASSWORD、RST_ADMIN_PASSWORD_HASH,写入 .env(权限 600)。
[7/7] 启动
写入 GATEWAY_IMAGE_TAG,docker compose -f docker-compose.prod.yml up -d,等最多 90 秒到全部 healthy,打印访问地址。
装完验证
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 | ES 地址 / 账号 / 证书;docker compose logs gateway |
es_write | ok | denied = 账号缺 .rst_copilot_* 的建 / 写权限,见 ES 权限 |
timezone | 你的时区 | .env 里 RST_TIMEZONE |
sso | disabled(单用户) | — |
浏览器打开 https://<域名>/v2/,接受自签证书(生产换成你自己的证书,改 Caddyfile),admin + 刚才的口令登录。
手动安装(不走 deploy.sh)
docker load < RST-Elastic-AI-Copilot-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-elastic-ai-copilot-gateway python -m backend.session_auth '<口令>' 得到哈希,写进 .env 的 RST_ADMIN_PASSWORD_HASH($ 要写成 $$,compose 会吃掉单个 $)。