我之前写过一篇自托管踩坑的文章,里面立了个 flag:备份这事,等硬盘炸了再说。结果 flag 这东西就是这么灵,上周博客静态文件那边手滑误删了一小部分,虽然 Hugo 重新 build 一遍就恢复了,但这个教训足够清晰。今天顺便把监控和备份一起补上,记录一下过程。
为什么是 Uptime Kuma
先说监控。需求很简单:博客挂了我要第一时间知道,而不是第二天早上自己刷新才发现。市面上的方案要么收费,要么对 1 核 1.9G 的小鸡来说太重。Uptime Kuma 是个开源的监控面板,功能上刚好够用:HTTP 监控、证书到期提醒、宕机告警,这些都有。
装的过程就不细说了,它官方支持直接跑 Node,也可以拉 Docker 镜像,我这种已经把 Docker 卸了的服务器当然选前者。配置就是加一条 HTTP 监控指向博客域名,再设一个检测间隔。资源占用比我预想的低,跑起来之后看了眼内存,多占了一百多兆,可以接受。
告警我接的是 Telegram 机器人,挂了会推消息过来。测试的时候手动把 nginx 停了,几十秒后手机就震了,链路是通的。
自动备份,终于
监控有了,再看备份。之前一直是手动 tar 关键目录扔对象存储,这次写了个脚本,用 crontab 每天凌晨自动跑。逻辑很简单:
- tar 打包
/opt/hugo-blog的内容源目录(文章、主题、配置) - 按日期命名,扔到对象存储
- 只保留最近 7 份,防止存储爆掉
写完手动跑了一遍,几十秒,生成了备份包并正常上传。然后加进 crontab,第二天早上收到通知确认任务跑过,这事儿才算落地。拖了快一年的东西,实际动手也就一小时。
这里有个小坑提醒下:crontab 里的脚本一定要用绝对路径,我第一版用了相对路径,手动跑没问题,挂到 cron 上就找不到目录了。这种坑每个玩过 cron 的人都踩过,但我还是踩了。
顺便说说感受
折腾完之后有种"早干嘛去了"的感觉。这两件事单独看都不难,加起来一个多小时,但就是因为不难,才一直拖着。人的心理就是这样,事情越小越容易觉得"随时都能做",然后无限期往后推。
另外给同样玩小鸡的朋友一个建议:监控和备份这两件事,优先级高于你博客上任何新功能。我见过太多人给博客加花里胡哨的东西,结果哪天服务器炸了,连数据都找不回来。先保证活着,再谈生活。
后面打算把备份再加个异地容灾,比如在家里的 NAS 上也放一份。不过按我的拖延症,这个估计又得拖到下次硬盘出问题。就这样,flag 已立。