Moodle 3.11 をコマンドライン上だけでCentOS8 にインストール

Moodle 3.11 を、ウェブブラウザを使わずに、コマンドライン上だけで CentOS 8 にインストールする方法です。

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をインストールすることができます。

まずは、

```
sudo yum -y update
sudo reboot
```

を実行して CentOS 全体の update をしておきます。再起動が終わりログインしたら、さらに、

```
sudo dnf -y install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm
sudo dnf -y module list php
sudo dnf -y module reset php
sudo dnf -y module enable php:remi-7.4
sudo dnf -y install php
```

を実行して、PHP をコマンドラインで実行できるようにします。
その後、


```
nano moodleinst.php
```

など何かエディタを使って、（以下に示すような）moodleinst.php を作成して

```
sudo chmod 600 moodleinst.php  # 念の為
sudo php moodleinst.php
```

のように実行すると、Moodleのインストールが完了します。
（moodleinst.php の中身は下の通り）


```php:moodleinst.php
<?php
// サーバによって違う parameters (各自編集してください):
$host = "xxx.xxx.xxx.xxx";  // set host IP address
// $host = "your.host.jp";  // or DNS hostname
$ver = "311"; // Moodle 3.11
$mdpass= 'your%pass-word'; // moodle admin, mysql user ('&'はダメみたい)
$adminemail = "youradminmail@foo.bar";

$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-pecl-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}");
}
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 の設定
// 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 を変更。
```

以上です。