アップグレード手順については以下に記載されています。

アップグレードのフローが以下になります。
これに従ってアップデートしますが、いくつかはまったポイントがありました。
環境
アップグレード前のバージョンは以下です。
- Rocket.Chat Version: 3.10.4
- NodeJS Version: 12.18.4 - x64
- MongoDB Version: 4.0.28
- MongoDB Engine: wiredTiger
- Platform: linux
Rocket.Chat も MongoDB も docker で動かしています。
Rocket.Chat 3.18.7 へのアップグレード
現在のバージョンが 3.10.4 なので、3系の最新の 3.18.7 にアップグレードしました。
すると、データベースバージョンのエラーが表示されたました。
+----------------------------------------------------------------------+
| |
| ERROR! SERVER STOPPED |
| |
| Your database migration failed: |
| Start date cannot be later than expire date |
| |
| Please make sure you are running the latest version and try again. |
| If the problem persists, please contact support. |
| |
| This Rocket.Chat version: 3.18.7 |
| Database locked at version: 213 |
| Database target version: 232 |
| |
| Commit: 660c9f5e896982932e1d02d35ddd6013c6b03e11 |
| Date: Mon May 30 19:06:57 2022 -0300 |
| Branch: HEAD |
| Tag: 3.18.7 |
| |
+----------------------------------------------------------------------+
対策は以下に書いてありました。
MongoDB のコンテナに入り、以下のコマンドを実行してバージョンを強制的に一つ上げます。
# mongo
> use rocketchat
> db.migrations.update({_id: 'control'},{$set:{locked:false,version:231}})
これで Rocket.Chat を再起動すれば OK でした。
Rocket.Chat 3.18.7 から 4.8.7 へのアップグレード
次に4系の最新の 4.8.7 にアップグレードしました。
これはすんなりいきました。
MongoDB のアップグレード
上記のフローによれば、Rocket.Chat を5系にアップグレードする前に、MongoDB を 5.0 以上までアップグレードする必要があります。
方法については以下に記載されています。
MongoDB 4.0 から 4.2 へのアップグレード
現在のバージョンが 4.0 なので、まずは 4.2 にアップグレードしました。 これはすんなりいきました。
MongoDB 4.2 から 4.4 へのアップグレード
次に 4.4 にアップグレードしたところ、以下のようなエラーとなりました。
{"t":{"$date":"2023-10-13T00:38:13.842+00:00"},"s":"W", "c":"STORAGE", "id":22347, "ctx":"initandlisten","msg":"Failed to start up WiredTiger under any compatibility version. This may be due to an unsupported upgrade or downgrade."}
{"t":{"$date":"2023-10-13T00:38:13.842+00:00"},"s":"F", "c":"STORAGE", "id":28595, "ctx":"initandlisten","msg":"Terminating.","attr":{"reason":"95: Operation not supported"}}
{"t":{"$date":"2023-10-13T00:38:13.842+00:00"},"s":"F", "c":"-", "id":23091, "ctx":"initandlisten","msg":"Fatal assertion","attr":{"msgid":28595,"file":"src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp","line":958}}
{"t":{"$date":"2023-10-13T00:38:13.843+00:00"},"s":"F", "c":"-", "id":23092, "ctx":"initandlisten","msg":"\n\n***aborting after fassert() failure\n\n"}
MongoDB を 4.2 に戻してコンテナに入り、以下のコマンドを実行します。
# mongo
> db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )
これで Rocket.Chat を再起動すれば OK でした。
MongoDB 4.4 から 5.0 へのアップグレード
次に 5.0 にアップグレードしたところ、同様のエラーとなりました。
MongoDB を 4.4 に戻してコンテナに入り、以下のコマンドを実行します。
# mongo
> db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
これで Rocket.Chat を再起動すれば OK でした。
Rocket.Chat 4.8.7 から 5.4.10 へのアップグレード
MongoDB を 5.0 までアップグレードしたので、次は Rocket.Chat を5系の最新の 5.4.10 にアップグレードしました。
すると以下のエラーが表示されました。
/app/bundle/programs/server/node_modules/fibers/future.js:313
throw(ex);
^
MongoServerSelectionError: connect ECONNREFUSED 127.0.0.1:27017
at Timeout._onTimeout (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/sdam/topology.js:312:38)
at listOnTimeout (internal/timers.js:557:17)
at processTimers (internal/timers.js:500:7) {
reason: TopologyDescription {
type: 'ReplicaSetNoPrimary',
servers: Map(1) {
'localhost:27017' => ServerDescription {
_hostAddress: HostAddress { isIPv6: false, host: 'localhost', port: 27017 },
address: 'localhost:27017',
type: 'Unknown',
hosts: [],
passives: [],
arbiters: [],
tags: {},
minWireVersion: 0,
maxWireVersion: 0,
roundTripTime: -1,
lastUpdateTime: 17764280,
lastWriteDate: 0,
error: MongoNetworkError: connect ECONNREFUSED 127.0.0.1:27017
at connectionFailureError (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/cmap/connect.js:381:20)
at Socket.<anonymous> (/app/bundle/programs/server/npm/node_modules/meteor/npm-mongo/node_modules/mongodb/lib/cmap/connect.js:301:22)
at Object.onceWrapper (events.js:520:26)
at Socket.emit (events.js:400:28)
at emitErrorNT (internal/streams/destroy.js:106:8)
at emitErrorCloseNT (internal/streams/destroy.js:74:3)
at processTicksAndRejections (internal/process/task_queues.js:82:21)
}
},
stale: false,
compatible: true,
heartbeatFrequencyMS: 10000,
localThresholdMS: 15,
setName: 'rs0',
maxSetVersion: 2,
maxElectionId: ObjectId {
[Symbol(id)]: Buffer(12) [Uint8Array] [
127, 255, 255, 255, 0,
0, 0, 0, 0, 0,
0, 10
]
},
commonWireVersion: 13,
logicalSessionTimeoutMinutes: undefined
}
}
解決策は以下にありました。
環境変数 MONGO_URL
MONGO_OPLOG_URL
に directConnection=true
を追加します。
例えば、MONGO_URL=mongodb://mongo/rocketchat?replicaSet=rs0&directConnection=true
のような感じです。
これで Rocket.Chat を再起動すれば OK でした。
Rocket.Chat を最新にアップデート
最後に、Rocket.Chat を現在の最新バージョンである 6.3.9 にアップグレードしました。 以上で完了です。