上次扒 nginx 日志那篇里,我给扫描器加了 444 规则,改配置的时候手一抖,把 mime.types 那行的分号删了,nginx -t 直接报错。当时是靠记忆改回去的,改完背后一层汗。这要是发生在半夜三点,我大概率会选择删库跑路,哦不,是删配置跑路。
痛定思痛,这次把 etckeeper 装上了。这东西是老牌工具,Debian 和 Ubuntu 的源里都有,干的事情一句话就能说清:把整个 /etc 目录变成一个 git 仓库。
apt install etckeeper 装完基本不用配,默认就绑好了 git,/etc 自动 init,装包的时候 apt 还会自动触发一次 commit。也就是说以后每次 apt install 或者 upgrade,系统改了 /etc 里哪些文件,都有存档可查。它还自带一个每日定时任务,就算我忘了手动 commit,一天也至少存一次档。对 1.9G 的小鸡来说毫无负担,/etc 全目录加 git 元数据也就几 MB,比 FreshRSS 的数据库零头都小。
实际用起来就是黑魂传火的感觉。改 nginx 配置之前先 cd /etc && git status 看一眼,改完 git diff 确认没手滑,再 git commit -m "加 444 拦扫描器",一个篝火就点好了。哪天改炸了,git checkout 一下就回到上一个篝火,不用再靠回忆还原配置。
更妙的是翻旧账能力。前两天我想不起来上月到底是哪次操作把 sshd 的密码登录关掉的,git log -p ssh/sshd_config 一翻,commit 信息里连当时装的是哪个包都写着。以前这种事只能靠考古 shell history,现在直接看犯罪记录。
当然它不是备份,仓库就在本机,小鸡整个挂了它也跟着走。所以定位是跟之前那篇备份文章互补的:备份救数据,etckeeper 救配置,两边都得有。打算之后把 /etc 仓库定期 push 到远端私有仓库,这坑先挖着,等填的时候再写一篇。
总之一句话总结不了,就这样吧。反正现在改配置前看到那个干净的 git status,心里踏实多了。手残如我,也终于配得上「生产环境直接改」这七个字了。