关于在腾讯云COS上搭建Hexo静态博客的一些记录

回到过去

大约是在两年前,在 GitHub Pages上搭建 Jekyll 静态博客的相关帖子就已经在各个技术平台上火了一把。不仅过程步骤相当简单,更重要的是不需要任何资金投入,就可以很方便得薅一把巨硬的羊毛。我当然也不例外,收藏了几个帖子就开始实操起来,还在 Go Daddy 上整了一个 .club 的域名,希望可以用不大的花费激励我坚持写作。

当然这对于当时拖延症晚期的我来说是不可能的。在简简单单写了四五篇文章之后,那个博客就彻底吃灰了,只剩下辛勤工作的 Go Daddy 年复一年地给我发邮件提醒我域名续期。

然而有位哲学家说得很好:

人类总是间歇性踌躇满志,持续性萎靡不振。

嗯。所以我又回来了。

轻车熟路

当还在搭建 Jekyll 博客的时候,我就多少听闻 Hexo 这个后来者的大名了。可惜那时 Hexo 生态不佳,虽然主题质量完爆 Jekyll ,但是相关的技术文档十分匮乏,对还是小白的我来说并不友好。没想到两年之后,我偶然间在酷安首页上刷到 Hexo 相关的帖子,再往百度上一瞧,发现真是“士别三日,当刮目相看”。于是乎,我又忆起了当年的雄心壮志,打开许久未见的 GitHub,一通轻车熟路的操作之后,发现出了不少的问题(?

首先,网上的中文帖子数量看起来多,实际上多少都是从几种版本衍化来的,不仅缺胳膊少腿,连代码的错误都一模一样;其次,官方的文档虽然质量上乘,却使用了 Travis CI 来部署 GitHub Pages ,步骤更加复杂不说,问题是 GitHub 只允许通过 master 分支来创建静态网页,而 Travis CI 使用的是 gh-pages 分支。(关于 deployer 插件的使用,也就是大部分网友的文档中使用的方法,官方文档有稍许的提及,全英文我也就忍了,但是单凭这几句话是远远不足以搞定部署的)

好不容易搞定了部署的问题,博客也真正地跑了起来,域名解析更是一气呵成全部搞定。对于主题的选择,一开始我用的是 Ayer 岛,界面很漂亮,功能也比较完善;但是在我见过 Next 之后,我就彻彻底底的叛变了。 Next 因为使用人数众多,迭代了足足七个大版本,虽然界面不如前者好看,极易和别人撞脸,但是功能海量且易用,相关改造文档更是层出不穷。当我陷入 Next 的 _config.xml 无法自拔时,一盆冷水再次淋上头来。

感觉我不会再快乐,快乐也和我没关系了,我用一下 GitHub 。

啧,怎么这么慢啊?

再快一点!

一开始想的是将博客部署到国内的 git 平台,例如 Coding 上。网上也有类似的文章,即双线部署,最后通过域名解析将境外的流量导向 GitHub ,境内的流量导向 Coding ,还可以借此搞定 SEO(搜索引擎优化)。理想总是很美好的,在一番操作之后,Coding 依然无法正常部署静态网页,于是我只好放弃。

天无绝人之路。腾讯云上的一篇帖子给了我灵感,通过 hexo-deployer-cos 插件将博客部署至腾讯云 COS 的存储桶里。虽然因为发布的时间较久远,操作的步骤有所变化,但并不难搞定,甚至比部署在 git 平台还要简单。测试效果也非常令人满意,不仅同步和访问的速度非常快(可以选定自己附近的机房,不快才怪),按照流量收费的策略也比直接租赁云主机要划算许多,更别提还有六个月的新手免费体验包(原作者使用的早期COS甚至额度内终身免费,我酸了)。

然而,到了绑定域名这一步,问题又来了。腾讯云的 COS 要求绑定的自定义域名需要备案,而域名备案需要一台云主机。问题是有了云主机为啥还要用 COS 呢?好在腾讯云的云主机可以销毁退款,算不得太亏。域名备案的过程十分顺利,初审、抽查、送审加上出号一共也就一周不到,本以为因为疫情的原因可能有所迟缓,结果下午送审第二天就出号了,效率相当高。

总而言之,这个博客就如你所见地诞生了。我也不知道这次能坚持多久,管他的呢。

后记

折腾这个博客的过程差不多也该结束了,之后基本上都是小修小补,弄点有趣的小插件,雕琢一些页面细节之类的。我个人倒蛮乐在其中,顺便学点CSS的基本操作。在这里作下记录。

  • 关于网易云音乐插件:简而言之是不算太难的尝试。网易云音乐愿意主动提供傻瓜式音乐插件确实值得赞赏,可惜我在歌单里试了一圈,基本都因为版权的原因无法使用。而等到实装之后,我发现它的作用并不算大,却对网页的加载速度造成了不小的影响,于是只好作罢。
  • 关于 CDN 加速:在腾讯云 COS 中绑定自定义域名时是默认开启了 CDN 加速的。本来这算得上是个很方便的功能,没想到 CDN 默认刷新缓存的机制导致新部署的网站难以得到及时的更新,而直接修改缓存过期时间也不够灵活。好在我寻觅不久就发现了这篇腾讯云的官方实例文档,利用云函数的 COS 调用功能就完美解决了这个问题。
  • 关于 GitHub 备份:虽说 COS 优秀的特性使我叛逃了 GitHub Pages,但是 GitHub 本身毫无置疑是用来备份和版本控制的一大利器。一开始我是用 git 命令行直接提交更改,无奈个人对于 git 的用法实在陌生,遇到报错也无从下手,再加上操作也并不算得简单,就想着有没有什么更快捷的方法。简单搜寻之后,发现了用于备份的 hexo 插件,备份源文件的同时甚至还能备份更改后的主题文件。当然由于插件久未更新(其实也没有什么更新的必要),使用途中报了两次错误(又是 git 的锅,真的头大),好在遍历 Issues 页面后,发现了症结所在,删除掉本地目录和主题目录下的 .git 文件夹即可。
  • 关于 Travis CI 持续部署:更新了一段时间的博客后,想到要是哪天换台电脑还要重新部署 node.js 和 Hexo 环境就觉得前途一片灰暗,而 Hexo 的部署方式也基本否决了多端写作的可能。好在这篇文章里就提到了用 Travis CI 进行云端部署的方法,按部就班操作以后也没遇到什么问题,大幅缩短了我更新博客的时间,妙哉。