Moodle 3.2.2（以降）のインストール手順メモ

#Moodleのインストール
ググるとMoodleのインストール手順を解説したメモが出てくるが、難ありと思われるものが多いのでメモしておく。

#Moodle 3.2.2以降の理由
Moodle 3.2.2からは（個人的に）待望だったMariaDB(MySQL)のutf8mb4に公式対応してくれたので、絵文字入りのフォーラム投稿などをするとデータベースエラーが表示されて投稿に失敗するような問題が無くなった。その代わりにMariaDB側で設定を追記する必要がある。

#インストール手順について
##目的
CentOS 7 x64がインストールされた環境にMoodle 3.2.2をインストール。最低限の内容とし、各種最適化などは今回は触れない。

##不足部分
以下については別途記載とする。
[unoconvの設定](http://qiita.com/papillon/items/40e8f765ed4cd3dc2964)
[mod_xsendfileの設定](http://qiita.com/papillon/items/91b6d7fb4748b354a011)

##手順
CentOS 7 x64をminimalでインストール。今回はクーポンが余っていたのでさくらのクラウドで実行した。インストール後にSSHなどでコンソールにログインする。

EPELリポジトリを有効にした状態で各種パッケージのアップデート。isoからインストール場合は事前にEPELリポジトリを追加しておく。

```
# yum install -y epel-release
# yum update -y --enablerepo=epel
```

PHP 7.1のため、remiレポジトリを追加。現時点でMoodleはPHP 7.2には対応していないらしいので注意。
PHP 7.2だと``` PHP Fatal error:  Cannot use 'object' as class name as it is reserved in /path/to/moodle/lib/setuplib.php on line 66```となってしまう。

```
# yum localinstall -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

Apache httpd 2.4をインストール。

```
# yum install -y --enablerepo=epel httpd mod_ssl mod_xsendfile
```

PHP 7.1とMoodleのインストール完了に最低限必要な各種パッケージをインストール。
余談だがMoodle 3.0世代をPHP 7.1の環境で利用しようとするとQuickForm関連でエラーが出て正常に動作しなくなってしまう。

```
# yum install -y --enablerepo=remi-php71 php php-common php-cli php-json php-intl php-mbstring \
php-xml php-xmlrpc php-soap php-opcache php-pdo php-mysqlnd
# yum install -y --enablerepo=remi,remi-php71 php-pecl-zip php-gd
# yum install -y aspell graphviz ghostscript
```

MariaDBのインストールと初期設定

```
# yum install -y mariadb mariadb-server mariadb-libs
```

MariaDBの設定ファイルに下記のように追記

```
# vi /etc/my.cnf.d/server.cnf
```

```ini:/etc/my.cnf.d/server.cnf
[mariadb]
log-bin=mysql-bin
binlog_format=ROW
innodb_file_per_table = 1
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_large_prefix = ON
```

MariaDBの起動と自動起動設定

```
# systemctl start mariadb.service
# systemctl enable mariadb.service
```

MariaDBのrootパスワードの設定とテスト用DBの削除

```
# mysql_secure_installation
```

MoodleパッケージのDocumentRootへの設置

```
# yum install -y wget
# cd /usr/local/src/
# wget https://download.moodle.org/download.php/direct/stable32/moodle-3.2.2.tgz
# tar xzf moodle-3.2.2.tgz
# shopt -s dotglob
# mv moodle/* /var/www/html/
# rm -rf ./moodle
# chown -R apache:apache /var/www/html/
# restorecon -R /var/www/html/
```

Moodle用データディレクトリを作成

```
# mkdir -p /var/www/moodledata
# chown -R apache:apache /var/www/moodledata/
# restorecon -R /var/www/moodledata/
```

CLIでのMoodleのインストール
あとでサーバ証明書を導入する場合はウェブアドレスを**https://**で始まるものにしておく（あるいは後でconfig.phpを書き換える）。

```
# sudo -u apache /usr/bin/php /var/www/html/admin/cli/install.php --lang=ja
```

Moodle用cronの設定

```
# crontab -e
```

cronのログ捨てない派の人はmoodledataディレクトリ配下に保存するようにすると良いかも。

```bash
*/5 * * * * /usr/bin/php -f /var/www/html/admin/cli/cron.php > /dev/null 2>&1
```

Firewalldの設定を行い、外部からHTTP,HTTPSでの通信を許可

```
# yum install -y firewalld
# systemctl start firewalld
# systemctl enable firewalld
# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https
# firewall-cmd --reload
```

httpdの起動と自動起動設定

```
# systemctl start httpd.service
# systemctl enable httpd.service
```

Let's EncryptでのHTTPS用サーバ証明書の取得
（ssl.confの設定とhttpdの再起動はcertbotがしてくれる）

```
# yum install python2-certbot python2-certbot-apache --enablerepo=epel
# certbot --apache -d moodle.your.domain --agree-tos -m your@email.addr
```

サーバ証明書の自動更新設定

```bash
00 05 01 * * /usr/bin/certbot renew --force-renew && /usr/bin/systemctl reload httpd.service
```