逃离 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
许可证:CC BY-SA 4.0
最后更新于 Sep 10, 2023 17:09 +0800