跳转到内容

部署、监控和备份:上线后怎么不慌

搭建交付 · 经验分享 · 2-3 小时

上线前把构建、环境变量、日志、告警、备份和回滚准备好,出问题时按层排查,而不是到处乱改。

已核验 2026-10-01 · 下次复核 2026-10-31

2026-10-01 阅读Cloudflare Pages官方部署、回滚与重定向说明;首页建议新项目优先Workers,已有Pages架构仍按对应文档维护。未对监控和备份步骤作通用实测承诺。

查看本次核验来源
部署、监控和备份:上线后怎么不慌 配图
学习结果
有一份上线检查表和一份故障处理清单:知道日志在哪里、备份能不能恢复、出问题时先查哪一层、怎样回到上一个可用版本。
时长
2-3 小时
难度
经验分享
核验
已核验 2026-10-01 · 下次复核 2026-10-31

正文

小产品出事故,很少是因为流量太大,更多是自己造成的:一次部署带上了错误的配置,一个测试环境的脚本连到了正式数据库,或者数据库出了问题,才发现从来没备份过。

这些问题大多可以提前准备。这篇按上线前后的顺序,讲部署、环境变量、排查、监控、备份和回滚各要准备什么。

部署:上线的是构建产物,不是源码

部署的不是你写的源码,而是构建之后生成的文件。静态站点部署的是构建输出目录;有服务器端逻辑的项目,还需要对应平台的运行适配。部署前先弄清三件事:构建命令是什么、输出目录在哪里、需要哪个版本的运行环境。

本地开发服务器能打开,不代表线上能正常工作。开发服务器常常会替你做一些容错,比如自动处理路径,线上不会。安装依赖、构建、发布这三步的结果要分别检查。

大多数托管平台会为每次提交生成一个预览地址,先在预览环境里检查,再发布到正式环境。

环境变量:分清公开和机密

配置分两类:浏览器可以看到的(比如统计代码的 ID)和必须保密的(数据库管理员密钥、邮件服务令牌、支付私钥)。机密配置只能在服务器端使用,绝不能打包进前端代码。

预览环境和正式环境要分开配置,否则测试时可能给真实用户发邮件,或者把测试数据写进正式数据库。.env 这类存放密钥的文件不要提交到代码仓库。密钥泄露或人员变动时要及时更换,更换前先想清楚有哪些服务依赖它。

出问题时,按层排查

访问异常的排查顺序

线上出问题时,最忌讳的是凭感觉到处改,尤其是一出问题就去改 DNS,很可能让影响扩大。按从外到内的顺序,一层层排除:

  1. 域名解析:域名是否指向了正确的服务?
  2. 证书和连接:HTTPS 证书是否有效?能否建立连接?
  3. 平台和路由:最新一次部署成功了吗?请求的路径有没有对应的页面?
  4. 前端:页面能打开,但交互异常,就看浏览器控制台的报错;图片 404 通常是资源路径问题。
  5. 服务器端函数:接口返回 500,看函数日志。
  6. 数据和外部服务:数据库连接、第三方服务是否正常。

每排除一层,就记下来,避免重复检查,也方便事后复盘。

监控:围绕用户真正要做的事

监控的目的是在用户告诉你之前发现问题。从最关键的用户任务出发设置:

  • 可用性检查:定时访问首页和最关键的接口(比如登录、提交表单),失败就提醒你。
  • 错误追踪:前端和服务器端的报错集中收集,记录时间、请求标识和错误类型。Sentry 这类工具可以做到。
  • 日志:静态资源、前端脚本和服务器端函数的日志往往在不同的地方,提前弄清楚每一类去哪里看。

日志里不要记录完整的个人信息、密码和付款信息。告警要能指向一个具体的排查动作,比如“提交接口错误率超过 5%,先看函数日志”;只会响、不知道该干什么的告警,很快就会被忽略。

备份:没恢复过的备份不算备份

需要备份的四类东西

代码在 Git 里,不代表数据也有备份。需要备份的东西有四类,各有各的保存方式:

  • 代码:Git 仓库,最好有一个远端副本。
  • 数据库:用户数据、订单等。
  • 用户上传的文件:头像、附件,通常在对象存储里。
  • 配置:环境变量、域名设置、第三方服务的配置。

不要默认托管数据库会替你备份。以 Supabase 为例,它的官方文档说明,自动每日备份覆盖的是付费套餐,不同套餐的保留天数也不同;免费套餐的项目,官方建议定期用命令行导出数据,并在别处另存一份。

Supabase 数据库备份文档

图:Supabase Database Backups 官方文档页面截图,截取于 2026-10-24,内容以官方当前页面为准。

备份多久做一次,取决于你能接受丢失多少数据:能接受丢一天,就每天备份;一小时都不能丢,就需要更细的方案。最重要的一点是定期演练恢复:在一个隔离的环境里,用备份恢复一份数据,确认真的能用。只看到备份文件存在,不能证明它能恢复。

回滚:代码和数据要分开考虑

很多托管平台支持一键回到之前的某次部署,比如 Cloudflare Pages 的回滚功能。但回滚代码不会撤销数据库的改动。如果新版本修改了表结构,回到旧版本的代码,可能和新的表结构不兼容。

所以修改表结构时,尽量分步进行:先加新字段,新旧代码都能运行;确认新版本稳定后,再删除旧字段。这样任何时候回滚代码都是安全的。

出事故时的顺序

  1. 先止损:回滚到上一个稳定版本,或者暂时关闭出问题的功能,阻止影响继续扩大。
  2. 记录时间线:什么时候发现、做了什么、最后一个正常的版本是哪个。
  3. 恢复后再分析原因:写一份简短的复盘,重点是以后怎样避免,而不是追究责任。Google 的 SRE 实践把这叫作“无责复盘”。

一个人运营的产品也值得有一份故障处理清单:包括各个后台的入口、日志的位置、回滚的步骤,以及出问题时怎样告诉用户。

学习步骤

  1. 写下项目的构建命令、输出目录和运行环境版本,确认预览环境可用。
  2. 列出所有环境变量,标出公开和机密,检查机密配置没有进入前端代码。
  3. 按六层排查顺序,写下每一层去哪里看、看什么。
  4. 为首页和最关键的接口设置可用性检查,接入错误追踪。
  5. 列出四类需要备份的东西,写清各自的方式和频率,并做一次恢复演练。
  6. 写一份故障处理清单:止损步骤、回滚方法、日志位置和对用户的通知方式。

场景拆解

上线后接口突然全部报错

小许的目录站在周五晚上部署了一个新版本,半小时后收到告警:投稿接口的错误率是 100%。

  1. 先止损:他没有急着排查,先在平台上把部署回滚到上一个版本,投稿恢复正常。
  2. 按层排查:首页正常,说明域名、证书和路由没问题;浏览器控制台显示接口返回 500,于是去看函数日志。
  3. 找到原因:日志显示“数据库连接失败”。新版本引用了一个新的环境变量名,但他只在预览环境里配置了,忘了在正式环境里添加。
  4. 修复:在正式环境补上配置,重新部署,逐项检查投稿流程。
  5. 复盘:在上线检查表里加了一条“对比预览和正式环境的变量列表”。

整个过程投稿只中断了二十分钟。关键是先回滚止损,而不是在线上一边出错一边调试。

补充材料

思维导图、练习、清单和参考资料可按需展开。

01

思维导图和离线文件

适合读完后下载到自己的知识库里继续整理。

上线前准备

  • 确认构建命令和输出目录
  • 区分公开和机密配置
  • 预览和正式环境分开

监控和排查

  • 可用性检查和错误追踪
  • 按层排查,从域名到数据库
  • 日志不记录敏感信息
  • 告警指向具体动作

备份和回滚

  • 代码、数据库、上传文件、配置
  • 定期演练恢复
  • 先止损再分析
  • 表结构分步修改

部署、监控和备份:上线后怎么不慌 思维导图

02

实践练习

根据文章内容记录自己的判断与依据。

为你的项目做一次上线准备

为你已经上线、或准备上线的项目,完成上线检查表和故障处理清单。

准备材料

  • 项目的部署平台和数据库后台的访问权限。
  • 一个可以用来测试恢复的隔离环境。

练习步骤

01 / 整理部署和配置

时间: 30 分钟

操作:

  1. 写下构建命令、输出目录和运行环境版本。
  2. 列出全部环境变量,标出公开和机密,对比预览和正式环境。

产出: 部署说明和环境变量清单。

检查: 机密配置没有出现在前端代码和代码仓库里。

02 / 设置监控

时间: 40 分钟

操作:

  1. 为首页和一个关键接口设置可用性检查。
  2. 故意触发一个错误,确认你能在错误追踪或日志里看到它。

产出: 一份监控和日志位置清单。

检查: 收到告警时,你知道第一步该做什么。

03 / 演练备份恢复和回滚

时间: 60 分钟

操作:

  1. 导出一份数据库备份,在隔离环境里恢复,检查数据是否完整。
  2. 在预览环境或测试项目里练习一次回滚。

产出: 恢复演练记录和故障处理清单。

检查: 记下了恢复用了多长时间、遇到了什么问题。

完成检查

  • 知道每一层故障去哪里查。
  • 备份至少成功恢复过一次。
  • 有一份可以直接照着做的故障处理清单。
03

清单、模板和关键词

用于项目记录和自查。

上线检查表

  • 构建命令、输出目录和运行环境版本已确认
  • 预览环境检查通过
  • 正式环境的变量与预览环境逐项对比过
  • 机密配置不在前端代码和仓库里
  • 首页和关键接口有可用性检查
  • 错误追踪已接入,日志位置已知
  • 数据库、上传文件、配置都有备份方式
  • 最近一次恢复演练的日期:____
  • 回滚步骤已写下并练习过

故障处理清单

发现时间:
影响范围(哪些功能、多少用户):
止损动作(回滚 / 关闭功能):
最后一个正常的版本:
按层排查的结果:
根本原因:
修复方式:
以后怎样避免:
是否需要通知用户,如何通知:

关键概念

  • 构建产物:部署的是构建生成的文件,不是源码
  • 预览环境:正式发布前的检查环境
  • 环境变量:区分公开配置和机密配置
  • 可用性检查:定时访问关键页面和接口
  • 恢复演练:用备份实际恢复一次
  • 兼容迁移:分步修改表结构,保证随时可以回滚

容易误判

  • 本地能打开就认为线上没问题
  • 预览和正式环境共用同一个数据库
  • 一出问题就去改 DNS
  • 以为代码在 Git 里就等于数据有备份
  • 默认托管数据库会自动备份
  • 回滚代码却没考虑数据库结构的变化
04

工具和参考资料

本篇涉及的工具和参考链接。