概要と前提
docker-composeで設定したGrowiを、ちょっとした外部接続なし環境でdocker saveしたイメージベースで運用している。
既存Growiは4.5.8だが、ページツリーのある5.1系にアップグレードしたいと思った。
データアーカイブで中味を書き出して、インポートすればすぐなのでは?と気楽に考えていたが、ドキュメントをみると作成したアーカイブは同一バージョン間でしか利用できない。
GrowiのSlackで聞いてみたが、直接Growi上げては?との回答だったので、どうすればいいのかな~と思ったり、単にイメージを差し替えても動かないのでどうしようかと思った。
結論
MongoDBのアップデートがキモだった。
手順
当初docker-composeで動いていたのはGrowi4.5.8+mongoDB3.6。
GrowiのDockerfileで新しいバージョンに書き換えて実行したが、Growi5.1はmongoDB4.4以上を求めておりエラーになる。
Growiのアップグレードガイドばかり見ていたが、ふと目を下すとmongoDBのアップグレードについて記載があった。
関連してググると、下記Wikiをみつけた。
https://dev.growi.org/5f6afa883a72dc0048e54ab7
結果以下のやり方でアップデートできた。
- 初期docker-compose.ymlの状態(Growiは4系のまま)で、mongoDB 3.6→4.0にアップデート(イメージ差し替え)
- docker-compose upしている状態で
docker-compose exec mongo bash
実行 - mongoDBの機能互換バージョン(FCV)を確認:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
- mongoDBの機能互換バージョンを次のバージョンに書き換え:
db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )
> docker-compose exec mongo bash
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{ "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 }
> db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )
3.6から一度に4.4まではアップグレードできない。
docker-compose.ymlのmongdbを 3.6 から 4.0 に書き換えて FCV を同4.0に。
いったんコンテナを停止し、docker-composeのmongodbを再び4.0から4.2に書き換え、設定。
繰り返して 3.6 → 4.0 → 4.2 → 4.4 と順番に作業することで、最終的にmongodb:4.4としていてもコンテナが再起動を繰り返すことがなくなった。
mongodbを4.4まであげられたら、Dockerfileのgrowiを4.5.8→5.1.3に書き換えて docker-compose up 、これでようやく5.1系統にアップデート終了。
あとはGrowiの上からメンテナンスモードに落として、V5形式に変換を行う。