升级到Ghost 4

早在3月21日,Ghost就发布了4.0版本,但彼时我正忙着准备考研复试,所以完全没有维护Blog了,网站一度因为服务器内存爆炸而瘫痪,我甚至一周之后才发现……

幸好没有造成什么影响,因为平日里,我的小站也是我的“世外桃源”,只有我自己一个人在频繁访问。其余的访客,有偶尔经过的零星网友,更多的是搜索引擎爬虫机器人的熟悉身影。

端午假期终于闲了下来,我的程序员之魂又在熊熊燃烧了,想要折腾一下blog,升级到最新版。

先说结论

经过一系列折腾,推荐大家升级时参考下面的步骤:

  1. 检查服务器配置
  2. 检查node版本是否支持,如不支持则先升级node
  3. 将ghost-cli升级到最新版
  4. 按照教程步骤升级Ghost

1 看上去很简单,但……

翻了翻Ghost的官网,自己搭建的Ghost系统可以轻松的通过ghost-cli这个工具来升级,看上去真的很容易呢!

先来按照教程操作一波,备份一下,然后先要升级到当前大版本的最新版。我当前的Ghost版本是3.13,也就是说要升级到Ghost v3版本的最新版,即3.42.4:

ghost update v3

什么,竟然提示我内存不足?

ghost update v3 --force

什么,竟然加了force也不能无视内存不足的警告吗?

无奈只好搜索解决方案,发现可以通过--no-mem-check的flag来跳过内存检查。当然,内存不够的情况下,升级过程中,服务器又炸了好几次,果然这个推荐配置还是有他的道理的,哈哈哈。

2 无法前进,也无法后退

终于升级到了最新的v3版本,保险起见,我们先启动一下ghost,保证升级没有出现什么问题。但是,问题恰恰出现了!!无论重启多少次,我的Ghost博客都无法正常运行!!

虽然不知道问题出在哪,但我丝毫不慌,因为我有备份。并且文档里面说了,随时都可以使用ghost update --rollback来进行回滚,就可以回到之前的版本。升级不成功,之前的版本就继续用也很不错。

满怀信心在控制台输入这一行神奇的代码,令我意想不到的事情再次发生了,竟然数据库迁移失败了,无法回滚。

ghost update v3 --force强制升级一次,显示升级成功,但还是无法启动,也无法回滚。

气氛开始有些紧张了起来,这次升级不成功,我不敢贸然继续升级v4版本,但同时也无法退回到之前的版本,到底该怎么办呢?

3 胡乱尝试

我决定死马当活马医,直接升级v4版本。毕竟,我有备份,最坏的结果就是升级失败,直接卸载Ghost重装,然后将之前的文章数据导入进来。

ghost update

想不到,还没有进入到升级的步骤,在兼容性检查这一步就提示我Node版本太低,Ghost 4.7不支持我当前系统安装的node12。

我开始大胆猜想,之前升级后无法运行,会不会也是因为node的版本太低。于是我将node版本升级到了14.17。

升级node之后,先不急着继续升级Ghost,先试试能不能把网站跑起来——终于成功了!虽然,屏幕上显示了一条我不太看得懂的提示信息:

Warning: Ghost is running with node v12.16.1.
Your current node version is v14.17.0.
:heavy_check_mark: Checking systemd node version - found v12.16.1

但是,总算说明了第一轮的升级其实是成功的,只不过升级之后的Ghost对低版本node的支持性没有那么好了。

4 一切都过时了

终于可以进行最后一步了,至少我是这么希望的。输入ghost update,看着Ghost更新的进度条一点点前进,觉得马上就要大功告成了!

升级完毕,ghost start,竟然还是启动不了,难道这次升级注定要失败,一定要我手动重装吗?

错误提示竟然是之前出现过的:

Warning: Ghost is running with node v12.16.1.
Your current node version is v14.17.0.
:heavy_check_mark: Checking systemd node version - found v12.16.1

这实在是太令人费解了,因为我明明将node升级到了14,但是为什么Ghost却一定要用node12运行呢?什么是systemd node version啊,难道不应该都是一样的吗?

我苦思冥想,把ghost、systemd、node三个关键词放在一起疯狂搜索,但似乎没有人遇到过这样的问题。等等,是ghost-cli这个工具在配置systemd的unit文件,也是ghost-cli这个工具可以方便地完成Ghost的版本更新……会不会是我的ghost-cli版本太旧了?

尝试输入npm install -g ghost-cli@latest

果然如此,我的ghost-cli是在开始搭建网站时安装的,已经过去一年多了,不知道中间更新了多少个版本。

更新Ghost Cli之后,再次强制更新Ghost到版本4.7,这次,终于能够成功运行了。

5 “后遗症”

更新过后的系统还是很好看的,有一种新鲜感。网站对外的部分没有什么变化,但是右上角多了一个订阅按钮,看来是新版Ghost更新的邮件订阅功能。后台的样式改变了很多,现在新潮了一些,并且有了会员功能,但是依然没有原生的评论系统,需要依赖第三方。

我原先自己搭建的评论系统,由于升级了服务器的node版本,现在无法使用了。这算是这次升级带来一个小小的后遗症,不过同样影响不大,因为又有什么人会来这里呢?

有机会我还是会重新实现一下评论功能的,但是已经成功转行的我,不会自己重新开发了,也许真的会用成熟的第三方工具。目前再考察Valine,无后端的理念还是挺合我的胃口的。

6 总结

总的来说,这次升级这么曲折,主要还是操作顺序的问题。我觉得,合理的升级顺序应该是:

  1. 检查服务器配置
  2. 检查node版本是否支持,如不支持则先升级node
  3. 将ghost-cli升级到最新版
  4. 按照教程步骤升级Ghost

不知是否是我的错觉,Ghost在博客系统里已经逐渐走向衰落了,相关的文章都是几年前的,似乎已经没有当初那种风靡大街小巷的感觉了,反倒是老牌的WordPress历久弥新,依然能打。

无论如何,希望这篇文章也许能够帮到那么一两个人,让依然喜欢Ghost的朋友们在升级过程中少走弯路。