更新 crowi (从 1.6.2 升级至 1.7.0)
背景 – 背景信息
我们在所属的团队中,将Crowi服务器作为内部Wiki使用。
我之前一直在使用v1.6.2版本,但是最近去GitHub的仓库查看时发现已经发布了1.7.0版本。
由于1.6.2版的MathJax存在一些小问题(据说已在1.6.3版得到修复),为了抓住这个好机会,我决定进行升级。以下是升级的日志记录。
只需要一個選項,請將以下句子翻譯成中文:
「我所做的事情」
-
- 备份
-
- 更新 Node.js
-
- 更新 Elasticsearch
- 更新 Crowi
Redis和MongoDB未进行任何更改。我们从一开始就没有安装与外部服务的集成。
環境是Ubuntu 16.04,x86_64。我的知識是自學而來,雖然在摧毀了許多服務器的過程中學到了很多,但我甚至沒有讀過正式的文件,所以可能包含了一些錯誤。由於這是內部使用,所以有些雜亂,但希望能作為一個參考例子。
备份
无论如何,首先要备份。这样,即使不小心使服务器爆炸四溅,也可以通过从头开始重建而避免事故。这是使用之前将内容移动到另一台机器时采用的相同方法。
Crowi的内容由MongoDB管理。最简单的备份步骤是只需简单地将所有文件复制一份。这样就能避免使用任何思考。如果文件容量非常大,使用mongodump可以减小文件大小(虽然执行时间会变长)。由于这次备份的文件容量不是特别大,所以不需要担心。
这些步骤是根据这篇文章(http://gihyo.jp/dev/serial/01/mongodb/0011)作为参考所列出的。
无论如何,为了防止写入,我们将从mongo shell获取锁定。我认为可以简单地停止服务。
> use admin
> db.fsyncLock()
然后,只需复制文件。
$ cp -rp /var/lib/mongodb ./crowi-mongodb-bak-180921
$ tar zcvf crowi-mongodb-bak-180921.tar.gz ./crowi-mongodb-bak-180921
$ scp crowi-mongodb-bak-180921.tar.gz somewhere:.
简单。
还有,Crowi本地上传的文件存储在/path/to/crowi/public/uploads/中,因此也需要备份。只需简单地将文件复制并保存即可,至少在1.6版本之前是这样的。
最终服务器没有爆炸,所以这个备份文件仍然未被使用,静静地躺在那里。
升级 node.js 版本从 6.x 到 8.x。
在Crowi 1.7.0中,Node.js的版本已经升级。
目前,Crowi服务器仅为Crowi服务而设立,因此我们不感到有必要更改nodejs版本,也不使用nvm等工具,而是直接通过apt进行安装。所以,我们将参考以下文章,从apt进行升级。
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs
$ node -v
v8.12.0
这件事情顺利地解决了,没有任何问题。
弹性搜索5.x升级到6.x
接下来要升级Elasticsearch的版本。我们从官方网站下载deb文件。
因为感觉有点在意,所以停止Elasticsearch(由于已停止Crowi,没有问题),将deb文件传递给dpkg并进行升级。
# systemctl stop elasticsearch.service
# dpkg -i elasticsearch-6.4.1.deb
# apt-get update
# apt-get upgrade
之后,必须更新日语形态素解析软件包“kuromoji”。如果忘记更新,Elasticsearch将会因版本不匹配而异常终止(1次失败)。
需要更新时,只需安装(install),但会提示已存在,所以需要先删除,然后重新安装。
# /usr/share/elasticsearch/bin/elasticsearch-plugin remove analysis-kuromoji
# /usr/share/elasticsearch/bin/elasticsearch-plugin install analysis-kuromoji
一旦启动,你可以查看Elasticsearch端口,会收到一条包含版本号的JSON,以确认是否已更新。
# systemctl start elasticsearch.service
# systemctl status elasticsearch.service
# curl localhost:9200
{
...
"version" : {
"number" : "6.4.1",
...
},
...
}
忘记Elasticsearch自己的插件管理器存在是一个坑。
crowi 1.6.2更新至1.7.0。
我要攻陷本丸。
由于我已经克隆了Crowi的存储库,所以首先我们要切换到v1.7.0的标签。顺便提一下,由于master分支不稳定,不建议使用。
因为当时我在1.6.2分支上按照以下相同的步骤进行了切换,所以回到了master分支并进行了一次pull,但是现在有一个怀疑,只用fetch就可以了吗?
$ git checkout master
$ git pull origin master
$ git fetch origin
$ git checkout -b 1.7.0 v1.7.0
然后执行npm install。如果忘记的话,Crowi将无法启动(一次失败)。此外,如果没有使用–unsafe-perm选项,将会出错(一次失败)。
# npm install -g --unsafe-perm
既然运行时的设置和命令没有更改,只需要重新启动即可恢复正常。
最后,由于Elasticsearch版本升级的原因,需要重新构建搜索索引。Crowi的管理员可以通过访问Crowi的管理页面来执行此操作。
所以,请点击“Index Build”按钮并结束。辛苦了。
再启动后的几分钟内,Crowi页面的跳转非常缓慢,让我略感紧张,但过了一会儿就变得流畅了。