事情的缘起,是原先的服务器挂掉了。

那天我像往常一样打开网站,页面转了很久,最后只剩下一个错误。面板进不去,SSH 也连不上。起初以为是网络,换了几个地方试,还是一样。后来才确认,是那台机器本身出了问题。

那台 1 GB 内存的 VPS 跑着 Typecho、PHP 和一个几乎没人访问的数据库,从很多年前起,一直替我保管着这些零零碎碎的文字。很多个夜里,我打开电脑,登录那个简陋的后台,写完一段话,点下发布,然后关灯睡觉。它就在那里,不声不响。我从没想过,它也会有不在的一天。

网站停掉的那几个小时,我坐在电脑前,第一次认真想:如果这台机器再也回不来,我的文章怎么办?那些没有备份的草稿、那些随手传上去的图片、那些以为会一直在的东西,原来都系在一台租来的机器上。

幸好,数据和文件最后还是拿了回来。但那种悬空感留了下来。

我原本的打算很简单:换一台服务器,把 Typecho 原样搬过去,继续过日子。可就在准备重装的时候,我忽然厌倦了。一个以写字为主的博客,为什么需要一台完整的服务器?为什么需要半夜担心内存被数据库吃掉,需要在 PHP 爆出漏洞时手忙脚乱,需要为了一个静态页面维持一整套运行时?它像一间租来的老房子,能住,但每年都要修屋顶。修的次数多了,人就会想:我到底是在住房子,还是在给房子打工。

于是我没有急着装回 Typecho,而是把数据库导出,一条条文章变成 Markdown 文件,图片从 usr/uploads 里翻出来,缺的再去旧图床和外链里找。看着那些熟悉的标题变成纯文本,我忽然觉得踏实:原来我的博客,本来就可以只是几百个文件。它不需要一个庞大的系统来证明自己存在,只需要一些能打开、能读、能带走的字。

于是有了现在这套东西:Eleventy 把 Markdown 生成静态页面,Sveltia 在浏览器里写文章,内容提交到 GitHub,Cloudflare 负责构建和托管。服务器不再参与任何一次访问,它退回到一个备份盒子的角色。第一次在新地址上看到自己的文章时,我有点恍惚——页面还是那个页面,字还是那些字,但背后那台机器已经不在了。它轻得像一张纸。

静态站还有一个好处:它很无聊。没有登录接口,没有数据库,没有可以注入的地方;访问量再小,它也不会因为缺内存而倒下。我把评论也关了——本来就没有几个人留言,倒不如省下审核和防垃圾的力气。博客回到它本来的样子:一个人写,一些人看,看完就走。

中间当然不是一帆风顺。先是 Cloudflare Pages 把 .html 后缀 308 掉,我只好把 canonical、sitemap 和 feed 里的链接一条条改成无后缀,又担心旧链接失效,反复确认每一条还能不能走通;后来发现 workers.dev 的域名在国内被污染,怎么都打不开,一度以为部署失败,换了网络才看见站点好端端地在那里;再后来是编辑器的输入框在手机上只有几行高,写一段话要不停滚动,改了半天 CSS 才勉强能看。还有一次,我把域名从 Pages 切到 Worker,中途卡在一条 DNS 记录上,站点断了有一会儿。那一刻我盯着 522 的页面,忽然觉得又好气又好笑:折腾了这么久,原来还是会被一个小小的 DNS 记录难住。

这些事情说出来都不大,甚至有些可笑:一个写了多年博客的人,最后被 DNS、缓存和一个输入框折腾得团团转。可也正是这些琐碎,让我第一次真正看清自己的网站是怎么运转的——以前它像一个黑盒,现在每一层都在我眼前。

但这些都是值得的。

现在的发布流程很简单:打开 shuay.cn/admin/,登录,写字,点发布。几分钟后,GitHub 上多一个 commit,Cloudflare 自动构建,文章就出现在页面上。没有 FTP,没有数据库连接,没有“服务器又挂了”的深夜告警。我甚至把广告脚本也删了——本来就没靠它赚过什么钱,不如让页面干净一点。Google Analytics 还留着,算是一点旧习惯,想知道有没有人从某个遥远的地方误入这里。

有时候我会想,所谓“拥有一个网站”到底意味着什么。以前我觉得,拥有就是有一台自己的机器、一个自己的数据库、一套自己维护的系统;机器在,网站就在。现在我觉得,拥有其实是那些 Markdown 文件:它们在我手里,在 Git 仓库里,在任何一台能打开文本编辑器的电脑上。只要它们还在,网站随时可以搬到别处去。服务器会停,IP 会换,云服务商也可能有一天不再免费,但这些字不会因为某台机器的去留而消失。

陪我完成迁移的那台服务器,后来也提交了停机申请。它大概会换一个 IP,另作他用,或者就此退租。停机申请好像还有点小问题,我没有急着处理。让它再多待几天也好。无论怎样,它完成了自己的任务。谢谢那台先走一步的机器,虽然它最后没能撑住。

而我,还是会继续写下去。

preView