稳定不是没有故障,而是重要工作不会靠记忆
网站上线后,最危险的阶段往往不是第一次部署,而是几个月的平静期:证书提醒没人看、磁盘慢慢增长、备份脚本早已失败、离职账号仍有效。维护清单把这些低频但高影响的事情安排到固定节奏,运行手册则保证故障时不必从聊天记录里找命令。 清单要短而可验证。写“检查服务器安全”无法执行;写“查看待安装安全更新、记录是否需要重启、确认上次补丁日期”才有结果。
每日:只看影响当前服务的信号
每日自动检查外部 HTTPS、核心健康端点、5xx 异常、磁盘临界、服务反复重启与最近备份年龄。正常时汇总,不要每五分钟发一条成功消息;异常时带上服务、时间和第一步排查链接。 人工只需处理告警和重要内容反馈。每天手动 SSH 看 top 并不等于监控,反而容易形成“我昨天看过所以今天没问题”的错觉。
每周:更新、日志与容量趋势
查看系统安全更新和应用依赖公告,先评估再安排窗口。检查一周内的登录失败、异常 5xx、OOM、服务重启和数据库错误。比较磁盘、数据库、上传与备份体积的增长速度,预计何时到达阈值。 抽查一个最近备份的完整性,并确认异地副本已到达。检查内容发布后站点地图、页面状态码和搜索可见性没有模板级异常。
每月:账号、证书、成本与恢复准备
复核管理员、SSH key、云账号和第三方服务账号,撤销不再需要的访问。检查域名、证书、服务器和存储的续费日期;自动证书通常会续签,但仍要监控剩余时间。 审查近一个月发布和故障:哪些告警无行动价值、哪些问题用户先发现、回滚是否达到目标。清理过期备份和日志前先列出候选,确保保留策略生效且最近成功副本不受影响。
每季度:做一次真正恢复演练
在隔离环境从备份恢复数据库和上传,按文档部署应用、代理与环境配置,记录用时。若手册缺少某个密钥来源或软件版本,当场补齐。恢复演练也能发现备份越来越大、RTO 已经超出业务接受范围。 同时评估操作系统、数据库和主要运行时的支持周期。大版本升级单独立项、先演练,不在常规补丁窗口临时完成。
故障运行手册只写最先需要的内容
首页放:服务与域名清单、架构图、关键联系人、状态页或通知方式、停止条件、最近发布位置。然后按症状分章节:网站全站不可用、502/504、证书错误、磁盘满、数据库不可用、疑似密钥泄露。 每个章节使用同一结构:现象、确认命令、保护数据的动作、恢复服务的动作、升级处理条件、验证、证据保存。命令使用示例变量而非真实密码,危险操作说明前置条件与回滚。
故障记录用于改系统,不用于找人背锅
时间线记录首次影响、发现、缓解、恢复和确认;根因区分直接触发与系统性条件;行动项必须有负责人和截止时间。‘以后更小心’不是行动项,增加磁盘告警、修正发布检查或演练恢复才是。 同类问题重复出现时,优先自动化可验证步骤,而不是增加更多手工审批。自动化脚本也要有 dry-run、明确范围和失败停止,不能为了省事扩大删除或重启范围。
这套系列最终应留下什么
从架构图、systemd/Caddy/Compose、密钥和备份,到发布、监控、排错与手册,每一项都应有线上证据和恢复路径。维护文档注明最后验证日期,配置变化后同步更新。单服务器依然会故障,但它不再是一只只能靠原作者记忆维护的黑盒。 第一次整理时,可以从上一篇 502、504 与 HTTPS 分层排错 的步骤反推:每一层需要什么账号、日志、命令与联系人,就把什么写进手册。三个月后请没有参与部署的人照手册恢复一次;他卡住的地方,才是文档真正需要补的地方。
参考来源
- journalctlsystemd
- SQLite Online Backup APISQLite Documentation
- PostgreSQL Backup and RestorePostgreSQL Documentation