Infrastructure
CloudBank 使用 pnpm monorepo 和 Turborepo 進行建置編排,使用 GitHub Actions 進行 CI/CD,以及跨越 Cloudflare Pages、EC2 和 Goldsky 的多目標部署策略。
單一回購結構
cloudbank/
├── contracts/ # Solidity contracts (Foundry)
├── services/ # Go backend services
├── apps/
│ ├── web/ # Trading UI (React + Vite)
│ ├── admin/ # Admin panel (React + Vite)
│ ├── node-presale/ # Node sale site (Next.js)
│ └── docs/ # Documentation (VitePress)
├── packages/
│ ├── subgraph/ # GraphQL queries & types
│ └── contracts/ # Generated ABIs & types
├── turbo.json # Turborepo pipeline config
├── pnpm-workspace.yaml
└── package.json建構編排
Turborepo 管理所有套件和應用程式的建置依賴關係圖:
turbo run build依依賴順序建置所有套件。turbo run test使用快取在 monorepo 上執行測試。- 包輸出緩存在本地和遠端緩存中,因此未更改的包會跳過重建。
- 管道在
turbo.json中配置,具有明確dependsOn關係,確保packages/*在apps/*之前建置。
CI/CD 管道
CloudBank 維護 31+ GitHub 操作工作流程,涵蓋每個組件的整個生命週期。
合約工作流程
| Workflow | Trigger | Action |
|---|---|---|
| contracts-build | PR 到主 | 編譯合約,執行靜態分析 |
| contracts-test | PR 到主 | 執行 Foundry 測試套件 (PR) |
| contracts-deploy-testnet | 人工調度 | 透過 Foundry 腳本部署到 BSC Chapel |
| contracts-deploy-mainnet | 人工調度+審批 | 透過多重簽章驗證部署到 BSC 主網 |
服務工作流程
| Workflow | Trigger | Action |
|---|---|---|
| services-build | PR 到主 | 建立 Go 二進位文件,lint |
| services-test | PR 到主 | 使用競賽偵測器運行 Go 測試套件 |
| services-deploy | 推送到主程式 | 建置 Docker 映像,透過 SSH 部署到 EC2 |
應用程式工作流程
| Workflow | Trigger | Action |
|---|---|---|
| apps-build | PR 到主 | 建立所有前端應用程式 |
| apps-deploy | 推送到主程式 | 部署到 Cloudflare 頁面 |
子圖工作流程
| Workflow | Trigger | Action |
|---|---|---|
| subgraph-build | PR 到主 | 編譯 AssemblyScript 映射 |
| subgraph-deploy | 推送到主程式 | 部署到 Goldsky 託管服務 |
文檔工作流程
| Workflow | Trigger | Action |
|---|---|---|
| deploy-docs-test | 推送到主程式 | 自動部署文件到測試環境 |
| deploy-docs-live | 人工調度 | 將文件部署到生產環境 |
部署目標
前端 — Cloudflare 頁面
所有前端應用程式都部署到 Cloudflare Pages,並針對拉取請求自動預覽部署。生產部署在推送到主分支時觸發。 Cloudflare 的邊緣網路在大多數區域提供全球 CDN 分佈,並在 50 毫秒以下 TTFB 。
後端 — EC2 + Docker Compose
Go 後端在使用 Docker Compose 編排的 EC2 實例上執行。該組合物包括:
- API 伺服器 — 基於 Gin 的 HTTP 服務。
- MySQL — 主資料儲存。
- Redis — 快取、速率限制和會話儲存。
部署是透過 GitHub 操作中的 SSH 執行的,拉取最新的 Docker 映像並執行滾動重新啟動。
子圖——Goldsky
Graph 子圖部署到 Goldsky 的託管服務,該服務處理索引基礎架構、查詢服務和監控。部署使用整合到 CI 管道中的 Goldsky CLI。
合約—鑄造腳本
智能合約部署使用 Foundry 的 forge script 指令:
- 測試網 (BSC Chapel) — 手動觸發,使用專用的部署者錢包。
- 主網 (BSC) — 需要手動調度和環境審核門。
環境管理
GitHub 具有保護規則的環境可控制敏感部署:
- 測試網 — 無需批准,所有維護人員都可以存取。
- 主網 — 需要至少一名指定審閱者的批准。
- 生產 — 後端生產部署需要批准。
每個環境都儲存與其他環境隔離的自己的一組秘密(RPC URLs、部署者密鑰、API 令牌)。機密在運行時注入到工作流程中,並且永遠不會保留在工件或日誌中。