無料で作れるラーニングシステム ~ Azure App ServiceとMoodle 3.10.1

2021/01/19

cloud 開発試行

Moodleでラーニングシステムを作るにあたり、AzureのApp Serviceを利用して作成しました。本記事は、その手順をまとめたものになります。

構築環境
  • Azure App Service:ランタイムスタック:PHP7.4
  • オペレーティングシステム:windows
  • SKU とサイズ:F1: Free(メモリ1GB)
  • DB:MySQL In App
  • Moodle:3.10.1 (Build: 20210118)

Azureの設定

App Serviceを作成

Azure上でApp ServiceでWebAPPを作成します。もちろんフリープラン。

WebAPPのMySQL IN Appを有効にします。

WebAPPの高度なツールより、MySQLの管理者アカウント情報を取得します。MYSQLCONNSTR_localdb.txt

W phpMyAdminより、MySQLのポート番号を取得します。MySQL IN Appの[管理タグ]を選択してください。起動しない場合はWebAPPのWebサイトを一度開いてください。

Config情報をまとめます。


$CFG->dbtype = 'mysqli';
$CFG->dblibrary = 'native';
$CFG->dbhost = '127.0.0.1';
$CFG->dbname = 'localdb';
$CFG->dbuser = 'azure';
$CFG->dbpass = 'xxxxxx';
$CFG->prefix = 'mdl_';
$CFG->dboptions = array (
'dbpersist' => 0,
'dbport' => 53147
'dbsocket' => '',
'dbcollation' => 'utf8mb4_general_ci',
);

Moodleを配置、インストール

Moodleアーカイブファイルをダウンロードします。downloadURLから、任意のバージョンのアイコンをクリックすると、ファイルのダウンロードが始まります。今回は[Moodle 3.10.1]を使用しました。

Moodle Download

WebAPPの高度なツールより、[D:\home\site\wwwroot\]を開き、moodleのWebアプリをzipファイルでアップロード(unzipオプション)します。[D:\home\site\wwwroot\moodle\]が作成されたら完了です。


Moodleの初期設定

https://xxxxxx.azurewebsites.net/moodle/install.phpにアクセスし、画面のガイダンス通りに入力します。

一度、「500 - The request timed out.」 になります。 どうやら、DBを構築するのに時間がかかるらしいです。20分ほど放置します。 ここで、リロードをすると、DBの構築が途中で止まり、最初からやりなおしになります。 完全に終わるのを確認したい場合は、phpMyAdminで、[localdb.mdl_config]テーブルの明細が433行以上になることを確認します

https://xxxxxx.azurewebsites.net/moodle/install.phpにアクセスし、画面のガイダンス通りに入力します。 ここでは、何度もタイムアウトが発生します。くじけずにインストール用のアドレスをリロードして、「Moodleデータベースを更新」します。 「注意が必要なプラグイン」の数が、「すべてのプラグイン」に到達すると次の画面に進みます。

続けて、画面のガイダンス通りに入力します。サイト管理者(admin)の設定をしていきます。

以下の画面がでたら、初期設定完了です。 Moodleからの定期的な連絡がいらない場合は、画面入力は飛ばしましょう


小テストの作成

ゲストによるアンケート回答を拒否します。 サイト管理→プラグイン→認証→認証管理→共通設定と辿っていくと設定項目がありますので、設定を変更します。

あとは、サイト管理→コース→新しいコースより新規アンケートを作成するだけです。ありがとございました。 となるところなんですが、以下のDB構成を起因とするエラーが発生しました

DB構成時のエラーを修正します。 MoodleQAサイトを見ると、よくあるエラー(capabilitiesに、sebmanage_seb_xxxが見つかりません)のようですが、Moodleの開発元は修正する気がないようです。 修正方法は再インストールするのが良いようですが、今回は直接テーブルを修正しました。不足している情報は、その時々によって違うみたいです。capabilitiesに必要な情報は、MoodleのWebサイトで確認する必要があります。

phpMyAdminより、以下のSQLを発行します。


INSERT INTO `mdl_capabilities` (`id`, `name`, `captype`, `contextlevel`, `component`, `riskbitmask`) VALUES (NULL, 'quizaccess/seb:manage_seb_allowspellchecking', 'write', '70', 'quizaccess_seb', '0');
INSERT INTO `mdl_capabilities` (`id`, `name`, `captype`, `contextlevel`, `component`, `riskbitmask`) VALUES (NULL, 'quizaccess/seb:manage_seb_activateurlfiltering', 'write', '70', 'quizaccess_seb', '0');
INSERT INTO `mdl_capabilities` (`id`, `name`, `captype`, `contextlevel`, `component`, `riskbitmask`) VALUES (NULL, 'quizaccess/seb:manage_seb_filterembeddedcontent', 'write', '70', 'quizaccess_seb', '0');
INSERT INTO `mdl_capabilities` (`id`, `name`, `captype`, `contextlevel`, `component`, `riskbitmask`) VALUES (NULL, 'quizaccess/seb:manage_seb_expressionsallowed', 'write', '70', 'quizaccess_seb', '0');
INSERT INTO `mdl_capabilities` (`id`, `name`, `captype`, `contextlevel`, `component`, `riskbitmask`) VALUES (NULL, 'quizaccess/seb:manage_seb_expressionsblocked', 'write', '70', 'quizaccess_seb', '0');
INSERT INTO `mdl_capabilities` (`id`, `name`, `captype`, `contextlevel`, `component`, `riskbitmask`) VALUES (NULL, 'quizaccess/seb:manage_seb_regexallowed', 'write', '70', 'quizaccess_seb', '0');
INSERT INTO `mdl_capabilities` (`id`, `name`, `captype`, `contextlevel`, `component`, `riskbitmask`) VALUES (NULL, 'quizaccess/seb:manage_seb_regexblocked', 'write', '70', 'quizaccess_seb', '0');

INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '1', 'quizaccess/seb:manage_seb_allowspellchecking', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '3', 'quizaccess/seb:manage_seb_allowspellchecking', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '1', 'quizaccess/seb:manage_seb_activateurlfiltering', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '3', 'quizaccess/seb:manage_seb_activateurlfiltering', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '1', 'quizaccess/seb:manage_seb_filterembeddedcontent', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '3', 'quizaccess/seb:manage_seb_filterembeddedcontent', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '1', 'quizaccess/seb:manage_seb_expressionsallowed', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '3', 'quizaccess/seb:manage_seb_expressionsallowed', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '1', 'quizaccess/seb:manage_seb_expressionsblocked', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '3', 'quizaccess/seb:manage_seb_expressionsblocked', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '1', 'quizaccess/seb:manage_seb_regexallowed', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '3', 'quizaccess/seb:manage_seb_regexallowed', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '1', 'quizaccess/seb:manage_seb_regexblocked', '1', '1610925408', '0')
INSERT INTO `mdl_role_capabilities` (`id`, `contextid`, `roleid`, `capability`, `permission`, `timemodified`, `modifierid`) VALUES (NULL, '1', '3', 'quizaccess/seb:manage_seb_regexblocked', '1', '1610925408', '0')

小テスト作成画面に戻って、エラーが発生しなければ完成です。

最後にテストユーザを追加します。   サイト管理→ユーザ→アカウント→新しいユーザを追加する、と辿っていくと、   設定項目がありますので、設定を変更します。

テストユーザでログインできれば、完成です。


おまけ Moodleのバージョンアップの方法

サイト管理→通知→利用可能な更新をチェックする、を実行すると ダウンロードサイトに辿り着くので、必要に応じてダウンロードします。 Upgradeの方法は、上記「Moodleの初期設定」と同様の手順です。