VPS(Ubuntu20.4)においてMoodle + STACK環境を構築するメモ

研究室の同期に数学ソフトウェアを使った教育について研究している人がいる.今回,MoodleとSTACKというソフトウェアの環境構築を頼まれたので協力した.今後彼が一人で構築できるようにドキュメントを残しておきたい.

環境

さくらのVPS
メモリ:1GB
SSD: 100GB
CPU: 2コア
OS: Ubuntu 20.04 amd64

Moodleのインストール

Moodleは学習管理システム(Learning Management System, LMS)である.
Step-by-step Installation Guide for Ubuntu - MoodleDocs
インストールは基本的には上記のガイドにしたがって進んでいけばよいが,ところどころ引っかかるところがあったので注意点を書いておく.

Step1 Install Ubuntu

VPSにUbuntu20.04をインストールして起動する.さくらVPSのコンソールにおいて,US配列キーボードで:が入力できない不具合がある.そのため,VPSに備え付きのコンソールを使用するならばβ版のシリアルコンソールを使う必要がある.

Step2 Install Apache/MySQL/PHP

Apache/MySQL/PHPをインストールする.この環境をLinux, Apache, MySQL, PHPの頭文字をとってLAMP環境という.それぞれインストールしたらその都度動作確認をしておくとよい.

また,Moodleのドキュメントのコマンドはそのままでは動かない.以下のコマンドでaptにリポジトリを登録してから.各種ソフトをインストールする.

sudo add-apt-repository 'ppa:ondrej/php'
sudo apt-get update
sudo apt install apache2 mysql-client mysql-server php7.4 libapache2-mod-php7.4
Apache

ApacheをインストールしたらブラウザでIPアドレスを入力して動作を確認する.

f:id:soma_arc:20210422150734p:plain
Apacheの動作確認
PHP

PHPをインストールしたら以下のようなファイルをphpinfo.phpとして作成し,/var/www/htmlに保存する.

<?php
phpinfo();
?>

http://IP.Address/phpinfo.phpにアクセスしてApacheと共に使われるPHPのバージョンが意図したものであるかを確認しておく.今回は7.4.16.

f:id:soma_arc:20210422151000p:plain
PHPの動作確認

PHPのバージョンをupdate-alternativeで指定している場合でも異なるバージョンのPHPが使われる場合があるので注意する.
また,PHPのモジュールをインストールした場合などは

sudo service apache2 restart

Apacheの再起動をかけないと反映されない.

MySQLのインストール

今回のMySQLのバージョンは8.0.23-0ubuntu0.20.04.1.mysql_secure_installationによるmysqlのインストールで聞かれる事項はこちらの記事を参考にする.
MySQL 5.7 をインストールしたら最初に行うセットアップ |

Step 3: Install Additional Software

PHP8.x系が使いたければphp7.4-mbstringなどのバージョン番号をphp8.0-mbstringに変更してaptでインストールするとよい.何か足りないモジュールがあれば大抵php7.4-xmlなどのハイフン以下をモジュール名にすれば大抵インストールできる.何かインストールしたらsudo service apache2 restartを忘れずに行なう.

Step 4: Download Moodle

gitによりMoodleをクローンする.今回のインストールでは最も新しいリリースであるMOODLE_311_STABLEを導入した.バージョンは3.11.

sudo git clone git://git.moodle.org/moodle.git
cd moodle
sudo git branch -a
sudo git branch --track MOODLE_311_STABLE origin/MOODLE_311_STABLE
sudo git checkout MOODLE_311_STABLE

Step 5: Copy local repository to /var/www/html/

指示に従うだけ.

Step 6: Setup MySQL Server

/etc/mysql/mysql.conf.d/mysqld.cnfを編集しMySQLの設定をおこなうとある.しかし,mysqld.cnf内にドキュメントに記載された項目がなかったので特に変更しなかった.

Step 7: Complete Setup

http://IP.Address/moodleを開くとmoodleのインストールが始まる.いくつかの項目を入れてインストールしていくと,パーミッションの設定の影響かconfig.phpが生成されなかったと出る.
そこで表示されたコードをコピーし,config.phpを自分で作成する.コードにコメントとして書いてあるが,PHPの閉じタグがないが問題ない.自分で閉じタグをつけてしまうと動かなくなってしまうので注意する.
PHP: PHP タグ - Manual

STACKのインストール

STACKは数学などの自動採点システム.Moodleプラグインとして動作する.バックエンドにMaxima(数式処理システム),gnuplotをもち,これらと通信することで採点などを行う.今回のバージョンは4.3.
Installation instructions. - STACK Docs
こちらもドキュメントの流れに沿って設定していく.

Step0

php-mbstringのインストール.おそらくMoodleの導入時点で入っていると思う.

Step1

MathJaxに関するMoodleの設定を行なう.STACKのドキュメントにあるように,3つの項目をDashboard > Site administration > Plugins > Filters > MathJaxに追加する.

f:id:soma_arc:20210422123337p:plain
Dashboard > Site administration > Plugins > Filters > MathJax

Step 2. Install gnuplot and Maxima

gnuplot
sudo apt install gnuplot

バージョンは5.2.

Maxima

Maximaをインストールする.MaximaCommon Lispで書かれた数式処理システム(Mathematicaのようなシステム)である.

sudo apt install maxima

バージョンは5.36.1.aptでインストールするだけで使えた.

ソースからビルドする場合sbclCommon Lispの処理系の一つ)が必要だが,これもaptでインストールすることができる.詳しくは以下のドキュメントを参照のこと.
Compiling Maxima from source. - STACK Docs

Step 3. Add some additional question behaviours

いくつかのファイルをダウンロードし,Moodleのフォルダ内に配置する.
これはドキュメントの記載の通り,Moodleのルートディレクトリでgit cloneするだけでよい.

git clone https://github.com/maths/moodle-qbehaviour_dfexplicitvaildate.git question/behaviour/dfexplicitvaildate
git clone https://github.com/maths/moodle-qbehaviour_dfcbmexplicitvaildate.git question/behaviour/dfcbmexplicitvaildate
git clone https://github.com/maths/moodle-qbehaviour_adaptivemultipart.git question/behaviour/adaptivemultipart

Step 4. Add the STACK question type

Moodle上でドキュメントに記載のSTACKの設定を行い,Moodleのルートに入って書かれているファイルをgit cloneで落とせばよい.

git clone https://github.com/maths/moodle-qtype_stack.git question/type/stack

Step 5. Post-install confirmation.

Dashboard > Site administration > Plugins > Question Types > STACK
からhealthcheck script(動作確認スクリプト)を動かす.

また,動作確認用の問題データを用意してもらったので,これをMoodle上でインポートするとSTACKがうまく動いているか確認することができる.
https://gist.github.com/soma-arc/727cc4aae272315c2843e16b09591599

今後必要なこと

  • Maximaの最適化による高速化

  Optimising Maxima - STACK Docs

おわり

MoodleとStackに関してはこういった書籍がある.

MoodlePHPのバージョンまわりでうまくいかないことが多いので気を付けたい.

サーバーサイドはあまりわかっていなくて大変だったのだけれどやはり動くものが見れた時は面白い.

追記 - プラグインのインストール

Moodleの管理画面からプラグインを入れることができる。ただし、パーミッションの設定がうまくされていないとインストールすることはできない.
Apacheはwww-dataというグループのwww-dataというユーザでファイルを操作する.www-dataにディレクトリに対する書き込み権限がないとMoodle上でプラグインの追加ができない.
権限の設定は以下の通り

sudo chgrp -R www-data /var/www/html/moodle
sudo chmod g+w -R /var/www/html/moodle
sudo service apache2 restart

(参考 UbuntuのWordPressの更新が上手く行かないときの対応 | 有限工房)
その後、Moodleの管理画面から サイト管理 > プラグイン > プラグインをインストールする を選択し、以下の画面からプラグインを入れる.
f:id:soma_arc:20210830132926p:plain
今回は次のプラグインをインストールする.
Moodle plugins directory: Ordering
プラグインの入ったzipファイルをサイトからダウンロードし、上記の画面からインストールすれば終わり.
プラグインの導入には別の方法もある。次のページを参考のこと.
プラグインをインストールする - MoodleDocs

追記 - Moodleのアップグレード

Moodleを更新した.メジャーアップデートではないので特に躓くところはないはず.
アップグレード - MoodleDocs
こちらを参考に更新を行う.今回の環境はテスト運用であったので、メンテナンスモードにはしなかった.

cd /var/www/html
sudo cp -r moodle moodle.backup
cd moodle
sudo git stash save
sudo git pull
sudo cp ../moodle.backup/config.php ./

一応バックアップを取った後、リポジトリを更新し、config.phpだけバックアップからもってくる.
ブラウザから管理者アカウントでMoodleにアクセスし、サイト管理 > 通知に移動すると自動的に更新が始まる.
何もなければ完了.