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

將 client 指向 ghpool

要怎麼把 client 走 ghpool 取決於它是什麼:

Coding agents(Claude Code、Codex、自訂 agent):多數會看 GITHUB_API_BASE 來覆寫 GitHub API endpoint。

export GITHUB_API_BASE=${GHPOOL_BASE_URL}

gh CLI:使用 ghpool 附帶的 ghp shim —— 一個 drop-in 替代品,讀取走 ghpool、寫入走真正的 gh。普通的 gh 不完整支援 base URL 覆寫(內建命令如 gh issue list 內部走 GraphQL 會繞過去),ghp 才是可靠的方式。

直接 HTTP

curl ${GHPOOL_BASE_URL}/repos/owner/repo

寫入操作一定需要 client 自己帶 Authorization header —— ghpool 不會替 mutation 注入認證,所以 GitHub audit log 依然會記錄是哪個 agent 寫的。

新增更多 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)— 極為輕量。記憶體主要消耗在 in-memory 快取(預設上限 10000 entries)。若代理流量很大,請相應提高 RAM。

連結與授權