阿克森雲登入 / 註冊English/中文/cn繁體/tw

IaC 與 CLI:wrangler、Terraform 與可重復部署

基礎設施即代碼的三層實踐:腳本層(CLI 命令版本化)、聲明層(Terraform/wrangler 配置管資源)、流水線層(CI 自動部署)。附本站部署鏈路的真實結構、回滾紀律與「多深的團隊值得上多重的 IaC」判據。

· AxionServe 編輯部 · 開發者

「可重復部署」是運維從手藝變成工程的分水嶺:同一套代碼,誰跑、在哪跑、跑幾次,結果都一樣。IaC(基礎設施即代碼)不是大廠專利——一個人一臺服務器也值得從腳本層開始。本篇按三層講實踐:腳本層(命令版本化)→ 聲明層(配置管資源)→ 流水線層(CI 自動跑),並給出「多深的團隊配多重的 IaC」判據。本文屬於開發者中心欄目;自動化腳本的單機器版本在首小時初始化。

IaC 三層實踐示意

第一層:腳本層——把命令從聊天記錄裏救出來

最低成本的 IaC:把你敲過的部署命令寫成腳本、進版本庫。三條紀律:

  • 參數化環境:腳本不硬編碼域名/路徑/令牌——環境走變量(ENV=qa ./deploy.sh),憑據走環境注入永不進庫;
  • 失敗即停:set -euo pipefail + 每步顯式校驗(部署後 curl health 確認版本翻轉再退出)——「看起來跑完了」不等於成功;
  • 輸出留痕:腳本打印每步動作與結果,日志歸檔——事後審計的唯一依據。
# 本站部署腳本的真實骨架(deploy.sh 類,參數化+自檢):
#!/usr/bin/env bash
set -euo pipefail
NAME="${1:?用法: deploy.sh   }"
CODE="${2:?}"; BUILD="${3:?}"
# ① 語法門禁:部署前先過 node --check(擋掉低級錯誤)
node --check "$CODE"
# ② 部署(憑據只從環境讀,缺失即拒絕運行)
[ -n "${CF_API_TOKEN:-}" ] || { echo "缺 CF_API_TOKEN"; exit 1; }
./upload.py "$NAME" "$CODE" "$BUILD"        # PUT 到平臺,綁定保留現值
# ③ 部署後自檢:版本翻轉確認(金絲雀紀律:先 QA 後 prod)
sleep 4
curl -sf "https://$NAME.example/api/health" | grep -q "$BUILD" && echo "✅ $NAME 已翻轉 $BUILD" || { echo "❌ 版本未翻轉"; exit 1; }

第二層:聲明層——Terraform 與 wrangler 管什麼

腳本管「動作」,聲明層管「狀態」:資源的期望形狀寫成配置,工具負責把現實收斂到期望(drift 檢測是腳本層給不了的)。兩個常用工具的分工:

工具管什麼適合場景
wrangler(Cloudflare CLI)Workers 腳本、KV/D1/R2 綁定、環境變量、部署邊緣計算棧的資源與發布
Terraform跨雲資源(DNS 記錄、證書、負載均衡、雲主機)+ 狀態鎖與計劃預覽多雲/多人協作的正式基建

本站的部署鏈路就是這套結構的實例:代碼單文件(worker.js)+ 部署腳本(deploy.py:語法門禁→PUT→綁定保留→構建標籤寫入)+ 金絲雀順序(QA 先驗、prod 後上)+ 回滾快照(每個版本存 backup/ 目錄)——沒有用重型編排,但四層紀律一個不少。IaC 的價值在紀律不在工具重量。

第三層:流水線層——CI 把人從部署裏摘出去

聲明層配置進庫後,CI(GitHub Actions/GitLab CI 類)把「合並即部署」自動化:lint → 測試 → 部署 QA → 冒煙 → (人工閘門)→ 部署 prod。三個設計點:①人工閘門留在 prod 前——自動到 QA 爲止,生產發布要人點頭(與內容治理的 R5 同構:機器準備,人類拍板);②冒煙測試是閘門的數據——部署後自動跑 health/關鍵路徑斷言,紅了自動回滾;③密鑰用 CI 的 secret 存儲——環境變量注入,日志自動打碼。

環境分離:QA 先行的金絲雀紀律

可重復部署的另一半是可重復驗證:任何變更先在 QA 環境部署並跑完驗證清單(版本翻轉、關鍵路徑 200、新功能斷言、回歸斷言),再對生產執行同一套腳本——兩個環境跑同一個腳本、同一份代碼、只有綁定與域名不同,「在我環境裏好的」這句話從此沒有存在空間。本站的部署順序紀律(QA 金絲雀 → prod)與驗證清單(health 版本、鑑權面、回歸 18 條)就是這一層的實例。環境分離的最小成本形態:同平臺兩個腳本名 + 兩套綁定——不需要第二套賬號,也不需要容器編排。

回滾紀律:IaC 的後悔藥要提前買

  • 每版快照:部署產物按版本存檔(本站的 backup/ 目錄即此紀律——文件名帶版本與構建哈希),回滾 = 重新部署上一版快照,不是「git revert 再走一遍構建」;
  • 回滾要演練:每季度真回滾一次(QA 環境),確認快照可用、腳本可跑、版本可驗——沒演練的回滾方案和沒備份一樣是許願;
  • 數據與代碼分離回滾:代碼回滾隨時可做;數據庫結構變更用「只加不刪」的兼容式遷移(先加列→雙寫→切換→後清理),讓代碼回滾不需要數據回滾。

判據:多深的團隊值得多重的 IaC

  • 1 人 / 1–3 臺機器:腳本層就夠(本篇第一層 + 冪等初始化腳本)——上 Terraform 是負資產;
  • 2–5 人 / 單一雲:加聲明層(資源進配置、狀態進庫)——drift 檢測與計劃預覽開始回本;
  • 5 人以上 / 多雲或多環境:完整三層 + 人工閘門——此時「誰改的生產」必須是可回答的問題。

相關文檔:API 參考總覽 · 開源項目 · 更新日志。單機自動化從首小時初始化腳本開始;安全側的密鑰紀律在Agent 集成第二節;欄目首頁回開發者中心。