logo
icon

ghpool

GitHub API 代理服务器,将多个 PAT 集中成共享 rate-limit 配额、在内存缓存读取结果、写入操作透传 client 自己的 token — 为多 agent 场景(OpenAB、OpenClaw、自定义 coding agent)共用同一批 repo 设计。

template cover
部署次数0
发布者zeaburZeabur
创建于2026-05-29
最低配置1 核心1 GB
推荐配置1 核心1 GB
标签
Developer ToolsGitHubAI

模版内的服务

ghpool

ghpool 是一个 GitHub API 代理服务器,专为多 agent 场景设计 — 当多个 coding agent(OpenAB bots、OpenClaw workers、自定义 agent)共用同一批 repo 时,会各自撞到 GitHub 的 per-token rate limit。

它做三件事:

  • 读取请求合池 — 每个 GET 请求都会路由到剩余 rate-limit 配额最多的身份,多个 agent 共用合并后的配额,而不是各自打到上限
  • 缓存读取结果 — REST GET 与 GraphQL query 结果会用各资源不同的 TTL 在内存缓存(PR view 30 秒、run list 15 秒、repo view 5 分钟…)
  • 写入请求透传 — POST/PATCH/DELETE 与 GraphQL mutation 必须带 client 自己的 Authorization header,并用那个 token 转发,GitHub audit log 才能记录是哪个 agent 写的

架构

此模板将 ghpool 部署为内部专用服务:

  • 不绑公开 domain — ghpool 由同项目的其他服务通过容器网络访问
  • Port 8080 以 TCP 暴露(不过 Ingress、不终止 TLS)
  • 默认关闭 port forwarding;若需从外部测试,请至 网络 标签开启

其他服务通过以下自动暴露的环境变量连接:

变量
GHPOOL_HOSTNAME容器主机名(例如 ghpool.zeabur.internal
GHPOOL_BASE_URL完整 base URL(例如 http://ghpool.zeabur.internal:8080

配置 agent 通过 ghpool 连接

将 coding agent 或 gh CLI 的 GitHub API base URL 指向 ghpool:

export GITHUB_API_URL=${GHPOOL_BASE_URL}
export GITHUB_GRAPHQL_URL=${GHPOOL_BASE_URL}/graphql

需要身份归属的写入操作,agent 依然使用自己的 GH_TOKEN / GITHUB_TOKEN — ghpool 只拦截网络路径,不接管凭证。

新增更多 PAT

模板仅初始化一个 PAT(GHPOOL_PAT_DEFAULT)。新增方式:

  1. 打开 ghpool 服务的环境变量标签
  2. 新增名为 GHPOOL_PAT_<ID> 的环境变量(例如 GHPOOL_PAT_BOT_CLAUDEGHPOOL_PAT_BOT_CODEX),值填入该 PAT — <ID> 会成为 /stats 显示的身份名称
  3. 重启服务使新身份生效

任何符合 GHPOOL_PAT_* 前缀的环境变量都会被自动识别。

端点

路径用途
GET /<github-api-path>代理 GitHub REST API GET(合池+缓存)
POST /graphqlGraphQL — query 合池+缓存、mutation 带 client 自己的 auth 透传
GET /healthz健康检查
GET /stats池子的剩余配额、缓存命中率、各身份统计

安全注意事项

  • PAT 仅保存在环境变量中,不会写入容器内文件
  • GHPOOL_ALLOWED_OWNERS 严格生效:不在列表中的 org/user 请求一律 403,即使 PAT 泄漏也只暴露明确列出的 repo
  • Mutation 必须带 Authorization header(没带就 401),代理不能被当匿名写入网关滥用

资源

ghpool 是单一 Rust binary(distroless image)— 极为轻量。内存主要消耗在内存缓存(默认上限 10000 entries)。若代理流量很大,请相应提高 RAM。

链接与许可