九月花了大概两周,把这套跑了六七年的博客重做了一遍。旧站当时是用一套现成的前后端搭的,带数据库、带管理后台,也带留言功能。这几年它最大的问题是没人维护,前端框架的版本停在三年前,看起来也越来越旧。
这次重来,最大的决定是去掉后端。
以前发一篇文章,流程是登录后台、写、提交、渲染、入库。听起来不多,但这套流程要求数据库一直活着、后端服务一直跑着、登录会话不能掉。任何一环出问题,你连自己写过的字都看不到。
现在改了结构:内容还是放在数据库里,但只作为一个"真源"存在;生成的时候跑一个脚本,把所有文章渲染成静态文件,服务器只负责发文件。没有登录、没有会话、没有接口,访问者看到的每个页面都是磁盘上一个已经存在的文件。
好处有几个。一是快,静态文件不用等后端查询和渲染。二是稳,没有服务会挂,也没有依赖需要定期升级。三是备份简单,整个站就是一堆文件,拷走就是完整备份。
做的时候也总结了点东西。
一是路径拼接。翻页链接曾经被拼成双斜杠开头,浏览器把它当成新域名,点"下一页"会跳到别人的网站上去。这类错误肉眼看不出来,所以我给生成器加了一道硬门禁:产出物里只要出现这种链接就直接拒绝发布。
二是缓存。静态站最大的坑是"你改了,别人看到的是旧的"。页面本身必须不缓存,带版本号的资源可以长缓存,中间还得留一条通道把老访客接回来。
三是别把内容绑在技术上。这次最省事的地方,是数据一直在一个独立的库里,所以换生成器的时候,内容一行都没动。
做完之后服务器安静了很多。以前跑着一堆进程,现在只需要一个 web 服务器发文件。这个站我打算就这么放着,不再折腾了。