单服务器生产部署:从架构到故障恢复 · 10/10

网站稳定运行靠清单:补丁、容量、故障记录与恢复手册

把服务器维护分为每日、每周、每月和季度任务,覆盖补丁、容量、备份、账号、证书、依赖与恢复演练,并建立故障期间可直接照做的运行手册。

稳定不是没有故障,而是重要工作不会靠记忆

网站上线后,最危险的阶段往往不是第一次部署,而是几个月的平静期:证书提醒没人看、磁盘慢慢增长、备份脚本早已失败、离职账号仍有效。维护清单把这些低频但高影响的事情安排到固定节奏,运行手册则保证故障时不必从聊天记录里找命令。 清单要短而可验证。写“检查服务器安全”无法执行;写“查看待安装安全更新、记录是否需要重启、确认上次补丁日期”才有结果。

每日:只看影响当前服务的信号

每日自动检查外部 HTTPS、核心健康端点、5xx 异常、磁盘临界、服务反复重启与最近备份年龄。正常时汇总,不要每五分钟发一条成功消息;异常时带上服务、时间和第一步排查链接。 人工只需处理告警和重要内容反馈。每天手动 SSH 看 top 并不等于监控,反而容易形成“我昨天看过所以今天没问题”的错觉。

每周:更新、日志与容量趋势

查看系统安全更新和应用依赖公告,先评估再安排窗口。检查一周内的登录失败、异常 5xx、OOM、服务重启和数据库错误。比较磁盘、数据库、上传与备份体积的增长速度,预计何时到达阈值。 抽查一个最近备份的完整性,并确认异地副本已到达。检查内容发布后站点地图、页面状态码和搜索可见性没有模板级异常。

每月:账号、证书、成本与恢复准备

复核管理员、SSH key、云账号和第三方服务账号,撤销不再需要的访问。检查域名、证书、服务器和存储的续费日期;自动证书通常会续签,但仍要监控剩余时间。 审查近一个月发布和故障:哪些告警无行动价值、哪些问题用户先发现、回滚是否达到目标。清理过期备份和日志前先列出候选,确保保留策略生效且最近成功副本不受影响。

每季度:做一次真正恢复演练

在隔离环境从备份恢复数据库和上传,按文档部署应用、代理与环境配置,记录用时。若手册缺少某个密钥来源或软件版本,当场补齐。恢复演练也能发现备份越来越大、RTO 已经超出业务接受范围。 同时评估操作系统、数据库和主要运行时的支持周期。大版本升级单独立项、先演练,不在常规补丁窗口临时完成。

故障运行手册只写最先需要的内容

首页放:服务与域名清单、架构图、关键联系人、状态页或通知方式、停止条件、最近发布位置。然后按症状分章节:网站全站不可用、502/504、证书错误、磁盘满、数据库不可用、疑似密钥泄露。 每个章节使用同一结构:现象、确认命令、保护数据的动作、恢复服务的动作、升级处理条件、验证、证据保存。命令使用示例变量而非真实密码,危险操作说明前置条件与回滚。

故障记录用于改系统,不用于找人背锅

时间线记录首次影响、发现、缓解、恢复和确认;根因区分直接触发与系统性条件;行动项必须有负责人和截止时间。‘以后更小心’不是行动项,增加磁盘告警、修正发布检查或演练恢复才是。 同类问题重复出现时,优先自动化可验证步骤,而不是增加更多手工审批。自动化脚本也要有 dry-run、明确范围和失败停止,不能为了省事扩大删除或重启范围。

这套系列最终应留下什么

从架构图、systemd/Caddy/Compose、密钥和备份,到发布、监控、排错与手册,每一项都应有线上证据和恢复路径。维护文档注明最后验证日期,配置变化后同步更新。单服务器依然会故障,但它不再是一只只能靠原作者记忆维护的黑盒。 第一次整理时,可以从上一篇 502、504 与 HTTPS 分层排错 的步骤反推:每一层需要什么账号、日志、命令与联系人,就把什么写进手册。三个月后请没有参与部署的人照手册恢复一次;他卡住的地方,才是文档真正需要补的地方。

参考来源

  1. journalctlsystemd
  2. SQLite Online Backup APISQLite Documentation
  3. PostgreSQL Backup and RestorePostgreSQL Documentation
我正在使用 · 推广推荐

准备上线时,可以再比较这两项服务

这不是自动排名,也不是每个人都需要购买。我只列出自己正在使用的入口,并把适用场景和限制说清楚。

云服务器 · 前期项目在用

雨云 RainYun

准备部署网站或小型服务时,可以把它作为入门候选;先按用户地区、配置和真实负载判断,不要只看最低价格。

推广说明:链接包含我的推荐信息。你通过链接注册或开通后,我可能获得平台奖励;不会因此向你额外收费。价格、活动、地区与服务条款请以下单页为准。 查看完整商业披露