文档

快速开始

在 Linux 主机上用 Docker Compose 拉起 Approving。

前提

  • Linux 主机
  • 已安装 Git、Docker 与 Docker Compose

克隆仓库

git clone https://github.com/cocofhu/approving.git
cd approving

启动

默认路径从 GHCR 拉取已发布镜像(无需本地构建镜像):

./start.sh -d

然后打开:

./start.sh 还会从 GHCR 拉取 五个 sandbox runtime 镜像(按 acpBackend:cursor / claude_code / codebuddy / trae / opencode,体积较大)。完成前,沙箱对话可能停留在 “starting sandbox…”。

Agent / workspace / platform-rules 与 SQLite 持久在仓库根 .localdata 宿主机目录(bind mount:gateway / db / app-data)。./start.sh restart./start.sh down 会保留该目录。清空数据:./start.sh down && rm -rf .localdata

数据库与附件同生命周期(备份 / 清理)

正式栈(compose.release.yaml)把 SQLite 挂在 ./.localdata/db,把 应用数据(含默认附件 blobs,相对 WORKDIRdata/blobs 挂在 ./.localdata/app-data。复合变量附图在库/Run 输出里只保留 blob:{id} 引用,字节落在 blobs 目录;若只备份或只清理其中一侧,会出现「库里还有引用、GET /api/blobs/:id 却 404」的孤儿引用,Run 详情里附图会显示为「无法显示 / 附件不可用」。

运维约束:

  • 成对备份:同一备份集须同时包含 ./.localdata/db./.localdata/app-data(或整棵 .localdata)。
  • 成对清理 / 迁移 / 升级:不要只搬 SQLite 或只删附件目录;自定义 APPROVING_BLOBS_ROOT 时,须把该路径与数据库一并纳入同一生命周期。
  • 历史孤儿:已损坏的引用不保证可从附件存储找回;界面仅展示永久失败占位。本次交付不做孤儿巡检台、批量扫描页或启动/健康检查告警。

常用命令

./start.sh logs
./start.sh down
./start.sh pull          # 刷新 GHCR 镜像(含五个 sandbox runtime)
./start.sh restart       # down + up -d(保留 .localdata)
./start.sh dev -d        # 源码栈:go run + Vite HMR

镜像 tag / digest 可在 .env 覆盖 — 见仓库根目录 .env.example。默认按 backend 分流沙箱镜像;仅当显式设置 SANDBOX_IMAGE / APPROVING_SANDBOX_IMAGE 时才全局强制。发布与 smoke 见 Contributing

下一步

  • 登录后进入「默认项目」时,按第一次安装引导配置 ACP 后端、API Token、Git 凭据(Git 可跳过)。完成后写入项目共享 Agent 配置,生成 综合项目组 与已发布的 默认工作流(仓库 URL 在启动 Run 时填写)。引导只针对默认项目。
  • 核心概念 — FSM、gate、sandbox、artifact
  • 配置摘要 — 指向完整 CONFIGURATION.md
  • 网关摘要 — 指向 GATEWAY.md