逃离 WordPress

迁移博客或许是每一个Blogger的宿命。

动机

如你所见,这是一个Hugo站点。而在这个域名中,曾经运行着WordPress。

你或许知道我的博客本来是WordPress的,而WordPress虽然大而全,但作为一个博客来说确实有点太重了。这倒不是“我可以不用你不能没有”的问题,而是不用就要关掉的问题,留着就会有各种漏洞,虽然网站没啥真正有价值的东西,但怪烦的。基于维护性和可移植性的优势,我早就想用静态网站生成器代替WP了(这个在两周年的文章中有提到),但苦于重定向做起来怪麻烦的,便一直拖着没有做。

那为什么下定决心了呢?还是因为WordPress的可维护性。当初我将网站从Vultr迁到腾讯云,一部分也是因为承载的网站越来越多,天天干爆内存,然后每次 mariadbd 就会当炮灰被杀掉。腾讯云轻量香港确实爽,2G RAM随便造……了一年。就在前两天,这个现象又出现了。很快,服务器的硬盘也不知道怎么回事就满了(不是swap的锅),这次死的又是 mariadbd

之所以迁移起来困难,一直没干,一方面是因为目录结构不同,需要逐个手动重定向;而另一方面是WordPress上还有很多条评论,我不想丢掉。和这两者比起来,把文章扒下来转成Markdown反而成了相对容易的工作。

托管、生成器和主题

虽然静态网站可以直接用Caddy去serve,但本着 “用自己的不如用别人的” 尽量减少故障的原则,选择一般人使用的第三方托管方案,而这意味着又要经历常见的服务商选择问题了。老实说,Netlify、Vercel和GitHub Pages用户群都挺多,体验也都不错;微软的新服务Azure Static Web App也还可以,甚至有香港数据中心,但它是依托GitHub Actions的,build起来有点慢,最重要的原因是Azure那令人发指的控制台。看起来Netlify在中国大陆的速度比Vercel快一点,又没有GH Pages被墙得那么多,试了试几种网络环境发现没有什么访问问题,所以就选了Netlify。

没有选择Azure还有一个重要的原因。头抬起,这是Azure的控制面板,可看到为粗糙的边缘,请坐和放宽:

Azure 控制面板

至于网站生成器的选择,老实说,考虑到我稀烂的前端水平,我的选择有点跟着主题走,顶多对主题进行一点魔改。做出这个决定时,有hexo-theme-icarus和hugo-theme-stack两个选择摆在我面前,最终因为我对Go的喜爱(以及前者带有jQuery)而选择了后者。

加载首页只需要200KB出头,相比之前去掉图片还有2MB,很香啊!还能细粒度控制KaTeX加载,这么久终于体会到了抠流量的快感(误)。

Hugo的主题有一个好,就是不用学PHP就可以魔改,我 大概可能也许 有能力按照自己的需求改一改

当前进度:

  • 选择托管平台:Netlify
  • 选择生成器:Hugo
  • 选择主题:hugo-theme-stack
  • 魔改主题

文章

Markdown导出WordPress文章这件事,有人做过解决方案了,导出的Markdown有front matter,看起来交给Hugo基本没有什么阻碍。但是实际操作起来坑还是很多的,光是把文章导出再导入,就花了我三天时间 (一边摸鱼)

其一是图片的存储必须要整个移走,之前WordPress历经了三种存储图片方式,分别是WordPress自带图片存储、Cloudreve + OneDrive存储,最后是阿里云对象存储。自己铲屎山的时候才意识到,这三种方式实质上混杂在文章之中,而且由于WordPress问题,内部图片也是通过指向网站的链接管理的,也就是说WordPress存储的图片还要分IP+端口、域名+端口和域名访问。一不做二不休,干脆直接换个存储桶吧,路径正好也跟页面的slug对应,折腾起来也会容易很多。顺便推荐一波Cyberduck,比阿里的OSS Browser好用多了。

其二是各种复杂样式问题,包括但不限于分栏、复杂表格等,不可否认用WordPress的可视化编辑器确实很方便,但如文字颜色等属性是基于自定义CSS class实现的,

当前进度:

  • 导出WordPress文章
  • 导入文章
  • 设定分类
  • 设定标签
  • i18n
  • 友链

评论

评论是博客重要的内容,我的计划是写个小工具,从WordPress的REST API导出评论,然后导入第三方评论工具。这个事情会在所有文章都搬过来之后去做。

基于上面好线路服务器资源紧缺的现状,我挑选评论系统时将资源消耗放在了较重要的地位,也就自然盯上了无Node.js后端的Commento和Remark42。然而前者需要PostgreSQL,后者文档不太明白不说,还需要额外的注册登录才能评论,这与之前填入基本信息即可评论的初衷不符,于是转向了Twikoo。其使用Docker自行搭建的情况下,仅占用了70MB内存,文章详情页也仅需多加载150KB左右,算下来还是比较节省资源的。

果然,用的人多是有原因的……

当然也不是用的人少就一定不好用,毕竟我最后还是反复横跳到了Artalk。可选的多站点支持,50KB额外开销,Go后端,完善的文档……该给的确实都给了。折腾这么多,现在应该能安心了吧。

如果你对我做的转换工具感兴趣,可以查看下方链接。

当前进度:

重定向

把评论都搬过来后,WordPress站点基本就没有值得留意的东西了,这个时候就可以把WordPress的permalink重定向到Hugo来了。

最后发现RSS倒是做了重定向,但是某些固定页面没做,就直接把DNS改了。之前那些页面就寄掉了。还好筛选过,也没有太大损失。

当前进度:

  • 设置文章重定向:Hugo aliases已经做好了
  • 设置RSS、友链等固定链接重定向

后记 熟悉Netlify的读者应该知道,同一个站点可以分配多个domain。在上面的一切都做完之后,我将新博客放在了 <next.cyp0633.icu>,让它跟旧博客共存了一段时间。再确认运行正常之后,我将 <cyp0633.icu> 也指向了新博客,就此宣告了旧站的结局。然而Google搜索认为 <next.cyp0633.icu> 是规范网址,换言之不再索引 <cyp0633.icu>。可以在 netlify.toml 中添加如下的重定向规则,以直接将 <next.cyp0633.icu> 重定向到 <cyp0633.icu>:

toml
1
2
3
4
5
[[redirects]]
  from = "https://next.cyp0633.icu/*"
  to = "https://cyp0633.icu/:splat"
  status = 301
  force = true