写这篇的时候,站点已经连续运行了一年多,没有发生过超过半小时的故障。这个成绩不算什么,但对我来说是个节点:终于可以从“救火”里抬起头,想想后面几年要怎么走。

过去一年我做的事情,大部分不产生内容:换证书、补备份、加监控、写文档、把部署从手工变成脚本。它们让站点变得可维护,也让我对“长期”这两个字有了更具体的理解。

先复盘这一年

年初的时候,站点只有一台机器、一个 Nginx 和一个没提交完的 Git 仓库。没有备份,没有监控,证书靠记忆续期。

现在的状态:

  • 部署有脚本,回滚有目录,发布不再是手工登录改文件;
  • 备份每日增量、每周全量,每季度做一次恢复演练;
  • 可用性、磁盘、证书、备份失败都有告警;
  • 有一页部署文档和一页恢复文档,换机器能照着做;
  • 文章从零散笔记变成了按主题组织的两个站点。

也有没做好的地方:写作节奏不稳定,有些月份一篇都没有;文档更新滞后于配置变更;监控告警偶尔误报,让我一度想全部关掉。

下一个三年的三条原则

第一,内容优先。 基础设施已经够用了,再投入的边际收益很低。接下来三年,我希望每年至少写二十篇,而不是每年多搭一个服务。站点存在的意义是承载内容,不是展示架构。

第二,可回滚。 任何改动都要能退回去:发布能切回上一版,配置有备份,数据有快照,域名解析的 TTL 不要设得太长。这个原则会限制一些“看起来很酷”的方案,但能保证我不会因为一次改动把站点弄丢。

第三,低依赖。 能静态生成就不运行时渲染,能用系统自带工具就不装新服务,能一个文件解决就不引入一个平台。依赖越少,三年后还能跑起来的概率越高。

具体一点

内容方面:两个博客站按现在的分工继续写,地基篇记录过程和判断,链路篇记录访问与表达;笔记站把可标准化的操作沉淀成文档。每季度回看一次选题,删掉那些为了凑数而写的标题。

维护方面:每季度一次恢复演练和证书检查,每半年轮换一次密钥,每年续费前检查域名和服务器。把“检查”写进日历,而不是靠想起来。

技术方面:不主动引入新的常驻服务;如果必须引入,先写清楚它失败时怎么办。每年评估一次是否要升级服务器,触发条件还是那几条:持续高负载、内存不足、恢复时间超标。

预算方面:服务器、域名、对象存储、备份,一年的固定支出控制在几百元以内。超过这个数就要说明它解决了什么具体问题。

不做什么

我也给自己列了一个“不做清单”:

  • 不做多用户、不做社区,评论继续用成熟服务;
  • 不接广告,不为了流量改变写作方式;
  • 不追新框架,主题和构建工具稳定就不动;
  • 不做“全自动”,关键步骤保留人工确认;
  • 不把站点做成产品,它首先是我自己的记录。

这些“不做”和“要做”同样重要。一个人的精力有限,明确不做什么,才能把时间留给真正想写的东西。

最后

三年前我开始搭这个站点时,想的是“有一个自己的地方”。一年前故障之后,想的是“别让它挂”。现在想的是“让它值得被读,也值得被维护”。

地基打稳之后,上面的东西才有机会慢慢长出来。接下来的三年,我希望少一点“又换了一个方案”,多一点“这篇写得比上一篇好”。