这个博客换过好几套系统。最早是现成的 CMS,后来自己写过一个带后台的小程序, 再后来试过几个流行的静态站点生成器。折腾了一圈,最后我把它改成了最原始的样子: 手写的 HTML 文件,直接扔在服务器目录里。
那些年我给自己找的麻烦
回顾一下,每次「升级」博客系统,实际发生的事大概是这样的:
- 装系统、配数据库、调依赖,花掉一个周末;
- 写两篇文章,然后三个月不登录;
- 某天发现系统提示有安全更新,或者干脆打不开了;
- 修好它,或者换个新系统,回到第一步。
问题在于,我真正想做的事情是写文章, 但我把绝大部分时间花在了维护发表文章的工具上。 这有点像为了喝一杯水而先去修一座水厂。
静态页面的好处,比想象中多
1. 几乎没有可攻击面
静态站点不执行服务端代码,没有数据库连接,没有后台登录入口。 别人能做的事情基本只有「读取文件」。 对于一个没什么流量、只想安安静静放几篇文章的个人站点来说, 这几乎消除了运维中最让人头疼的一类问题。
2. 快得毫不费力
不需要缓存策略,不需要查数据库,甚至不需要 PHP。 Nginx 把文件内容推给浏览器就结束了。在配置一般的小服务器上, 这种站点的响应时间通常是个位数毫秒。
3. 备份就是复制文件夹
所有内容都是普通文件,打包、下载、移动到任何地方都能直接跑。 不用担心数据库版本、字符集、导出导入这些事。
4. 它不会因为「停止维护」而死掉
这是我最终下决心的原因。很多博客系统的问题不在于不好用, 而在于它们的生态会衰退。而 HTML 不会。 十年后打开这些文件,浏览器依然能正确渲染它们。
代价是什么
说实话,代价是有的,而且不算小:
- 写文章要手写 HTML,至少也要复制模板再改内容;
- 没有后台编辑器,没有草稿箱,没有自动保存;
- 文章多了之后,首页和归档页需要手动维护;
- 想换主题,得自己改 CSS。
如果你的博客需要多人协作、每天更新、或者有几千篇文章, 那静态方案确实不合适,用生成器或者正经的 CMS 更省事。
但对我来说,一年写十几篇,每篇都是想清楚才动笔—— 这些代价完全可以接受。而且「写起来麻烦一点」这件事, 某种程度上反而让我更慎重地对待每一次发布。
部署有多简单
整个流程就是:本地改好文件,同步到服务器的一个目录, 在 Nginx 里指定这个目录作为站点根目录。核心配置只有几行:
server {
listen 80;
server_name example.com www.example.com;
root /data/website/my-blog;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
没有 fastcgi_pass,没有 rewrite 规则,
没有需要常驻的进程。写完 nginx -t 检查一下,
重载就完事了。
一个实用的小建议:就算用静态方案,也别彻底放弃版本管理。 把整个站点目录放进 Git 仓库, 这样「改坏了想回退」和「想看看三个月前那篇文章改了啥」都变得非常容易。
结论
工具应该服务于目的。当我发现维护工具的成本已经超过了写作本身, 就该重新考虑这个工具是否合适了。
现在我的博客就是一堆 HTML 文件。它不酷,没有技术含量, 但它稳定、快速、好备份,而且我再也不用为了「网站又打不开了」而半夜爬起来。 这就够了。