阿克森云登录 / 注册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 集成第二节;栏目首页回开发者中心。