任务路线

交付上线

沿部署与线上运维路线交付:产物、托管、域名、HTTPS、发布、回滚与监控都可验证。

工程协作

3 个条目

构建Build

交付上线

「都说写完要 npm run build 再上线」——构建到底做了什么?为什么开发时和构建后体积差这么多,产物文件名还带一串随机字符?

一次构建,看产物如何从源码变小、变定稿
开发时 · 读源码
  • app.tsx96 KB
  • Button.tsx64 KB
  • format.ts32 KB
  • legacy-icons.ts48 KB
源码 240 KB · 未压缩 · 含类型 · 含死代码
部署时 · 发产物
  • index.html1.2 KB
  • app.a3f9b2c1.js28.4 KB
  • vendor.7c2e8d4f.css8.1 KB
  • legacy-icons.ts剔除
产物 37.7 KB · 压缩 · 哈希命名 · ↓84%

结论:构建把会变的源码(含类型、未引用模块、可读命名)翻译成体积小、压缩过、带哈希的定稿产物;死代码被摇树剔除。

交付上线

「合并前才手工测,经常把主分支跑挂——能不能让每次提交都自动验证?」

PR #104 · feat/login-retry → main结果:测试红灯 → 熔断 · 构建跳过 · PR 未通过、阻止合并

配置文件Configuration

交付上线

数据库地址、密钥这些会变的东西,为什么不能直接写在代码里?

.env · 不进仓库已配齐
DATABASE_URL

postgres://local/bouquet

结论:会变的值写在配置里,缺必填项启动直接失败并指出键名。

部署与上线

8 个条目

构建产物Build Artifact

交付上线

「都说 build 完要先打成一份带哈希的产物再上线」——这个产物到底长什么样?为什么不能直接拿最新源码上线?

CI 产物页 · 构建打完当前线上
app-web v2@sha256:c7e2f08a
  • index.html1.2 KB
  • app.c7e2f08a.js28.9 KB
  • vendor.7c2e8d4f.css8.1 KB

来源 commit 8b1e4d7 · 38.2 KB

结论:上线的是这份带哈希的定稿包,不是「最新源码」。

交付上线

代码在自己电脑能跑,怎样放到网上让别人打开?为什么有的站一丢到 CDN 就白屏?

https://app-web.fly.devPaaS · 在线
今日订单 12

服务端渲染 + 查库,常驻进程在跑

结论:托管是把产物放到别人的机器上跑给你访问;形态必须匹配产物,SSR 不能丢进纯静态 CDN。

环境变量Environment Variables

交付上线

「为什么本地能跑、一上线就报 undefined?数据库密码到底该写在哪才不会进 git、不会泄到浏览器?」

托管平台 · Preview 密文本环境专用
DATABASE_URLpostgres://preview/[redacted]

代码只写键名,真值由 Preview 注入

结论:同一键名换环境就换值;生产密钥不能贴进 Preview,也不能进浏览器。

域名Domain

看懂网络交付上线

shop.example.com 这种地址里,哪段是域名?「/shop」算域名吗?为什么域名还要每年交钱?

shop.example.com
线上商店入口今日花束

地址栏里的名字才是域名

结论:域名是给人记的入口名;example.com/shop 的 /shop 是路径,不是域名。

看懂网络交付上线

域名买好了,为什么有人能打开店、有人还进旧站?改完解析要等多久?

dig 查询回条A · 已解析
shop.example.comA → 192.0.2.1

TTL 3600 · 浏览器按这个地址开门店

结论:DNS 把名字翻译成地址;改记录后缓存按 TTL 才更新,不是立刻全网生效。

HTTPSHTTPS

看懂网络交付上线

地址栏那把小锁到底锁了什么?为什么证书过期浏览器直接整页拦住,不让登录?

https://app.example.com
登录页 · 连接已加密密码在路上是密文

中间人只看到 enc:7f3a…

结论:HTTPS 给连接加上锁和证书;锁坏了浏览器直接红墙,不会把密码发出去。

发布策略Release Strategy

交付上线

「新版本写好了——是直接全量上线,还是先给一小段真实流量、看支付成不成功再决定?」

v2.8.1 · 结账页灰度 5%
今日花束 · ¥128确认支付

旧版仍接 95% · 门槛通过后再放量

结论:先给一小段真实流量看支付成不成功,再决定放量,不要一次全开。

回滚Rollback

交付上线

「线上结账突然失败——是再发一版热修猜测,还是先切回上一份已知良好的版本?」

当前 v1.9.0支付失败
今日花束 · ¥128确认支付

回退点 v1.8.4 · 已验收

结论:切回已知良好的那一版,并在真实结账页上验证;数据不兼容不能硬切。

运行与可靠性

5 个条目

部署Deployment

交付上线

「代码在本地能跑,怎么变成用户能打开的网站?上线出了问题能立刻退吗?」

把 v2 推上生产 · 4 种姿势
  • 一次性一次全换出问题 = 全站宕
  • 滚动分批替换炸一实例,其余仍在服务
  • 蓝绿切流量指针秒级切回旧环境
  • 灰度5% → 25% → 100%小流量先验证再放大

策略决定「炸多大、能不能立刻退」· 每个实例靠健康检查放行,失败就回滚到上一版

环境变量Environment Variable

交付上线

「代码在本地能跑,上了生产就报错;密钥到底该放哪、为什么换个环境配置就全乱?」

同一份代码 · 配置随环境切换
变量devprod
DATABASE_URLlocalhostprod-db
LOG_LEVELdebugwarn
错误堆栈显示隐藏
API_KEY注入注入

密钥永远不进 git · 只进环境变量

交付上线

远处地区的用户打开站点,图片转圈、白屏很久——CDN 怎么让资源到他们手里快一点?

GET /hero.webp
  • 北京 · 命中 HIT12 ms就近返回,没碰源站
  • 纽约 · 未命中 MISS210 ms回到远端源站取,再写进边缘

对照看:同一张图,离你近的边缘命中就近秒回;别的地区第一次仍要回源——结论是 CDN 把副本搬到离用户近的地方,不是把内容变少。

监控Monitoring

交付上线

“半夜接口挂了,为什么是用户先发现?仪表盘和告警到底该看哪个、该报哪个指标?”

API 服务 · v1.4.2 · 8 分钟前错误预算 12%
结论:监控盯四个黄金信号里用户能感觉的症状——错误率、延迟超阈值才发告警;告警带触发规则、版本和日志入口,不是把每个内部数字都报一遍。
交付上线

“线上出错了却两眼一抹黑——日志该写什么、不该写什么?”

INFOWARNERROR

结论:等级 + requestId 串起一次请求;明文密码=泄漏,对照正确写法 password=***。

本地场景

4 个条目

分享卡片Share Card

交付上线

「分享时带标题、摘要和封面图;缺图有默认封面;改了 meta 要重新抓取才更新。」

小程序Mini Program

起手搭页面交付上线

「打开就弹授权、返回不刷新、分享卡片落到首页——小程序页面到底该把数据挂在哪?」

小程序 · 首页好物清单
今日花束

公开可看 · 分享落到 /pages/home

个性化推荐 · 拒绝仍能逛

结论:回前台才刷新列表;拒绝授权不能整页空白;分享要带落地路径。

飞书应用Feishu App

起手搭页面交付上线

「在飞书里打开应用后可查待办;发送结果用卡片消息,失败要可重试。」

飞书工作台我的待办
需求评审已完成 · 已通知 3 人

结果用消息卡片回执,不另开网站

结论:在飞书里打开就能办事;结果用消息卡片回执,失败可重试且不重复发。

运行证据

1 个条目

错误追踪Error Tracking

交付上线

同样的崩溃报了几十次,我怎么判断该修还是该回滚?

结账页支付崩溃TypeError
ISSUE32
TypeError: order is undefinedrelease 2.8.1 · submitOrder

结论:同根因聚成一张 Issue,先看版本和影响,再决定修还是回滚。

Web 技术

1 个条目

ServerlessServerless

交付上线

为什么没人下单时可以关窗,一按铃又要等一会儿才出票?

夜班窗口按铃出票
出票 · 周末花束

没人来就关窗,按一次才开一次。

结论:按次叫醒,空闲缩到零,不常驻烧着。

做完这一步之后

知识点可以反复查;任务则建议按「搭页面 → 交互 → 数据 → AI → 上线 → 协作」推进。