Moodleのインストールと運用

北里大学高等教育開発センター 福田 宏

(2009.10.31 - 2022.2.12)

学習支援ソフトMoodle(Moodle 3.11)のインストール,プラグイン追加(アンケート)と,不具合修正。 Moodle: オープンソースのコース管理システム (CMS - Course Management System),学習管理システム (LMS - Learning Management System),仮想学習環境 (VLE - Virtual Learning Environment).

(環境) CentOS Stream 8, CentOS 8 (SElinux無効)

以前のバージョンのインストール方法 Moodle 3.8 2.7-3.7 2.6 1.9

インストール

(以下プロンプトが # ならroot,$ なら普通のユーザー)

Apache

apacheをインストールして,httpd.conf のDirectoryIndex に index.php を追加し,その下の行にAcceptPathInfo on を追加.

# yum install httpd

# vi /etc/httpd/conf/httpd.conf


<IfModule dir_module>

# DirectoryIndex index.html

DirectoryIndex index.php index.html

</IfModule>

#

AcceptPathInfo on

#

また,フォルダ内ファイルがブラウザで表示されないように(セキュリティ向上のため),httpd.conf内のIndexesを削除する。

サービスとして起動

# systemctl start httpd

# systemctl enable httpd

ファイアウォール

httpポートが開いてなければ(初期状態ではSSHとdhcpv6-clientのみ開いていている),以下のコマンドでhttpポートを開く(1行目:今開る,2行目:再起動後も開ける,3行目:確認)。

# firewall-cmd --add-service=http --zone=public

# firewall-cmd --add-service=http --zone=public --permanent

# firewall-cmd --list-services

TLS/SSL(任意)

howto-https の手順でTLS/SSLを設定,httpdを再起動して,httpポートは閉じhttpsポートをあける。

# systemctl restart httpd


# firewall-cmd --remove-service=http --zone=public

# firewall-cmd --remove-service=http --zone=public --permanent


# firewall-cmd --add-service=https --zone=public

# firewall-cmd --add-service=https --zone=public --permanent


# firewall-cmd --list-services

TLS/SSLを使わない場合は,以下の手順のhttpsをhttpとする。もし,Moodleをインストールした後でTLS/SSL化したい場合は,/var/www/html/moodle/のconfig.phpの $CFG->wwwroot = 'http://...'; のhttpをhttpsに変えればよい。

MySQL (MariaDB)

MySQLをインストール,

# yum install mariadb

# yum install mariadb-server

注:MariaDBとはMySQLの開発者が開発しているMySQLのブランチ。MySQLと同じコマンドが使え,同等以上の性能。"MariaDB is a MySQL fork that is developed and maintained by original MySQL developers organised under MariaDB Foundation."

サービスとして動かし,

# systemctl start mariadb

# systemctl enable mariadb

データベース作成(データベース名 moodle,ユーザ名 moodleuser,パスワード ???

# mysql -u root

MariaDB [(none)]> show databases;

MariaDB [(none)]> CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

MariaDB [(none)]> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO 'moodleuser'@'localhost' IDENTIFIED BY '???';

注)Apache と MySQL が同居しない場合は,localhostをWebサーバのホスト名にする

確認

MariaDB [(none)]> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| moodle |

| mysql |

| performance_schema |

+--------------------+

MariaDB [(none)]> exit;

PHP

phpをインストールし,

# yum install php

# yum install php-json

# yum install php-mysqlnd

# yum install gd

# yum install php-gd

# yum install php-mbstring

# yum install php-ldap

# yum install php-xmlrpc

# yum install php-xml

# yum install php-intl

# yum install php-soap

# yum install php-zip

# yum install php-opcache

# yum install php-sodium

phpのバージョンを確認する:

# php -v

Moodleに必要なphpのバージョン条件を満たしていない場合,phpのバージョンを上げる。

# yum module reset php

# yum module enable php:7.4

# yum update

標準パッケージで不足の場合はRemiを使う。

php.iniを編集.ファイルのアップロードの最大サイズ,メモリ制限は多めに設定.

# vi /etc/php.ini


file_uploads = On (デフォルトのまま)

session.auto_start = 0 (デフォルトのまま)

session.bug_compat_warn = Off (デフォルトのまま)

upload_max_filesize = 2000M

post_max_size = 2000M

memory_limit = 2000M

max_input_vars = 10000

date.timezone="Asia/Tokyo" (デフォルトではコメントアウトされている)

Postfix

CentOS Stream 8では,デフォルトでメール転送エージェント (MTA) がインストールされないので,yumでpostfixとmailxをインストールし,サービスをONにする。そうしないとMoodleがメールを送れない。

# yum install postfix mailx

# systemctl enable postfix.service

# systemctl start postfix.service

念のため,Moodleインストール終了後,[サイト管理][サーバ][メール][送信メール設定][テスト送信メール設定]でテストメールが送信できることを確認する。

その他

必要なパッケージをインストールする。

# yum install tetex*

Moodle

Moodleを http://download.moodle.org/ からダウンロード

# wget ムードルファイルのURL(http://.../moodle-latest-28.zip)

/var/www/htmlに展開(以下では /var/www/html/moodle).展開コマンドは

# cd

# unzip moodle-latest-28.zip

# mv moodle /var/www/html/

データ用ディレクトリを /var/www/moodledata に設定.apache が読み書きできるようにする.アップロードされたファイルはここに入る.

# cd /var/www/

# mkdir moodledata

# chmod 0777 moodledata

# chown -R apache.apache moodledata

config.php

https://サーバ名/moodle/ にアクセス。質問に答えていく。

  • 質問中でURLが https://.../moodle のようになるが最後に / を補わない。

  • 質問は「続ける」でたくさんのページがあるが必ず最後まで答える。

  • 途中で設定ファイル config.php が作られるが,moodleディレクトリに apache が書き込めないので,表示された config.php をコピーしてエディタにペーストし,moodle ディレクトリ/var/www/html/moodle/に保存.所有者,パーミッションを以下のように変更する。

# chown root.apache config.php

# chmod o-r config.php

cron

次のコマンド

# cd /var/www/html/moodle/admin/cli; php cron.php

がうまく働くことを確認して,crontabに次のように設定する(使い方はviと同じ)。

# crontab -e


*/5 * * * * cd /var/www/html/moodle/admin/cli; php cron.php > /dev/null

以上でインストール完了。ここで念のためシステムを再起動してサイトが閲覧できることを確認する。

設定・カスタマイズ・プラグイン

設定

https://サーバ名/moodle/ にアクセスし,adminでログインし,[サイト管理]で以下を設定.

サイト管理

[ロケーション]-[ロケーション設定]

-[デフォルトの国]country: 日本

[フロントページ]-[フロントページ設定]

[フロントページ]を[アナウンスメント]に変更。

[ログイン時のフロントページアイテム]を[アナウンスメント],[カテゴリ一覧]と[登録済みコース]に変更.

[サーバ]

-[セッションハンドリング]-[クッキー接頭辞]sessioncookie: moodle <- このムードルの名前

[プラグイン]-[認証]-[認証管理]

[メールアドレスの変更時、ドメインを制限する] verifychangedemail: No

[LDAPサーバー]: Yes (そしてLDAPサーバーの設定も行う:北里大学Moodleの場合)

[パスワード喪失URI] パスワードを忘れた場合に表示するメッセージをつくりそこへのURL

システムパス

[サーバ]-[システムパス]

-[duのパス]pathtodu: /usr/bin/du

-[aspellのパス]aspellpath: /usr/bin/aspell

ユーザ,コース管理

[セキュリティ]-[サイトセキュリティ設定]

[ユーザ画像の閲覧にユーザのログインを強制する] forceloginforprofileimage: Yes (学生がユーザプロファイルにアップロードした写真へログインせずにアクセスできないようにする)

[デフォルト登録キーポリシー] groupenrolmentkeypolicy: No (パスワードポリシーに基づきグループ登録キーをチェックしない)

[メール変更確認] emailchangeconfirmation: No

[コース]-[コースデフォルト設定]

[セクション最大数] maxsections: 62

[セッション数] numsections: 15

[ユーザ]-[パーミッション]-[ロールを定義する]

[コース作成者]-[編集]の[ユーザデータをバックアップする moodle/backup:userinfo]という項目を[許可]。

[ロールの割り当てを許可する]の[教師]の行の[教師]をチェック。

[プラグイン]-[登録]-[自己登録]enrol_self

[既存の登録を許可する] status: Yes

[コースウェルカムメッセージを送信する] sendcoursewelcomemessage: No

モジュール

[プラグイン]

-[活動モジュール]-[活動を管理する]-[課題]-[設定]で

[学生に提出受領書を送信する] assign | submissionreceipts: チェックをはずす。

-[フィルタ]-[フィルタ設定]

-[TeX表記法] On

-[用語集自動リンク] On

アピアランス

[アピアランス]

[テーマ]-[テーマ設定]-[コーステーマを許可する] allowcoursethemes: Yes

[コース]-[コース連絡先] coursecontact: [編集権限のない教師]にもチェックを入れる。

カスタマイズ

言語カスタマイゼーション

フォーラム投稿で届くメール下部の「この投稿をコンテクスト内に表示する」を「この投稿を表示する」に修正する。(by Yoshida Mitsuhiro)

  1. 管理 > サイト管理 > 言語設定 > 言語カスタマイゼーション

  2. 「選択 ...」プルダウンメニューから「日本語 (ja)」を選択する。

  3. 「編集のために言語パックを開く」をクリックする。

  4. 「ストリングを表示するコンポーネント」で「forum.php」を選択する。

  5. 「次のテキストを含むストリングのみ」に「この投稿をコンテクスト内に表示する」を入力する。

  6. 「ストリングを表示する」をクリックする。

  7. 「ローカルカスタマイゼーション」に新しい訳語「この投稿を表示する」 を入力する。

  8. 「修正を言語パックに保存する」をクリックする。

  9. 「続ける」をクリックする。

ゴミ箱

Moodle 3.5から,デフォルトではコース作成者がカテゴリの変更ができないようになった[MDL-63166 Teachers can't change course category]。 「ゴミ箱」というカテゴリを用意しておき,カテゴリが「ゴミ箱」のコースを管理者が定期的に削除する,北里大学の運用を可能にするために,コースカテゴリを「ゴミ箱」に変更できるように設定変更する。(by Yoshida Mitsuhiro)

[コース]-[コースおよびカテゴリを管理する]で,

  1. コースカテゴリ「ゴミ箱」欄の右側にある編集アイコン (歯車のアイコン) をクリックし,「パーミッション」を選択する。

  2. [高度なロールオーバーライド]プルダウンメニューから[認証済みユーザ]を選択し,ケイパビリティ「コースカテゴリを変更するmoodle/course:changecategory」で「許可」を選択する。

  3. ページ下部の「変更を保存する」ボタンをクリックする。

なお,ひとたびカテゴリを「ゴミ箱」に変更したコースは,管理者でないとカテゴリを変更できなくなるので注意。

アナウンスメント

moodleにログインしたときに,管理者からの連絡を必ず見えるようにする方法。 (by Yoshida Mitsuhiro)

  1. サイト管理者としてログインする。

  2. 「管理 > サイト管理 > フロントページ > フロントページ設定」に移動する。

  3. 「ログイン時のフロントページアイテム frontpageloggedin」で「アナウンスメント」を選択する。

  4. 「変更を保存する」ボタンをクリックする。

  5. 「管理 > サイト管理 > アピアランス > デフォルトダッシュボードページ」に移動する。

  6. 「ブロック編集の開始」ボタンをクリックし,「ブロックを追加する」で「最新アナウンスメント」を選択する。

  7. 表示された「最新アナウンスメント」ブロック内の移動アイコン (歯車アイコンの左側) を選択したまま、「最新アナウンスメント」ブロックをページ最上部に移動する。

  8. 「ブロック編集の終了」,「すべてのユーザのダッシュボードをリセットする」ボタンをクリックする。

  9. 「最新アナウンスメント」ブロック内の「新しいトピックを追加する...」をクリックする。

  10. 「件名」および「メッセージ」を入力し,「フォーラムに投稿する」ボタンをクリックする。

プラグイン

questionnaire(アンケート)モジュール

まず,https://moodle.org/plugins/mod_questionnaire よりquestionnaireモジュールを入手。

questionnaire.zipを/var/www/html/moodle/mod/にコピーして展開.

# cd /var/www/html/moodle/mod/

# cp /root/questionnaire.zip .

# unzip questionnaire.zip

https://サーバ名/moodle/にアクセスして,adminでログインして,指示に従ってインストールする。

theme

最近,我々はテーマのインストールは行っていないが, 必要に応じて,https://moodle.org/plugins/browse.php?list=category&id=3 よりテーマ(theme)を入手。

theme_...zipを/var/www/html/moodle/theme/にコピーして展開。

# cd /var/www/html/moodle/theme/

# cp /root/theme_...zip .

# unzip theme_...zip

https://サーバ名/moodle/にアクセスして,adminでログインして,指示に従ってインストールする。

不具合の修正

LDAPがユーザ名の全角,半角を区別しない場合の対策

ログインユーザ名を強制的に半角にする。LDAPでログイン認証する場合,LDAPが,(OpenLDAPのように)ユーザ名の全角,半角を区別しない場合の対策。(https://moodle.org/mod/forum/discuss.php?d=83972)本体コードを修正してくれるようにMoodle Trackerに報告中(by Yoshida Mitsuhiro)。

プログラム修正前にMoodleに管理者としてログインし,「サイト管理 > サーバ > 動作環境」内の「php_extension mbstring」欄の右端が「OK」になっていることを確認してから,login/index.phpの132行目(Moodle3.8では136行目)に1行追加。(by Yoshida Mitsuhiro)

[ 修正前 ]

/// Check if the user has actually submitted login data to us


if ($frm and isset($frm->username)) { // Login WITH cookies


$frm->username = trim(core_text::strtolower($frm->username));

[ 修正後 ]

/// Check if the user has actually submitted login data to us


if ($frm and isset($frm->username)) { // Login WITH cookies


$frm->username = mb_convert_kana($frm->username, 'a', 'utf-8');

$frm->username = trim(core_text::strtolower($frm->username));

グラフの文字化け対策

例えば,「調査」の活動でATTLSの調査をすると調査結果のグラフの漢字の部分が文字化けする。以下の対策はYoshida Mitsuhiro様より(2017.9.8, 2018.1.17)。

  • Moodleデータディレクトリの日本語言語パックディレクトリに移動する。

# cd /var/www/moodledata/lang/

  • フォント用ディレクトリを作成してディレクトリに移動する。

# mkdir ja_local (このディレクトリは存在するかも知れない)

# cd ja_local

# mkdir fonts

# cd fonts

  • https://ipafont.ipa.go.jp/ よりIPAexゴシック(Ver.003.01) を取得する。

# wget https://ipafont.ipa.go.jp/IPAexfont/ipaexg00301.zip

  • 取得したをIPAexゴシックを展開 (解凍) する。

# unzip ipaexg00301.zip

  • 展開したIPAexゴシックをリネームおよび移動する。

# mv ipaexg00301/ipaexg.ttf default.ttf

運用

一括登録

コース参加者やコースをcsvファイルで一括登録する方法。

マネージャー

一部の教師に,コースの参加者を一括登録することのできる「マネージャ」ロールを割り当てる。(by Yoshida Mitsuhiro)

  1. Moodleにサイト管理者としてログインする。

  2. [サイト管理]-[ユーザ]-[パーミッション]-[システムロールを割り当てる]をクリックする。

  3. 「ロール」カラム内の「マネージャ」リンクをクリックする。

  4. 「潜在的なユーザ」セレクトボックスから(参加者を一括登録を許可したい)ユーザを選択する。

  5. [追加]をクリックする。

  6. [すべてのロール一覧に戻る]をクリックする。

マネージャーにコース登録権限を付与

マネージャはコース参加者を一括登録できるが,コースを一括登録する権限がない。コースを一括登録する権限はadminにしかない。以下のようにadmin/tool/uploadcourse/settings.phpの27行目を修正してマネージャーにコースを一括登録する権限を与えることができる。(by Yoshida Mitsuhiro)

[ 修正前 ]

if ($hassiteconfig) {

$ADMIN->add('courses', new admin_externalpage('tooluploadcourse',

get_string('uploadcourses', 'tool_uploadcourse'), "$CFG->wwwroot/$CFG->admin/tool/uploadcourse/index.php"));

}

[ 修正後 ]

//if ($hassiteconfig) {

// $ADMIN->add('courses', new admin_externalpage('tooluploadcourse',

// get_string('uploadcourses', 'tool_uploadcourse'), "$CFG->wwwroot/$CFG->admin/tool/uploadcourse/index.php"));

//}

$ADMIN->add('courses', new admin_externalpage('tooluploadcourse', get_string('uploadcourses', 'tool_uploadcourse'), "$CFG->wwwroot/$CFG->admin/tool/uploadcourse/index.php", 'moodle/site:uploadusers'));

コースの一括登録・削除

マネージャは,[サイト管理]-[コース]-[コースをアップロードする]で,以下のようなcsvファイルをアップロードして,[アップロードオプション]を[新しいコースを作成する,または既存のコースを更新する]にして[プレビュー]→[コースをアップロードする]でコースを一括登録・削除できる。 (see docs.moodle.org/コースをアップロードする)

csvファイルのサンプル

shortname fullname category_path enrolment_1 enrolment_1_disable groupmode groupmodeforce

コースA コースA その他

コースB コースB 基礎教育科目 self 1 1 1

    • csvファイルは,excelなどで表をつくって,ファイルの種類をCSV UTF-8にして保存したもの。実態は項目をカンマで区切ったテキストファイル。

    • shortnameは短いコース名,コース名と同じで良い。

    • fullnameはコース名

    • cathegory_pathはカテゴリ。階層は / で区切る。/の両側に半角空白が必要。

    • enrolment_1とenrolment_1_disableで登録方法を指定する。何も入れなければ,登録キーなしの自己登録。enrolment_1をself,enrolment_1_disableを1にすると自己登録無効。

    • groupmodeとgroupmodeforceでグループモードを指定する。何も入れなければ,グループなし,グループモード強制なし,1なら分離グループを強制。

csvファイルのサンプル(削除の場合)

shortname fullname category_path delete

コースA コースA その他 1

コースB コースB 基礎教育科目 1

    • [削除を許可する]を[Yes]にすること。

参加者の一括登録

マネージャは,[サイト管理]-[ユーザ]-[ユーザをアップロードする]で,以下のようなcsvファイルをアップロードして,[ユーザをアップロードする]をクリックして[アップロードタイプ]を[新しいユーザの追加および既存のユーザを更新する]にして[ユーザをアップロードする]でユーザを一括登録できる。(see docs.moodle.org/ユーザのアップロード)

csvファイルのサンプル1 (学生の登録)

username firstname lastname email auth course1 group1

nx19109 三浦 浩一 nx19109 nx19109@kita.jp ldap コースA 金1

sx19380 山田 花子 sx19380 sx19380@kita.jp ldap コースA 金1

px19704 一柳 太郎 px19704 px19704@kita.jp ldap コースA 金2

vx19120 三浦 大介 vx19120 vx19120@kita.jp ldap コースA 金2

    • course1はコース省略名。

    • group1はグループ。グループが不要な時はgroup1フィールドをなくすか,空欄にする。

csvファイルのサンプル2 (教師の登録)

username firstname lastname email auth course1 type1

abc1234 福田 宏 一般教育部 fuku@kita.jp ldap コースB 2

abc1235 藤原 俊 一般教育部 fuji@kita.jp ldap コースA 2

    • type1はロール。1は学生,2は教師,3は編集権限のない教師。

メンテナンス

バックアップ

データベースのバックアップ(moodleはmoodleのデータベース名)

# mysqldump -u root -Q -e moodle > moodle.sql

と,moodleとmoodledataディレクトリをrsyncで定期的に自動バックアップしておけばOK.トラブルが生じても,アンインストールして正常に動作していた状態へ復元できる.

別のMoodleを入れるには

同じサーバに別のMoodle,Moodle2とする,を入れるには,

  1. Moodle2のデータベースmoodle2,ユーザmood2leuserをつくり,

  2. Moodle2をインストールするディレクトリを決める。/var/www/html/moodle2とする.

  3. moodleをmoodle2に読み替えて上記*からの作業を行う.

アップデート

  1. バックアップをとってから,moodleディレクトリを削除して,新しい Moodle を http://download.moodle.org/ からダウンロードして,moodleディレクトリに展開.questionnaireなどのモジュールも最新版をmoodleディレクトリに展開する。

  2. https://サーバ名/moodle/admin/ にブラウザでアクセスする。データベースのアップグレードがおこなわれる。その後config.phpのパーミッションを設定,

  3. 不具合の修正を行う。不具合の修正は,phpファイルを直接書き換えるものだけでOK。

  4. utf8データベースをutf8mb4に変換するには,moodleディレクトリで次のコマンドを実行し,
    # php admin/cli/mysql_collation.php --collation=utf8mb4_unicode_ci
    config.phpの照合順序 (dbcollation) にutf8mb4_unicode_ciを設定する。
    'dbcollation' => 'utf8mb4_unicode_ci',
    (see utf8からutf8mb4への変更について

アンインストール

mysqlのデータベースmoodleを削除.

# mysql -u root

MariaDB [(none)]> drop database moodle;

MariaDB [(none)]> exit;

moodleディレクトリとmoodleデータディレクトリを削除.

# rm -rf /var/www/moodledata

# rm -rf /var/www/html/moodle

cronを削除

誤ってアンインストールしてしまった場合の復元手順

moodleディレクトリとmoodleデータディレクトリを復元。

# rsync -a バックアップしたmoodledata/ /var/www/moodledata/

# rsync -a バックアップしたmoodle/ /var/www/html/moodle/

mysqlのデータベースの復元。

# mysql -u root

MariaDB [(none)]> データベースmoodle を作成

MariaDB [(none)]> use moodle;

MariaDB [(moodle)]> source moodle.sql

MariaDB [(moodle)]> exit;

cronを復元

ホスト名を変えるには

config.phpのホスト名 ($CFG->wwwroot) を変更し,ブラウザで

https://サーバ名/moodle/admin/tool/replace/

にアクセスして[このストリングでデータベース全体を検索する] に旧ホスト名,[このストリングで置換する]に新ホスト名を入れて,データベース内の旧ホスト名を新ホスト名に置換する。

別のサーバにデータも含めて再構築するには

a.comというサーバに再構築するには,a.comにログインして「復元手順」と「ホスト名を変えるには」をおこなう。

参考

  1. Moodleのインストール (http://docs.moodle.org/ja/Moodleのインストール) 2010.2現在

  2. Japanese Moodle (http://moodle.org/course/view.php?id=14) 2008.12現在

  3. Moodleのセキュリティ (http://docs.moodle.org/ja/Moodleのセキュリティ) 2010.3現在

  4. Moodleのアップグレード (http://docs.moodle.org/ja/Moodleのアップグレード) 2010.3現在

  5. CentOS7のファイアウォール(http://www.unix-power.net/centos7/firewalld.html)2015.2現在