跳轉到

D-20260809-02|社群 Fork 手動一鍵部署

背景與驅動力

D-20260706-02 定下「公版零 secrets、官方與社群同路」,但把 deploy workflow 視為另建部署 repo 的內容。實作盤點顯示這會迫使非專業營運者複製 workflow、手改 manifests,三個週邊 repo 的入口也不一致。專案尚未首次公開,沒有既有部署需要相容,適合直接把 v1 操作面收斂。

考慮過的選項

  • 維持另建 deploy repo 與手動複製樣板:安全邊界清楚,但重複檔案易漂移,否決。
  • 公版 workflow 同時支援 push 自動部署:fork 更新可能意外部署,否決。
  • 公版隨附 dispatch-only、明示 opt-in 的部署 workflow(採納)。

決定

  • signaling、turn、pinning 公版都隨附 .github/workflows/deploy.yml;只接受 workflow_dispatch,deploy job 必須以 repository variable DEPLOY_ENABLED == true 明示 啟用。公版不設定任何營運值,因此不會部署;workflow 存在不等於官方 endpoint。
  • 必要 secrets/vars 在任何變更叢集或雲端前 fail closed;外部 Actions 以完整 commit SHA 鎖定。signaling 走 Cloudflare Workers(workers.dev 預設、自訂網域選配),turn 與 pinning 走 GKE KUBE_CONFIG 主線。真實 secrets 永不進 repo。
  • turn 舊 deploy/examples/deploy.yml 直接遷移,不保留相容副本。pinning 在 checkout 外渲染 全部 REPLACE_ 佔位,部署後 strict smoke 失敗即 rollout undo。signaling 的 TURN secret 與 TURN URL 必須成對注入 Worker bindings。
  • TLS:Cloudflare edge 自動續期;pinning 由 cert-manager 寫入 ingress TLS Secret;turns: 是進階選配,續期後需由鎖版 reloader 觸發 coturn rollout,並明示會中斷當下 relay。
  • 教學截圖可後補,但必須去除帳號、token、真實網域、叢集識別與檔案 metadata。首次公開前 僅有 v1,不提供 v2、雙路或相容 shim。

後果與影響

營運者可 fork → 設 GitHub secrets/vars → 手動 Run workflow,不需編輯 repo 檔案;公版仍是 零 secrets、零自動部署。代價是 fork 擁有者必須自行啟用 Actions、保護 production Environment, 並對雲端費用、網域、可用性與法遵負全責。真外部 fork 的線上 smoke 仍需營運者帳號完成。