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

連結與授權