2018年6月6日水曜日

Centos7にMoodle3.5を構築する

2021年03月追記:以下の手順では匿名様にコメント頂いている点と、こちら↓の記事で指摘されている問題があるようですので、ご参考にしてください。
https://moodle.org/mod/forum/discuss.php?d=376128

最近業務で使ったMoodleというLMS(Learning Management System)平たく言えばe-Learningのシステムの構築を今回は題材にしてみたい。

構築する環境としては、
https://arm-lab.blogspot.com/2018/06/centos-minimal.html
こちらの記事で作ったCentos 7 Minimalインストールの環境をベースにしていく。

※おおむね此方の方の手順(http://www.unix-power.net/networking/post-730)で行けたが、

  • 現在のMoodleの最新版(3.5)ではCentosのyumリポジトリで入れられるphpより新しいバージョンのphpを要求される点
  • Centos 7 ではSELinuxのおかげで「Fatal error: $CFG->dataroot is not writable, admin has to fix directory permissions! Exiting.」が出力される点
  • 次のエラーの解決
mysql_full_unicode_support#File_format
this test must passYour database uses Antelope as the file format. Full UTF-8 support in MySQL and MariaDB requires the Barracuda file format. Please switch to the Barracuda file format. See the documentation MySQL full unicode support for details.
Check
mysql_full_unicode_support#File_per_table
this test must passFor full support of UTF-8 both MySQL and MariaDB require you to change your MySQL setting 'innodb_file_per_table' to 'ON'. See the documentation for further details.
Check
mysql_full_unicode_support#Large_prefix
this test must passFor full support of UTF-8 both MySQL and MariaDB require you to change your MySQL setting 'innodb_large_prefix' to 'ON'. See the documentation for further details.
Check

等々細々いろいろ引っかかった点を、現在実現可能な手順に修正・追加・検証し、Centos7 + Moodle 3.5+で成功する手順を確立している。

maria DBのインストール

# sudo yum install -y mariadb mariadb-server

httpd(apache)のインストール

# sudo yum install -y httpd httpd-devel mod_ssl

※Moodle3.2では「Moodle 3.2 or later requires at least PHP 5.6.5」と要求されるがyumでインストールすると2018年6月現在「php-common-5.4.16-45.el7.x86_64」が入ってしまい、エラーを吐く経験があり今回使用するMoodle3.5でも当然phpのバージョンはyumリポジトリより新しいものが必要なので、epelリポジトリとRemiリポジトリを追加する。

epelリポジトリの追加

# sudo yum install -y epel-release

Remiリポジトリの追加

# rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

php 7.1と必要なモジュールのインストール

# sudo yum install -y --enablerepo=remi,remi-php71 php php-devel php-mysql php-mbstring php-gd php-pear httpd-devel php-mysqli php-intl php-soap php-xmlrpc php-xml php-ldap php-pecl-zip

追加リポジトリの無効化

phpのと関連モジュールのインストールが終わったら、viでepelリポジトリの設定ファイルを開き、
# vi /etc/yum.repos.d/epel.repo

epelのenableを0=Falseに変更。
[epel]
~中略~
enabled=0
~後略~
※これをしておかないとyum update時に公式のパッケージもepelで置き換わってしまう。

ちなみに
# cat /etc/yum.repos.d/remi.repo
で確認したところRemiリポジトリの方はインストール後のデフォルト値がenable=0なので特に弄らないでよさそう。

phpの設定

# vi /etc/php.ini

変更点は次の通り
memory_limit = 2048M ※環境及び環境次第
post_max_size = 2048M ※環境及び環境次第
default_charset = "UTF-8"
upload_max_filesize = 2048M ※環境及び運用次第
date.timezone = 'Asia/Tokyo';1660行目
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass

MariaDBの文字コード設定と有効化

# vi /etc/my.cnf

以下の内容に修正
[client]
default-character-set = utf8mb4
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
innodb_file_format = Barracuda
innodb_file_per_table = 1
innodb_large_prefix
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
skip-character-set-client-handshake
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[mysql]
default-character-set = utf8mb4
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

# sudo systemctl enable mariadb.service
# sudo systemctl start mariadb.service

# sudo mysql_secure_installation
Enter current password for root (enter for none):[そのままエンター]

OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n][そのままエンター]
New password:[your password]
Re-enter new password:[your password]
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
~後略~
ここから先は全部エンターでOK。

Moodle用DB作成

# mysql -u root -p
Enter password:[YourRootPassWord]
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12
Server version: 5.5.56-MariaDB MariaDB Server

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>create database moodle default character set utf8;
MariaDB [(none)]>grant all on moodle.* to moodle@localhost identified by '[YourDBPassWord]';
MariaDB [(none)]>flush privileges;
MariaDB [(none)]>quit;

Moodleのダウンロード

# sudo yum install -y wget
# cd /var/www/html/
# wget https://download.moodle.org/stable35/moodle-latest-35.tgz
※このURLはその時点で公式(https://download.moodle.org/releases/latest/)からダウンロードできるものを拾ってくる。

ファイルの展開と権限設定

# tar xvzf moodle-latest-35.tgz
# rm -rf moodle-latest-35.tgz

# mkdir /var/www/moodledata
# chmod -R 755 /var/www/
# chown -R apache.apache /var/www/

config.phpの設定

# mv config-dist.php config.php
# vi config.php

以下を変更
$CFG->dbtype    = 'mariadb';      // 'pgsql', 'mariadb', 'mysqli', 'sqlsrv' or 'oci'
$CFG->dbuser    = 'moodle';   // your database username
$CFG->dbpass    = '[YourDBPassWord]';   // your database password
$CFG->wwwroot   = 'http://localhost/moodle';
$CFG->dataroot  = '/var/www/html/moodledata';

SE Linuxの無効化

# setenforce 0
# vi /etc/selinux/config

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

Apacheの有効化と起動

# sudo systemctl enable httpd.service
# sudo systemctl start httpd.service

Firewallの設定

# sudo firewall-cmd --add-port=80/tcp --permanent
# sudo firewall-cmd --reload

80番ポートのフォワーディング設定を追加

※今回VirtualBoxをネットワークNATで使用しているため。
 詳しくは↓の記事参照。

ブラウザから諸設定

ブラウザで http://localhost/moodle/admin/index.php へ接続。


Continueをクリック。

チェックステータスの確認

今回の手順では次のようになった。

Server checks
php_setting
opcache.enable
PHP setting should be changed.PHP opcode caching improves performance and lowers memory requirements, OPcache extension is recommended and fully supported.
Check
unicode
must be installed and enabledOK
database
mariadb (5.5.56-MariaDB)
version 5.5.31 is required and you are running 5.5.56OK
php
version 7.0.0 is required and you are running 7.1.18OK
pcreunicode
should be installed and enabled for best resultsOK
php_extension
iconv
must be installed and enabledOK
php_extension
mbstring
should be installed and enabled for best resultsOK
php_extension
curl
must be installed and enabledOK
php_extension
openssl
must be installed and enabledOK
php_extension
tokenizer
should be installed and enabled for best resultsOK
php_extension
xmlrpc
should be installed and enabled for best resultsOK
php_extension
soap
should be installed and enabled for best resultsOK
php_extension
ctype
must be installed and enabledOK
php_extension
zip
must be installed and enabledOK
php_extension
zlib
must be installed and enabledOK
php_extension
gd
must be installed and enabledOK
php_extension
simplexml
must be installed and enabledOK
php_extension
spl
must be installed and enabledOK
php_extension
pcre
must be installed and enabledOK
php_extension
dom
must be installed and enabledOK
php_extension
xml
must be installed and enabledOK
php_extension
xmlreader
must be installed and enabledOK
php_extension
intl
must be installed and enabledOK
php_extension
json
must be installed and enabledOK
php_extension
hash
must be installed and enabledOK
php_extension
fileinfo
must be installed and enabledOK
php_setting
memory_limit
recommended setting detectedOK
php_setting
file_uploads
recommended setting detectedOK
Other checks
site not https
if this test fails, it indicates a potential problemIt has been detected that your site is not secured using HTTPS. It is strongly recommended to migrate your site to HTTPS for increased security and improved integration with other systems.
Check
×Your server environment meets all minimum requirements.


もしバージョンの微妙な変化等で「this test must pass」が出る場合は修正の必要がある。


上記であれば動作には特に問題ないので、Continueをクリックするとインストールプロセスが開始するので、終わるまで待つ。

あとはウィザードに従えばとりあえずログイン可能な状態までは終わるはず。

無事完了。

後日バーチャルアプライアンスで配布予定の設定は次の通り。
OS:root/root
Moodle:admin/Mood1e@Adm1n

一度仕事でやったことがあった割には1人日くらいかかった。やっぱメモとか手順って大事。

1 件のコメント:

匿名 さんのコメント...

moodleは多言語をあつかうので、
mbstring.language = neutral
にしたほうが良いと思うのですが、いかがでしょうか。

また collation-server の値は、
utf8mb4_unicode_ci だと絵文字が区別できないようなので、
utf8mb4_bin という選択肢もありではないかと。

mariadbが local なので、ソケット通信を設定するのはいかがでしょうか。
$CFG->dboptions の 'dbsocket' だったかと

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...