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 variableDEPLOY_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 仍需營運者帳號完成。