交付包安装
交付包里有什么、deploy.sh 每一步在做什么、每个提问怎么答、不用脚本手动装怎么做,以及装完的验证清单。
交付包
一体包 RST-Qradar-AI-Copilot-<版本>.tar.gz 解开是这样一个目录:
RST-Qradar-AI-Copilot-1.0.0/
├── RST-Qradar-AI-Copilot-images-1.0.0.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-Qradar-AI-Copilot-<版本>.tar.gz.sha256。
deploy.sh 做什么
tar xzf RST-Qradar-AI-Copilot-<版本>.tar.gz
cd RST-Qradar-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)。数据源只有一种:连客户现网 QRadar Console,不再问。
[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 |
| QRadar Console URL | https://qradar.corp.local,不带路径 |
| 授权服务 SEC Token | 不回显;Admin → Authorized Services 里生成 |
| Console 用的是受信 TLS 证书? | 默认 N(自签,不校验)。Y 写 RST_QRADAR_VERIFY_CERTS=true;私有 CA 装完再手动加 RST_QRADAR_CA_CERT |
| Caddy 访问域名 | 分析师打开 https://<这个>/v2/,用域名 |
| 管理员口令 | 至少 8 位,输两次 |
[6/7] 写 .env
自动生成 RST_GATEWAY_SHARED_SECRET、RST_ADMIN_TOKEN、RST_USER_DB_PASSWORD、RST_ADMIN_PASSWORD_HASH,写入 .env(权限 600)。QRADAR_API_VERSION 固定写 20.0。
[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","qradar":"ok","qradar_version":"7.5.0 ...","qradar_configured":true}
docker compose -f docker-compose.prod.yml psreadyz 字段 | 期望 | 不对时 |
|---|---|---|
qradar | ok | 503 时这里是原因:not_configured 没填 Console;401 是 Token;连接错误看 QRADAR_URL、443 连通性、证书校验;docker compose logs gateway |
qradar_version | Console 报的版本 | 空说明 /api/system/about 没权限,Token 的用户角色缺「系统」类只读权限,不影响查询 |
qradar_configured | true | false = .env 里 QRADAR_URL / QRADAR_SEC_TOKEN 有一个是空的,界面会弹连接设置对话框 |
浏览器打开 https://<域名>/v2/,接受自签证书(生产换成你自己的证书,改 Caddyfile),admin + 刚才的口令登录。
手动安装(不走 deploy.sh)
docker load < RST-Qradar-AI-Copilot-images-*.tar
cp .env.example .env # 填 LLM_*、QRADAR_URL、QRADAR_SEC_TOKEN、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-qradar-ai-copilot-gateway python -m backend.session_auth '<口令>' 得到哈希,写进 .env 的 RST_ADMIN_PASSWORD_HASH($ 要写成 $$,compose 会吃掉单个 $)。