プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2023/10/11

Rocket.Chat のアップグレード手順

update2023/10/13 event_note2023/10/11 4:52

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

アップグレードのフローが以下になります。

これに従ってアップデートしますが、いくつかはまったポイントがありました。

環境

アップグレード前のバージョンは以下です。

  • 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_URLdirectConnection=true を追加します。
例えば、MONGO_URL=mongodb://mongo/rocketchat?replicaSet=rs0&directConnection=true のような感じです。

これで Rocket.Chat を再起動すれば OK でした。

Rocket.Chat を最新にアップデート

最後に、Rocket.Chat を現在の最新バージョンである 6.3.9 にアップグレードしました。 以上で完了です。

参考 URL