(2025.4.4 記)
この前UbuntuのOSバージョンを、20.04から22.04へアップグレードしたら、Moodleが使えなくなる現象が起きました。
原因はPHPが7系から8系へ勝手にバージョンアップされる事でした。
よく調べると、自分が現在使っているバージョンがPHP8系に対応していませんでした。
というわけで、以下、Moodleのバージョンアップ作業をやってみた忘備録としてまとめた記事になります。
色々試行錯誤して失敗例も載せてあるので、参考になれば幸いです。
所要時間:60分(うまくいけば30分もかからない)
0.実行環境
■サーバ環境
・さくらVPS(メモリ:2GB、CPU:3コア、SSD:200GB)
・LinuxOS:Ubuntu22.04LTS→Ubuntu24.04LTS
・Apache:2.4
・MySQL:5.7
・PHP:7.4、8.1
1.現状の確認
①現在利用しているバージョンの確認
現在のバージョンは、Moodleフォルダ直下の「version.php」の中身を見ると判ります。↓

バージョンの見方としては、最初の2桁が系統、末尾がバージョンになります。
上記の場合は、3.8系のバージョン7という事がわかります。
Moodleの公式サイトからも確認できます。↓

Moodleのページから確認する場合は、[サイト管理]>[サーバ]>[動作環境]で確認できます。↓

MoodleとPHPのバージョン対応表がこちらになります。(Moodleのサポートサイトが開きます。)↓

ということで、Moodleのバージョン4.1.2(4.1系のバージョン2以降)以上にアップグレードすればいいということがわかります。
②利用可能なバージョンの確認
次に、[サイト管理]>[通知]で「利用可能な更新をチェックする」と、アップグレード可能なバージョン一覧が表示されます。↓

上記の条件に当てはまる最新版の安定版が4.1.17になるので、最終的にこれをダウンロード(ZIP)すればOKです。
※私がバージョンアップした際、現行バージョンから系統を1つずつ上げる必要がありました。私の場合3.8系ですので、3.9系~4.1系の各バージョンをダウンロードする必要があります。私は、各系統の最新バージョンを利用して1つずつ系統を上げていきました。
※今回は、PHP7.4とPHP8.1の共存環境となるので、どちらでも動かせるようにしたいという意向です。自分の環境に合わせて、最善なバージョンを選択してください。
操作しているOSのダウンロードフォルダにダウンロードされるので、その後の作業内容は次項になります。
2.Moodleアップデート
①メンテナンスモード移行
まず、現行のMoodleをメンテナンスモード(ユーザがログインできない状況)にします。(作業中に誰も利用しないことがわかっており、必要が無ければこれはスキップしても大丈夫です。)
[サイト管理]>[サーバ]>[メンテナンスモード] → メンテナンスモードを「Yes」 → 変更を保存する ↓

これでMoodleへのアクセスを遮断できます。(戻し方は後述)↓

※アドミニストレーター権限でのみ、サイト内が閲覧できる状況です
②新しいMoodleデータの配置
次に、項番1手順②でダウンロードしたZIPファイルを、moodleフォルダと同じディレクトリに移動します。
例えば私の場合、「/var/www/html/moodle」という階層になるので、この「html」ディレクトリに移動します。
WindowsからはSFTP接続で転送したり、「webmin」といったサーバ管理ツールがあればそこからアップロードする方法が簡単かと思います。
データ数が多く、転送やアップロードに時間がかかるため、ZIPファイルのままサーバに移動することを勧めます。
サーバ環境内であれば、次のコマンドで移動できます。↓
sudo mv [移動対象ファイルの絶対パス] [移動先ディレクトリの絶対パス]
例えば私の例だと、このようになります。↓
sudo mv /home/ubuntu/Downloads/moodle.zip /var/www/html/
次に、作業ディレクトリに移動します。↓
cd /var/www/html/
次に、現在のMoodleフォルダをリネームします。下記例では末尾に「_old」と名前を付けていますが、連続でバージョンアップする際は「_3.8.7」等とバージョンネームにすると判りやすいかなと思います。(ZIPフォルダを解凍すると、「moodle」フォルダとして解凍され上書きされてしまうため。)↓
sudo mv moodle moodle_old
次に、次のコマンドでZIPファイルを解凍します。↓
sudo unzip moodle.zip
大量にコマンドが流れて、最後に主力結果が出てればOKです。↓

一旦、解凍が終わったら、「ls」コマンドでディレクトリの確認を行います。↓

次に、「moodle_old」ディレクトリ直下にある「config.php」ファイルを、「moodle」ディレクトリの直下にコピーします。↓
sudo cp moodle_old/config.php moodle/config.php
「cd /moodle」→「ls」コマンドで「config.php」の存在が確認できればOKです。
③DB接続設定の確認、修正
手順②で設置した「config.php」の中身を確認します。
Moodle3.8系までは、下図のように「utf8_general_ci」という設定でもセットアップができていました。(正確には、「utfmb4にしてね」という注意文が出るだけ。)↓

3.9系以降、この設定を、「utf8mb4_unicode_ci」に変更しないと、次の手順④のようにエラーが出るようになりますので、これを変更してあげます。↓

基本的にここまで行えばアップグレードでエラーは出ません。
ただ、DBの方も一致させておかないと気持ち悪いので、修正します。
下図は、「phpMyAdmin」でmoodleのDBのテーブル一覧を見た様子です。↓

照合順序が「utf8mb4_unicode_ci」になっていないので、これを修正してあげます。
「phpMyAdmin」からは、[操作]タブからテーブルを一律で変更ができます。↓

[実行]ボタンで反映させます。↓

照合順序の変更が確認できたかと思います。
これでDB絡みの設定は終わりです。
④Moodleアップデート(失敗例)
次に、もう一度Moodleのサイトトップページへブラウザからアクセスします(https://サイト名/moodle/admin)。
次のような画面になるので、「続ける」を押下しアップデートを進めていきます。

必要なモジュールのインストール状況画面が出てきます。
ステータスが全て問題なければ次に進めますが、私の場合次のようなエラー(赤チェック)が出てますね・・・↓

どうやら私の場合、一回Moodleのバージョンを3.9系に上げてからじゃないとダメっぽいです。一気にバージョンを上げられないようですね・・・(どうやら系統を1つずつ上げないといけない模様)
あと、データベースのキャラクタセットがUnicodeになってないって怒られていますね。こちらは後程対処するとします。(上記手順③のやり方で解消します。)
気を取り直して、3.9系~4.0系をインストールし直します。
ディレクトリ名を変えているので、一旦現在の「moodle」ディレクトリを「moodle_41」等に、「moodle_old」ディレクトリを「moodle」に変更すると、元の環境に戻せます。
メンテナンスモードになっていますが、項番3の手順を参考にアドミニストレーター権限のログインを行うと、通常通りMoodleサイトにログインすることができるので、項番1手順②からここまでの手順を繰り返します。
⑤Moodleアップデート(成功例)
4.1系でも手順は同じなので、3.8系→3.9系へのアップデートで説明します。
下図は、手順③でDB接続情報を変更し、エラーを解消した状態になります。↓

このように、エラーが消えれば、[続ける]ボタンからアップグレードが進められます。
次に、プラグインチェックが行われますが、これはMoodleを独自カスタマイズされている場合に注意が必要になります。↓
例えばphpファイルを追加したり、既存のphpファイルを修正してカスタマイズしたりしていると、プラグインの更新時に上書きされて消される可能性があることを指しています。

私の環境ではそのレベルでカスタマイズは入れていないので、[Moodleデータベースを更新する]ボタンで更新を続行します。
アップグレードが始まり、エラーが無ければ下図のような画面で「続ける」ボタンが出るはずです。↓


[続ける]ボタンを押下し、元のメンテナンス画面に戻ればアップグレード完了となります。↓

このままアドミニストレーター権限でログインし、一通りコース等を確認して問題が無ければ完了です。
アップグレード後にアドミニストレーターで初回ログインした時、新しい機能や設定が追加された場合に設定値をどうするかという確認画面が出ます。↓

Moodleが推奨しているデフォルト値なので、基本的に何も変更せず[変更を保存する]を選択し、必要に応じて後で変更すると良いと思います。
動作確認後、次のアップグレードがあれば、手順②から繰返し実行していけばOKです。
上げたいバージョンまでアップグレードが完了したら、次の項番で説明する方法でメンテナンスモードを解除すれば、元通りサービスが利用可能な状態となります。
⑥余談:MoodleのUIについて
余談ですが、4.0系以上からUIがガラッと今風に変わるみたいですね。
いくつかスクショを置いておきます。




3.メンテナンスモード解除
メンテナンスモードのページのURLに対し、「https://[IPorDNS]/moodle/admin」と、末尾に「admin」を入力します。
すると、アドミニストレーター権限を持つユーザだけがログインできるログインページが開きます。(Moodle3.0系のUI)↓


ここからログインすれば、後はいつものページが開くので、[サイト管理]>[サーバ]>[メンテナンスモード] → メンテナンスモードを「No」 → 変更を保存する で元のページに戻れます。
4.最後に
Moodleはフリーツールなので、全て自己解決しなければならないし、情報が少ないのも難点です。
このようなオープンソフトのツールは、個人個人のトライエラーが案外ヒントになると思っています。
困っている人に少しでも寄与できたら幸いです。
▼オススメ教本▼

コメント