发布一个功能只要一个下午,运营它要好几年。这种不对称是全栈开发里最没人教的部分:部署按钮是整个系列里最便宜的东西,而它周围的一切——为部署做演练的流水线、盯着部署的遥测、把你从部署里救出来的回滚——才是真正的工程所在。
2026 年的 day-2 运营由四门功课组成:代码跑在哪里、如何安全地送达、如何看清它在做什么、以及当现实和你的测试不一致时如何撤销。
2026 年部署到哪里
平台问题取决于负载的形状,2026 年诚实的地图上有四块领地:
- Vercel —— Next.js 的精装选项:每个 PR 一个预览 URL,Fluid Compute 让 serverless 函数对 99%+ 的请求保持温热,100+ 边缘节点上平均 TTFB 约 70 ms。坑在于:免费 Hobby 套餐仅限非商业用途,Pro 是 $20/席位,而带宽超量($40/100 GB)加上图片优化和函数调用次数,正是流量波动变成账单波动的地方。
- Netlify —— 通用选手:框架中立,内置的表单/身份/分流测试可以替你删掉一堆第三方服务,还有——对自由职业者和外包团队起决定作用的细节——免费套餐允许商用。Pro 是 $19/席位;超量更贵,$55/100 GB。
- Cloudflare Pages/Workers —— 经济学打法:300+ PoP,免费且不限量的带宽,Workers 冷启动约 1–3 ms。一份公开的同流量对比里,Cloudflare 账单 $53,Vercel 是 $1,900。DX 没那么精致;但在带宽吃紧的规模下,这不是一个量级的竞争。
- Railway / VPS / Docker —— 留给 serverless 做不了的事:WebSocket 枢纽、跑 30 秒的 webhook 处理器、后台队列、旁边放着数据库的长驻进程。Railway 把这套打包得很好(Postgres 和 Redis 是一等公民);一台 $5 的 VM 用一杯咖啡的价格也能做到。
决策过滤器只有一个问题:负载是什么形状?静态或内容站——放哪都行,最便宜的赢。Next.js 应用——除非带宽占大头(那就选 Cloudflare),否则 Vercel。有状态的长驻后端——Railway 或 VM。另外把逃生舱保持温热:构建在 Web 标准之上(第 5 篇),让平台永远只是一个账单条目,而不是房东。
CI/CD:值得信任的流水线
流水线是你对每一次变更做的彩排,好让生产环境永远看不到首演。2026 年的最小可行流水线,按顺序:
- 安装与构建 —— 可复现的安装(lockfile、锁定包管理器版本),然后跑一次完整的生产构建。在 CI 里构建不过的东西,本来也不可能构建过。
- 类型检查与 lint ——
tsc --noEmit(在第 2 篇那个 7.0 编译器上只要几秒钟)、lint、格式检查。这道门拦住的,正是你笔记本会放过的那些问题。 - 测试 —— 逻辑用单元测试,赚钱的请求路径用少量集成测试。覆盖率崇拜已经过时,单位 CI 时间换来的信心才是正道。
- 预览部署 —— 每个 PR 一个 URL,合并前由人(和 Agent)过目。这一步改变了所有落地它的团队的协作文化:“能不能用?“从一个会议变成一个链接。
- 合并即部署生产 —— 而且数据库迁移跟着同一条流水线走,用第 6 篇的 expand-contract 阶段和不池化的连接串。绝不手动执行,绝不说“我待会儿再跑”。
部署应该频繁而小。diff 越大,事故越长。
可观测性:先于你的用户看到问题
监控告诉你 p99 延迟飙升了;可观测性告诉你为什么——哪个用户、哪个请求、哪个 span。2026 年,底座已经尘埃落定:OpenTelemetry——厂商中立、CNCF 治理、每个严肃的后端都支持。你用 OTel SDK 做一次埋点,让信号经过 OTel Collector(顺便擦除 PII),然后导出到 Grafana、Datadog、Honeycomb 或自建栈——全程不用改应用代码。
让它真正起效的不是三大支柱——日志、指标、链路——而是它们的关联:每一条结构化日志(Node 里用 pino,永远输出 JSON)和每一个出站 API 调用都携带当前的 trace_id 和 span_id。由此解锁的调试闭环:指标触发告警 → 打开慢链路 → 钻进那个具体请求的具体日志行 → 看到那一个吃掉 180 ms 的数据库 span。浏览器也在闭环里:RUM 采集 Web Vitals(尤其是 INP),Sentry 用 source map 还原你压缩后的堆栈,trace ID 从用户的点击一路传播到数据库。
按这个顺序做埋点,能回答你的问题就停:
- 错误 —— 未捕获异常,服务器端和浏览器端都要,打上 release 标签。
- 延迟 —— 按路由统计,用百分位数(平均数会说谎)。
- 黄金路径 —— 那两三条赚钱的链路:注册、结账、核心操作。
- 基于 SLO 告警,而不是凭感觉 —— 一个在燃烧时把你叫醒的错误预算,而不是一块没人看的 dashboard。
回滚纪律
任何平台上最被低估的特性:一键回滚。但更深一层的纪律是把 deploy 和 release 分开:
Deploy 是把代码放进生产——暗着,藏在 flag 后面,不服务任何人。Release 是把它暴露给用户——先放 10% 金丝雀,盯着错误预算,然后 50%,然后全量。出事的时候,关掉 flag 是以秒计的配置变更;回滚一次 deploy 是以分钟计的流水线运行。把每个有风险的变更都放在 flag 后面;flag 要短命,放量结束后就删掉,因为 flag 的堆积就是债务的堆积。
还要演练失败:隔三差五故意回滚一次。一条你从没走过的回滚路径,就是一条不存在的回滚路径。
成本意识:账单藏在哪里
一次能省真金白银的五分钟审计:
- 带宽超量 —— 头号惊喜:超出套餐后每 100 GB 收 $40–55。大图片和视频会成倍放大它;用 AVIF、
content-visibility和诚实的资源预算来治(第 2 篇)。 - 函数调用次数与时长 —— 啰嗦的客户端代码和长耗时函数是被直接计费的。
- 按人头定价 —— 席位(Vercel/Netlify)和 MAU(第 5 篇的 Clerk)会随成功一起膨胀。要算 10 倍时的数字,而不是 1 倍时的。
- 免费套餐陷阱 —— “免费”分成允许商用的(Netlify、Cloudflare)和仅限业余用途的(Vercel)。把客户项目部署到错的那个上面是违反服务条款,不是生活小妙招。
动手练习,然后进入第 8 篇
- 把一个仓库端到端接起来:PR → CI 门禁 → 预览 URL → 合并 → 生产。然后故意弄坏一个测试,看流水线拒绝放行。那声“拒绝”本身就是产品。
- 给一个服务加上 OpenTelemetry:自动埋点、一条带 trace 上下文的结构化日志、一个展示某路由 p95 的 Grafana 或厂商 dashboard。跟着一个慢请求从浏览器点击一路追到数据库 span。
- 把下一个变更放到 feature flag 后面,按 10% → 100% 放量。在 10% 时平静地回滚一次——因为你可以。
第 8 篇是长跑:作为预算的性能、作为习惯的安全、跨越数年的依赖与文档维护,以及如何在 AI Agent 承担越来越多打字工作的情况下运营这一切——同时不让自己失去方向。