1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rocky Linux 9 に Moodle 4.1 をインストールする

Last updated at Posted at 2023-04-21

この内容は、以下の記事をもとに、Rockey Linux 9に最新のMoodle(4.1:2023/4/18現在) のインストール手順をまとめました。(@t-kitaさん、サポートありがとうございました)

【事前準備】
■ポートの開放状況を確認
 特に、git clone用の9418ポートが開いているか確認しておいてください。
【構築開始】
以下、Rockey Linux 9にログイン後に、rootで実行してください。
■Rocky Linux 全体の updateと再起動

sudo yum -y update
sudo reboot

■phpのインストール

dnf -y install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm
dnf -y module list php
dnf -y module reset php
dnf -y module enable php:remi-8.1
dnf -y install php

■PHPスクリプトの作成
通常、Moodleのインストール手順は、
https://docs.moodle.org/3x/ja/Moodle%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB
に記載のように、最後の仕上げにウェブブラウザを使います。
しかし、以下のような PHPスクリプトを使うと、
コマンドラインだけでMoodleをインストールできます。

moodle-inst.php を新規で開いて、
以下の内容をコピーペーストして保存してください。

<?php
// サーバ設定用parameterを記載
//$host = "xxx.xxx.xxx.xxx"; // set host IP address
// $host = "your.host.jp"; // or DNS hostname
//$ver = "401"; //【※各自設定】例:4.01の場合は401と記入。ただし、後で、【※1】の箇所で自動設定するので、設定不要。
//$mdpass= 'your%pass-word'; //【※各自設定】moodle admin, mysql user のPSWDを記入('&'はダメみたい)
//$adminemail = "youradminmail@foo.bar"; //【※各自設定】moodle admin のメールアドレスを記入


$md = 'moodle'; // 同一サーバ上で2つ目のMoodleをセットアップする時は変える

// Moodle 動作に必要な packages をインストール
system("dnf -y install php-opcache php-gd php-curl php-mysqlnd php-xmlrpc php-soap php-xml php-mbstring php-intl php-pec\
l-zip php-sodium php-ldap ");
system("dnf -y install httpd mod_ssl mariadb-server git");
system("firewall-cmd --add-service=http --add-service=https");
system("firewall-cmd --runtime-to-permanent");

system("systemctl enable httpd");
system("systemctl start httpd");
system("systemctl enable mariadb");
system("systemctl start mariadb");

// Download Moodle
$mdroot = "/var/www/html/${md}";
if ($md == "moodle"){
  system("cd /var/www/html/ ; git clone git://git.moodle.org/moodle.git");
}else{
  system("cd /tmp/ ; git clone git://git.moodle.org/moodle.git");
  system("mv /tmp/moodle ${mdroot}");
}

//git checkoutの前準備【※1】
// git branch -a の実行結果を読み込み、
//”MOODLE_”の文字列の後に記載されているバージョン番号のリストから、
//最新の値を抽出し、$verに格納
  system("cd $mdroot ;   git branch -a > git_branch_list.txt");
$file_path = $mdroot . '/git_branch_list.txt';
$max_version = 0;
$file_lines = file($file_path, FILE_IGNORE_NEW_LINES);
foreach ($file_lines as $line) {
  if (preg_match('/MOODLE_([0-9]+)_STABLE/', $line, $matches)) {
    $version = $matches[1];
    if ($version > $max_version) {
      $max_version = $version;
    }
  }
}
echo "最新のMoodle Stableのバージョン番号=" . $max_version . "\n" ;
$ver = $max_version; 

//git checkout
system("cd ${mdroot}/; git checkout -b local_${ver}_STABLE origin/MOODLE_${ver}_STABLE");
system("chmod 755 ${mdroot}");

// data dir
$dataroot = "/var/www/${md}d";
system("mkdir ${dataroot}; chown apache:apache ${dataroot}/");

// DB
$dbuser = "dbu${md}";
system("mysql -u root -e \"CREATE DATABASE $md  DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; \";");
system("mysql -u root -e \"CREATE USER ${dbuser}@localhost IDENTIFIED BY '$mdpass'; \"; ");
system("mysql -u root -e \"GRANT ALL ON ${md}.* TO ${dbuser}@localhost ; \"; ");
// mysql パスワードありの場合は、 mysql -u root -pmysqlpassword -e ... と書く

// moodle directory を書き込み可能にする処理
system("chown -R apache:apache ${mdroot}");

$url = "http://${host}/${md}";  // if apache documentroot is as default

// non-interactive install command
system("cd ${mdroot}/;  sudo -u apache /usr/bin/php  admin/cli/install.php --non-interactive --agree-license --lang=ja --wwwroot=\"${url}\" --dataroot=\"${dataroot}\" --dbtype=mariadb --dbname=$md --dbuser=${dbuser} --dbpass=$mdpass --fullname=\"${md} site\" --shortname=${md} --adminpass=$mdpass --adminemail=$adminemail");

// moodle directory を書き込みできないようにする処理
system("chown -R root:root ${mdroot}");
system("chmod 644 ${mdroot}/config.php");

echo("$url でMoodleが使えます。\n adminパスワードは $mdpass です。\n 以下を crontab に追加してください: \n* * * * * php ${mdroot}/admin/cli/cron.php > /dev/null 2>&1 \n");

//補足プロセス:Let's encrypt の設定(=https接続用にSSL証明書を作成する場合はコメントアウトをはずしてください)
//system("yum -y install python3-certbot-apache"); 
//system("yum -y install certbot");
//system("certbot certonly -n --webroot -w /var/www/html -d $host -m $adminemail --agree-tos ");
//system("certbot install --apache --no-redirect");  // これがもしダメなら手動で ssl.conf を変更。

■moodle-inst.phpの実行

chmod 600 moodle-inst.php
php moodle-inst.php

■cronの追加
以下を crontab に追加してください。

* * * * * php /var/www/html/moodle/admin/cli/cron.php > /dev/null 2>&1 

■max_input_vars の設定変更
/etc/php.iniを開いて、
max_input_vars = 5000 に変更して保存してください。

■https対応の作業 (http接続場合は不要)
/var/www/html/moodle/config.php を開き、

$CFG->wwwroot   = 'http  の箇所を、
$CFG->wwwroot   = https  に変更してください。

■SE Linuxの無効化
まず、

setenforce 0

を実行してください。次に、
/etc/selinux/config を開いて、

SELINUX=enforcing の部分を、
SELINUX=permissive に変更して、

保存してください。

■php-fpmとhttpdの再起動

systemctl restart php-fpm
systemctl restart httpd

■Web上での作業
PHPスクリプトを実行すると、「XXXXXでMoodleが使えます。」と表示されますので、表示された XXXXXにWebブラウザでアクセスするとMoodleのセットアップ画面が表示されます。
以降はその画面にしたがって操作してください。

以上でインストール手順は終了です。

■2023.10.5追記
管理者権限でログインした後に、
Security checks > Check all public / private paths
を開いたときに、いくつかのパスが公開されているといったエラーが表示される場合は、以下を実行してください。

(手順1)
https://docs.moodle.org/402/en/Apache#Hiding_internal_paths
の記載に従い、
/etc/httpd/conf.d/moodle_security.confを作って、以下を記載する。

<Directory "/var/www/html/moodle">
    RewriteEngine On
    RewriteRule "(\/vendor\/)" - [F]
    RewriteRule "(\/node_modules\/)" - [F]
    RewriteRule "(^|/)\.(?!well-known\/)" - [F]
    RewriteRule "(composer\.json)" - [F]
    RewriteRule "(\.lock)" - [F]
    RewriteRule "(\/environment.xml)" - [F]
    Options -Indexes
    RewriteRule "(\/install.xml)" - [F]
    RewriteRule "(\/README)" - [F]
    RewriteRule "(\/readme)" - [F]
    RewriteRule "(\/moodle_readme)" - [F]
    RewriteRule "(\/upgrade\.txt)" - [F]
    RewriteRule "(phpunit\.xml\.dist)" - [F]
    RewriteRule "(\/tests\/behat\/)" - [F]
  RewriteRule "(\/fixtures\/)" - [F]
</Directory>

(手順2)
php-fpmとhttpdの再起動する。

systemctl restart php-fpm
systemctl restart httpd

(注意)
https://docs.moodle.org/402/en/Apache#Hiding_internal_paths には、
Note: Please pay attention that above rules may block loading desired/required content, e.g. SCORM-packages containing a ""vendor""-directory. 
と記載がありますので、SCORMコンテンツを利用している場合は注意が必要です。

■補足
・git checkoutの前準備【※1】について
インストールするMoodleのバージョンはMoodleのgitで管理されている最新バージョンにする必要があります。
PHPスクリプトを実行する前に調べる方法は以下の通りです:
まず、

git branch -a

を実行すると、以下のように表示されます。

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/MOODLE_20_STABLE
  remotes/origin/MOODLE_21_STABLE
  remotes/origin/MOODLE_22_STABLE
  remotes/origin/MOODLE_23_STABLE
  remotes/origin/MOODLE_24_STABLE
  remotes/origin/MOODLE_25_STABLE
  remotes/origin/MOODLE_26_STABLE
  remotes/origin/MOODLE_27_STABLE
  remotes/origin/MOODLE_28_STABLE
  remotes/origin/MOODLE_29_STABLE
  remotes/origin/MOODLE_30_STABLE
  remotes/origin/MOODLE_31_STABLE
  remotes/origin/master

【参考】
https://docs.moodle.org/3x/ja/%E7%AE%A1%E7%90%86%E8%80%85%E7%94%A8Git#.E6.8B.A1.E5.BC.B5.E6.A9.9F.E8.83.BD.E3.82.92Git.E3.83.AA.E3.83.9D.E3.82.B8.E3.83.88.E3.83.AA.E3.81.8B.E3.82.89.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB.E3.81.99.E3.82.8B

表示内容の中から、
remotes/origin/MOODLE_”の後ろの数字の最新の値(上記例では31)を取得し、
PHPスクリプトの$verに格納する必要があります。
上記PHPスクリプト(moodle-inst.php)では、【※1】で自動的に取得しています。
なお、【※1】はChatGPTに作成してもらっていました(ChatGPTの動作手順はコチラ)

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?