再见 WordPress
念念不忘,必有回响。
Hello World,又一个 WordPress Blog。
从最早的 emblog ,到 Typecho 再到 Wordpress,本博客的程序在这三者之间换了又换,期间也尝试体验静态类生成的博客程序,如 Hexo、Hugo、Jekyll 和 Astro,但总感觉静态博客少了点灵魂,所以前面一直使用的是动态博客程序,并且在这条路上不断的折腾,从 32MB 内存的 VPS 上运行 Typecho+SQLite+Lighttpd,到 512M 内存上跑 Wordpress + Mariadb + Memcache + Nginx,但免不了遇到 OOM(尤其是 WordPress + MariaDB 的组合,在 512M VPS 上,也不能怪它,毕竟运行在非建议环境上),最近这种情况发生很多,原因在于 WordPress 更新频繁,以及大量的机器人不断的提交评论,所以是时候考虑更换程序了(已经更换好了,你现在看到的文章就是在新程序下发布的)。
最近的更新
在国庆假日里其实围绕这个站点做了很多的更新,当然这花了不了太多的时间,更多的是交给 Agent,一句话,然后等待结果…
前面提到了尝试过很多静态博客程序,为什么选择 Hexo 而不是性能更好的 Hugo 和更加现代化设计的 Astro 呢?原因很简单,主要还是看重它的生态丰富,有大量的资料可供参考,更容易搞定各种软件和服务的集成,得益于社区和广泛的文章,让我从 WordPress 迁移到 Hexo “异常”顺利。接下来我来聊聊如何将 WordPress 中的文章完整的迁移到 Hexo。
从 WordPress 转换到 Hexo
一切交给 Agent。
我只需要从 MariaDB 中导出 WordPress 数据库的 sql 文件,然后交给 agent,告知其读取该 SQL 文件,然后将 SQL 中的文章和页面转换到 Hexo,剩下的就等待了,因为我在做这项任务的时候用的是 Windows 系统,编程语言只安装了用于部署和运行 Hexo 的 NodeJS,所以 Agent 为我这个任务编写了一系列的 JavaScript 脚本,用于处理数据,并编写了测试用例,整个项目结构非常完善:

out 目录中是转换后的 json 数据文件:

所以整体的迁移变得非常顺利,甚至所有之前的 URL 都没有变化,不用担心搜索引擎中的 URL 失效了(嘿,我这还需要啥 SEO)。
新的主题
前面为什么没有先择 Astro 的其中一点就是我个人喜欢复古的主题,就跟当年的新浪博客一样(现在看新浪博客也没有改版,曾经那些“霸榜”的博主依旧还在),于是我借助 AI 也设计了一套主题(就是现在看到的)。
主题整体结构更加紧凑,在小屏的笔记本上刚好铺满屏幕,整体色调为清新绿色,看起来更加舒适,没有使用衬线字体,普普通通的黑体,怀旧风,或者称为豆瓣风(没错我就是“借鉴”它的),Simple 就是最好的。
新的部署方式
使用 Hexo 的同时也带来了新的部署方式。
跟大多数人一样,当前的博客内容作为 Git 仓库托管在 GitHub,同时在仓库中添加了一个 workflows 文件,用于在 push 时触发 Action。
Action 在触发时,会将生成的静态内容通过 rsync 的方式同步到我的 VPS 上(对,就是前面部署 512M 部署 WordPress 的 VPS),当前 VPS 上仅仅运行了 Nginx,对比之前的工作负载,仅提供静态页面的访所需的负载和内存用量是远远低于之前的方案的。
新的战略合作伙伴
之前存放文件所使用的对象存储是又拍云提供的,加入又拍云联盟就可以获取一张代金卷用于抵扣一整年的免费额度,对于这种小网站,CDN 对象存储是管够的,但很遗憾最近发现没有这个活动了,又拍云先前给了代金卷尚在有效期内,底部链接依旧保留,基本的契约精神是要有的。
为此,需要寻求新的“合作伙伴”了,新的合作伙伴就是“赛博菩萨”,没错就是 CloudFlare,我使用了它提供的 R2 对象存储,有 10GB 的免费空间,并拥有零成本的流量。
迁移对象存储的数据也很容易,又拍云提供最简单的 FTP 方式操作资源,可以非常容易的下载所有的数据,R2 是兼容 S3 API 的,所以只需要一个 S3 的客户端就可以上传数据到对象存储。
客户端我选择使用的是 rclone 这个命令行工具,可以很方便的配置对象存储,并提供了很多子命令用于管理对象。
最终,在网站上访问的图片均以切换到 R2 对象存储上了。
R2 用了,免费的 SSL 证书也用了,Workers 和 CDN 不也得用上?于是现在访问的静态资源也已经托管在 CloudFlare 上了,VPS 上具有相同的内容,但使用不同的域名,可以访问 https://blog.imxcai.com 。
新的评论系统
Hexo 没有自己的评论系统,需要集成第三方,有些是集成第三方服务,或者使用 GitHub,或者自建评论系统等等,这也体现出了 Hexo 具有非常丰富的生态。
我选择了自建评论系统,程序使用的 waline ,它可以非常容易的托管到其它的“赛博菩萨”上,例如,我托管在了 Vercel 上,它提供了计算和数据库服务,也省去了维护的任务。
新的发布方式
Hexo 没有传统动态程序的后台,所以不具备在线编写内容,于是默认只能在本地使用 MarkDown 软件来编写了。
我使用的非常主流的 Typora,选择它是因为它足够简单,且支持图床功能,还记得前面提到的 rclone 吗?我借助 AI 编写了一个脚本通过脚本上传粘贴的图片到 R2 并自动替换成 R2 的链接,上传图片变得非常简单和高效了。
好了,我终于可以不用操心 OOM 了,一切都成为了免维护的状态了,感谢”赛博菩萨“们!
评论· · · · · ·