跳至内容

Docker Compose 部署

最快的类生产部署方式是 example/ 中的 Compose 栈。本页在快速上手基础上补充长期运行 AICR 所需的细节。非 Compose 的 Docker 运行参见 Docker 部署

Compose 文件以只读方式挂载 config.yaml,并持久化三个命名卷:

挂载点 用途
aicr-data /app/data SQLite 队列 DB、运行历史、dashboard 统计、model-catalog 缓存
aicr-workspaces /app/workspaces 各 workspace 的 source/agent/tmp/ 目录及克隆仓库缓存
aicr-logs /app/logs review run 日志

服务监听 8080 端口,在 example/ 目录下用 docker compose up -d 启动。

栈内置对 /healthz 的 Compose 健康检查(标准的存活探针,返回纯文本 ok):

healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/healthz"]
interval: 30s
timeout: 5s
retries: 3

搭配重启策略,让容器从瞬时故障中恢复:

restart: unless-stopped

划分很简单:密钥放在 .env,其余放在 config.yaml

.env 持有原始密钥值,且永不提交:

Terminal window
# 入站:webhook HMAC 密钥(保护 /webhooks/*)
AICR_WEBHOOK_SECRET=7f3a...
AICR_GITHUB_WEBHOOK_SECRET=b2c1...
# 入站:API key(保护 /triggers/* 如 P4/SVN)
AICR_API_KEY=c6d7e8f9...
# 出站:AICR 调用外部服务
AICR_LLM_API_KEY=sk-...
AICR_GITEA_TOKEN=4b5d...
AICR_FEISHU_WEBHOOK=https://open.feishu.cn/open-apis/bot/v2/hook/...
AICR_FEISHU_SECRET=3Ob2...

config.yaml 持有非密钥配置,并引用环境变量(永不写值):

triggers:
- name: gitea
kind: gitea
webhook_secret_env: AICR_WEBHOOK_SECRET
llm:
providers:
- id: primary
kind: openai_compatible
api_key_env: AICR_LLM_API_KEY

完整的分层认证模型(webhook HMAC、server API key、workspace 级 API key)以及 dashboard 独立的管理员登录,参见认证与密钥

config.yaml.env 是挂载进容器的,不是烘焙进镜像的。修改任一文件后,重启容器即可——只有代码变更才需要完整重建镜像:

Terminal window
docker compose restart
Terminal window
# 存活
curl http://localhost:8080/healthz
# 服务日志
docker compose logs -f

健康检查通过后,跑一次 dry-run 评审 确认 LLM 凭据、agent 和沙箱配置正确,然后接入你的第一个 webhook