Docker 入門
Moodle サイトを構築する
インストール後の設定を行う
Moodle のインストールが終わったので,初期設定としていくつかの設定を行っていきます.
ロケーション(タイムゾーンと国)の設定
Moodle に管理者 (ユーザID: admin) でログインした後,次の図のとおり「サイト管理」→「一般」→「ロケーション」→「ロケーション設定」を開きます.そこで,デフォルトタイムゾーンを「アジア/東京」に変更し,デフォルトの国には「日本」を選びます.最後に「設定を保存する」ボタンを押します.
Composer install の実行
次に「サイト管理」→「サーバ」→「動作環境」を開きます.すでに,コンテナ構築時に docker-compose.yml や php/Dockerfile には Moodle の動作に最低限必要な設定がなされているので,ステータスはほとんどが「OK」になっているはずです.
しかしながら,同じページを最下部までスクロールすると,「Composer vendoer derectory not found」という「チェック」のステータスが表示されています.
この問題を解決するには,次のとおり,コンテナにログインした後,コンテナ内で composer install コマンドを実行して,コンテナ内に必要なファイルをインストールします.なお,moodle_apaeh は docker-compose.yml で定義されたサービス名であることに注意してください.
% docker compose exec -it moodle_apache /bin/bash ⏎ root@f4e4bc2ba267:/var/www/html# composer install --no-dev --classmap-authoritative ⏎ Installing dependencies from lock file Verifying lock file contents can be installed on current platform. Nothing to install, update or remove Generating optimized autoload files root@c44633676a5d:/var/www/html# exit ⏎ %
コマンド実行後に同じページを再読み込みすると,「チェック」となっていた項目がひとつなくなりました.なお,「site note https」という「チェック」項目はローカルのテスト環境であれば無視して問題ありません.本番環境では https を利用すべきです.
アドホックタスクの実行
「サイト管理」→「サーバ」→「タスク」→「アドホックタスク」を開きます.すると,次の図のように「次の実行」が「早急に」となっているタスクが複数あります.
「サイト管理」→「サーバ」→「タスク」→「タスクログ」を開くと,次のとおり,まだ実行されたタスクがないことも確認できました.
アドホックタスクが実行されなければいくつかの問題が起こります.例えば,教員ユーザがコースに小テストを作成し,その小テストに問題を追加しようとしたときにエラーになります.
アドホックタスク「\mod_qbank\task\transfer_question_categories」および「\mod_qbank\task\transfer_questions」はまだ完了していないか、失敗しています。事前に異なるコンテクストで作成された問題はまだコース共有問題バンクに転送されていない可能性があります。これらのタスクが完了するまで、問題は共有または管理できません。
これはここで説明されている「Cron設定」がまだ完了していないためです.ローカルのテスト環境であれば,次のとおり cron.php を手動実行してアドホックタスクを進めると良いでしょう.なお,この実行には2〜3分間の処理時間が必要です.残りの時間(秒数)が表示されるので気長に待ってください.
% docker compose exec -it moodle_apache /bin/bash ⏎ root@185fb4200a34:/var/www/html# php admin/cli/cron.php ⏎ ... Cron run completed correctly Cron completed at 10:30:42 in 0.01165 seconds. Memory used: 55.4 MB. root@185fb4200a34:/var/www/html# exit ⏎ exit %
上の作業が終われば,「次の実行」が「早急に」となっていたタスクがなくなりました.これで小テストに問題が追加できるようになります.開発環境ではときどきアドホックタスクを確認して,「早急に」というタスクがあれば上のコマンドを実行する程度で良いでしょう.また実行しなければ,「小テストや課題の期限の通知,小テストや課題採点後のフィードバック通知」などが送信されません.実際に「学生が課題に提出する」,「教員が課題を採点し,学生に結果を通知する」という作業を行っても学生には通知が届かないことを確認してください.その後,cron.php を手動実行したタイミングで学生に通知が届くことを確認するとこの処理の意味合いを理解できることでしょう.
一方で,本番環境に向けては恒久的な対応も必要です.具体的には Docker のホスト側で crontab -e コマンドのあと,次の cron 設定を行います.これによって毎分タスクが実行されるようになります.
* * * * * docker exec moodle_apache php /var/www/html/moodle/admin/cli/cron.php >/dev/null 2>&1
なお,本番環境で毎分実行される cron.php によって行われる主な処理は次のとおりです.
- スケジュールタスク(Scheduled tasks)の実行
-
- メール通知(フォーラム投稿,課題期限通知)
- コースバックアップ
- ログのローテーション
- キャッシュのクリア
- 外部サービスとの同期(LTI、認証など)
- アドホックタスク(Ad-hoc tasks)の実行
-
- 問題バンク移行
- コース削除や復元の後処理
- 大量登録やCSVアップロード後の非同期処理
- プラグイン固有のタスク
-
- 各プラグインが登録した処理
- キューの処理
-
- メッセージ送信(メール,通知)
- イベントログの処理
サイトホーム設定
この後の作業で,管理者がコース(講義科目)を追加します.標準の設定ではログイン前のユーザにコースの一覧が表示されてしまいます.また,ログイン後にも所属していないコース(つまり,履修していない講義科目)が表示されてしまいます.ここではサイトホーム設定でコースの一覧が表示されないようにします.
「サイト管理」→「一般」→「サイトホーム設定」を開きます.「サイトホーム」と「ログイン時のサイトホームアイテム」に「コース一覧」が設定されています.
次のとおり,いずれも「なし」(あるいは,その他の設定)に変更すると良いでしょう.最後にページ最下部にある「変更を保存する」ボタンを忘れずに押しておきます.








