在宅(テレワーク)で活躍する、eラーニング環境を手軽に構築できる、オープンソース、「Moodle(ムードル)」。
教育現場では、積極的に使われています。
eラーニングの分野では、かつては多額の初期投資が必要でしたが、今の時代、数時間で、初期設定が完了します。
ただ、クセがあり、苦労をするとも言われています(笑)。
Moodle 構築時間
今回は、CentOS7,apache 2.4,php 7.3,MySQL 5.7 という環境でインストールをしたいと思います。
今回は、ConoHa VPS
で行いました。
2時間以内で完了をしました。
ConoHa VPS
の、1Gプランでは1.5円/時間 なので、今回費用は、3円!
ははは!
時間単位のサーバーは、お手軽でいいですね!
事前準備
# cat /etc/centos-release CentOS Linux release 7.7.1908 (Core)
↑プレインストールされていた、CentOSのバージョンは、CentOS 7.7でした。
# yum update Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: ftp.riken.jp * epel-debuginfo: ftp.riken.jp * epel-source: ftp.riken.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp Resolving Dependencies --> Running transaction check ---> Package NetworkManager.x86_64 1:1.18.0-5.el7_7.1 will be updated ---> Package NetworkManager.x86_64 1:1.18.4-3.el7 will be an update ---> Package NetworkManager-libnm.x86_64 1:1.18.0-5.el7_7.1 will be updated ---> Package NetworkManager-libnm.x86_64 1:1.18.4-3.el7 will be an update
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 Importing GPG key 0x352C64E5: Userid : "Fedora EPEL (7) <epel@fedoraproject.org>" Fingerprint: 91e9 7d7c 4a5e 96f1 7f3e 888f 6a2f aea2 352c 64e5 Package : epel-release-7-11.noarch (@extras) From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 Is this ok [y/N]: y
↑このようなメッセージが出たら、「y」を押します。 ほかのインストール時でも、「y」を押して大丈夫
yum.noarch 0:3.4.3-167.el7.centos yum-plugin-fastestmirror.noarch 0:1.1.31-53.el7 yum-utils.noarch 0:1.1.31-53.el7 Replaced: iwl7265-firmware.noarch 0:22.0.7.0-72.el7 Complete!
↑完了
# cat /etc/centos-release CentOS Linux release 7.8.2003 (Core)
↑CentOS 7.8になりました。
# yum install openssl-devel # yum groupinstall "Development Tools" Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * epel: ftp.riken.jp * epel-debuginfo: ftp.riken.jp * epel-source: ftp.riken.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp Resolving Dependencies --> Running transaction check ---> Package autoconf.noarch 0:2.69-11.el7 will be installed --> Processing Dependency: m4 >= 1.4.14 for package: autoconf-2.69-11.el7.noarch --> Processing Dependency: perl(Data::Dumper) for package: autoconf-2.69-11.el7.noarch (略) perl-XML-Parser.x86_64 0:2.41-10.el7 perl-srpm-macros.noarch 0:1-8.el7 python-srpm-macros.noarch 0:3-32.el7 subversion-libs.x86_64 0:1.7.14-14.el7 ystemtap-client.x86_64 0:4.0-11.el7 systemtap-devel.x86_64 0:4.0-11.el7 trousers.x86_64 0:0.3.14-2.el7 Complete!
↑完了
SSHポート変更
SSHのポートを変更します。22番ポートから違うポート番号にすることにより、アタックされにくくなります。
# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-XXXXX.xml # vi /etc/firewalld/services/ssh-XXXXX.xml <port protocol="tcp" port="22"/> ↓ <port protocol="tcp" port="XXXXX"/>
↑「xxxxx」は、任意の数字(ポート)です。
# firewall-cmd --permanent --add-service=ssh-XXXXX # firewall-cmd --reload
↑「xxxxx」は、数字です。firewallで、解放するように、設定をします。
# vi /etc/ssh/sshd_config # Port 22 ↓ Port XXXXX
↑sshサービスのポートも変更をします。「xxxxx」は、数字です。
# systemctl restart sshd # firewall-cmd --permanent --remove-service=ssh # firewall-cmd --reload
↑sshサービスを再起動して、firewallの22番を削除します。
MySQLインストール
# rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm # yum install mysql-community-server # mysqld --version mysqld Ver 5.7.30 for Linux on x86_64 (MySQL Community Server (GPL))
↑MySQL5.7が、入りました。
# vi /etc/my.cnf character-set-server=utf8 [client] default-character-set=utf8
↑utf8をデフォルトの漢字コードにします。
# systemctl start mysqld.service # systemctl enable mysqld.service
↑MySQLを起動して、自動起動も設定します。
# cat /var/log/mysqld.log | grep password 2020-05-XXTXX:XX:XX.091384Z 1 [Note] A temporary password is generated for root@localhost: (デフォルトパスワード)
↑初期のパスワードをチェックします。
# mysql_secure_installation mysql_secure_installation: [ERROR] unknown variable 'default-character-set=utf8'
↑初期設定をしようとすると、エラーが出てきます。
# vi /etc/my.cnf
において、
[client] default-character-set=utf8
↑の記述は不要でした。この2行を削除します。
# systemctl restart mysqld.service
↑my.cnfを変更して、MySQLを再起動します。
# mysql_secure_installation Securing the MySQL server deployment. Enter password for user root: (デフォルトパスワード) # ↑表示されたパスワードを入れます。MySQL8.xでは、この手順は、省かれます。 The existing password for the user account root has expired. Please set a new password. New password: (DBのrootのパスワード) Re-enter new password: (DBのrootのパスワード) #↑新しいパスワードを入れます。 The 'validate_password' plugin is installed on the server. The subsequent steps will run with the existing configuration of the plugin. Using existing password for root. Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : n # ↑パスワードの複雑さが100点満点。また、変更する?と聞かれているので、「n」とします。 ... skipping. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL 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. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y - Dropping test database... Success. - Removing privileges on test database... Success. # ↑昔は、デフォルトであった、誰でもアクセスできるDBなどを削除します。 Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y Success. All done!
↑MySQLの初期設定、完了しました。
MySQL Moodle設定
# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.30 MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> insert into user (host,User,authentication_string,ssl_cipher,x509_issuer,x509_subject) values ('localhost','user01',password('パスワード'),'','',''); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> insert into db (host,db,user) values ('localhost','db01','user01'); Query OK, 1 row affected (0.00 sec) mysql> update db set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Execute_priv='Y',Event_priv='Y',Trigger_priv='Y' where db='db01'; Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> create database db01; Query OK, 1 row affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
↑これで、DB名「db01」、ユーザ名「user01」と、登録されました。
httpd (apache)
# yum install httpd # httpd -version Server version: Apache/2.4.6 (CentOS) Server built: Apr 2 2020 13:13:23
↑ Apache 2.4.6が入りました。
vi /etc/httpd/conf/httpd.conf <Directory "/var/www/html"> のセクション
Options Indexes FollowSymLinks ↓ Options All -Indexes +SymLinksIfOwnerMatch -FollowSymLinks AllowOverride None ↓ AllowOverride AuthConfig FileInfo Indexes Limit Options=MultiViews,Indexes
と変更をします。
# systemctl start httpd.service # systemctl enable httpd.service
↑httpdのサービスを起動して、自動起動も設定をします。
# firewall-cmd --add-service=http --zone=public --permanent # firewall-cmd --add-service=https --zone=public --permanent # firewall-cmd --reload
↑80番と、443番(https,SSL)のポートを開けます。
PHP 7.3
# wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # rpm -ivh epel-release-latest-7.noarch.rpm # yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # yum-config-manager --enable remi-php73 # yum install php73 php73-php httpd mod_ssl # yum install --enablerepo=remi,remi-php73 php php-mbstring php-xml php-xmlrpc php-gd php-pdo php-mysqlnd php-pecl-mysql php-pecl-zip php-pecl-apc
# php -v PHP 7.3.18 (cli) (built: May 12 2020 08:04:33) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.18, Copyright (c) 1998-2018 Zend Technologies
↑ php 7.3.18が入りました。
# yum install php-intl php-soap php-opcache
↑moodle では、この3つのmoduleが重要。必須ではないが、推奨のモジュールです。
php と httpd の連携
# vi /etc/httpd/conf/httpd.conf AddType application/x-httpd-php .php
↑上記、1行を加えて、.phpの設定をします。
# systemctl restart httpd.service
↑httpdのサービスを再起動します。
moodle 用設定 80番ポート
vi /etc/httpd/conf.d/virtual.conf <VirtualHost XXX.XXX.XXX.XXX:80> ServerName (ドメイン名、FQDN) DocumentRoot /var/www/html </VirtualHost>
↑80番ポートの設定
SSL (Let’s Encrypt)
Let’s Encryptの初期設定は、対象FQDNの80番ポートにアクセスします。
80番ポートセッティング後に、Let’s Encryptのコマンドを実行します。
# yum install certbot # wget https://dl.eff.org/certbot-auto # chmod 755 certbot-auto #./certbot-auto certonly --non-interactive --agree-tos --webroot -w /var/www/html -d (FQDN) --email (メールアドレス) IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/(FQDN)/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/(FQDN)/privkey.pem Your cert will expire on 2020-xx-xx. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew"
moodle 用設定 443番ポート(SSLポート)
vi /etc/httpd/conf.d/ssl.conf <VirtualHost _default_:443> --- </VirtualHost>
↑SSLの初期設定、上記の部分を削除
vi /etc/httpd/conf.d/ssl.conf <VirtualHost XXX.XXX.XXX.XXX:443> ServerName (FQDN) DocumentRoot /var/www/html SSLProtocol all -SSLv2 -SSLv3 SSLEngine on SSLCertificateFile /etc/letsencrypt/live/(FQDN)/fullchain.pem SSLCertificateChainFile /etc/letsencrypt/live/(FQDN)/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/(FQDN)/privkey.pem </VirtualHost>
↑SSLの用の設定を入れます。
↑httpsで、アクセスできました。
moodle 本体設定
moodleダウンローサイトから、3.8の最新版、3.8+というのをダウンロードします。
moodle-latest-38.tgz
というファイル名です。
# tar xzvf moodle-latest-38.tgz # cp -a moodle /var/www/html/
今回、https://(FQDN)/moodle/
に、moodleの最新版を入れます。
↑「Language」、「日本語(ja)」を選びます。
↑「次へ」を押します。
パスを確認する ウェブアドレス :https://(FQDN)/moodle Moodleディレクトリ:/var/www/html/moodle データディレクトリ:/var/www/moodledata
# mkdir /var/www/moodledata # chmod 777 /var/www/moodledata
↑データディレクトリを作成します。
↑データベース、データベースドライバを選択する
というところで、
「Moodeではいくつかのデータベースサーバのタイプをサポートします。どのタイプを使用するか分からない場合、サーバ管理者にご連絡ください。」と出てきます。
MySQL (mysqli)
MarinaDB
PostgreSQL
Oracle
SQLServer
が設定できますが、今回は、「MySQL」で行います。
データベースのデータベース設定を行います。
データベースホスト :localhost データベース名 :db01 データベースユーザ :user01 データベースパスワード :(パスワード) テーブル接頭辞 :mdl_ データベースポート : Unixソケット :/var/lib/mysql/mysql.sock
↑「Unixソケット」は、「空欄」でもいいかもしれません
# vi /var/www/html/moodle/config.php <?php // Moodle configuration file unset($CFG); global $CFG; $CFG = new stdClass(); $CFG->dbtype = 'mysqli'; $CFG->dblibrary = 'native'; $CFG->dbhost = 'localhost'; $CFG->dbname = 'db01'; $CFG->dbuser = 'user01'; $CFG->dbpass = '(パスワード)'; $CFG->prefix = 'mdl_'; $CFG->dboptions = array ( 'dbpersist' => 0, 'dbport' => '', 'dbsocket' => '/var/lib/mysql/mysql.sock', 'dbcollation' => 'utf8_general_ci', ); $CFG->wwwroot = 'https://(FQDN)/moodle'; $CFG->dataroot = '/var/www/moodledata'; $CFG->admin = 'admin'; $CFG->directorypermissions = 0777; require_once(__DIR__ . '/lib/setup.php'); // There is no php closing tag in this file, // it is intentional because it prevents trailing whitespace problems!
↑指定された設定を
/var/www/html/moodle/config.php
として保存をします。
↑著作権関係がでてくるので、理解をして、「続ける」を押します。
↑phpなどの設定をチェックしてくれます。
utf8のエラー。utf8mb4へ
↑画面下に「滞在的な問題」として表示されます。
mysql_full_unicode_support このテストに不適合の場合、潜在的な問題が存在することを意味します。 現在のMySQLまたはMariaDBの設定では「utf8」を使用しています。この文字セットは絵文字を含む4バイト文字をサポートしていません。これらの文字を使用した場合、結果としてレコードのアップデート時にエラーが発生してデータベースに送信されるデータが失われてしまいます。あなたの設定を「utf8mb4」に変更することをお考えください。詳細はドキュメンテーションをご覧ください。
↑このエラーを解消するには、
# vi /var/www/html/moodle/config.php $CFG->dboptions = array ( 'dbpersist' => 0, 'dbport' => '', 'dbsocket' => '/var/lib/mysql/mysql.sock', 'dbcollation' => 'utf8_general_ci', ); ↓ 'dbcollation' => 'utf8mb4_unicode_ci'
↑と設定を変更するとと、「すべて合格」と出てきますが、根本的な解決にはなりません。
utf8mb4では、絵文字などの4バイトコードを扱う事ができます。
まずはDBの設定を見てみます。
mysql> use db01; Database changed mysql> show variables like '%char%'; +--------------------------------------+----------------------------+ | Variable_name | Value | +--------------------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | validate_password_special_char_count | 1 | +--------------------------------------+----------------------------+ 9 rows in set (0.01 sec)
↑utf8になっています。「character_set_system」以外を、utf8mb4にしなければいけません。
--------------------------------- CREATE TABLE sushi( id INT AUTO_INCREMENT, name VARCHAR(20), INDEX(id) ); INSERT INTO sushi(name) VALUES("タマゴスシ"); INSERT INTO sushi(name) VALUES("マグロ\U+1F363スシ"); mysql> INSERT INTO sushi(name) VALUES("マグロ\U+1F363スシ"); ERROR 1366 (HY000): Incorrect string value: '\xF0\x9F\x8D\xA3\xE3\x82...' for column 'name' at row 1
↑とエラーが出てきます。
vi /etc/my.cnf [mysqld] # innodb_file_format = Barracuda # innodb_large_prefix # moodleで指定している、上記は、5.7からは、デフォルトなので、外します。 # character-set-server=utf8 # ↓下記に変更 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci skip-character-set-client-handshake innodb_file_per_table = 1 # 上記3つを追加
↑my.cnfを変更します。
# systemctl restart mysqld.service
↑MySQLを再起動します。
mysql> show variables like '%char%'; +--------------------------------------+----------------------------+ | Variable_name | Value | +--------------------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | validate_password_special_char_count | 1 | +--------------------------------------+----------------------------+ 9 rows in set (0.00 sec)
↑ utf8mb4になってきました。
mysql> ALTER DATABASE db01 CHARACTER SET utf8mb4;
↑作成済みのデータベースも変更をします。
mysql> show variables like '%char%'; +--------------------------------------+----------------------------+ | Variable_name | Value | +--------------------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | | validate_password_special_char_count | 1 | +--------------------------------------+----------------------------+ 9 rows in set (0.01 sec)
↑「utf8mb4」になっています。よさそうです。
mysql> drop table sushi; Query OK, 0 rows affected (0.00 sec)
↑一度、テーブルを削除します。
mysql> CREATE TABLE sushi( -> id INT AUTO_INCREMENT, -> name VARCHAR(20), -> INDEX(id) -> ); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO sushi(name) VALUES("マグロ\U+1F363スシ"); Query OK, 1 row affected (0.00 sec)
↑うまくいきました。
MySQL5.5で?絵文字?を挿入/検索する – Qiita
↑参考サイト! ありがとうございます。
# vi /var/www/html/moodle/config.php $CFG->dboptions = array ( 'dbpersist' => 0, 'dbport' => '', 'dbsocket' => '/var/lib/mysql/mysql.sock', 'dbcollation' => 'utf8_general_ci', ); ↓ 'dbcollation' => 'utf8mb4_unicode_ci'
↑Moodleの設定を変更します。
↑再読み込みをします。
「あなたのサーバ環境は最小限の必要条件すべてに合格します。」
となりました。「続ける」を押します。
↑設定内容が表示されます。次の画面に行きます。
Moodle最終設定
↑インストレーション
「このページではサイトすべてを管理できる最高管理者アカウントを作成します。正しいメールアドレスおよび安全なユーザ名、パスワードを設定してください。あなたは後でさらに管理者アカウントを作成することができます。」
と出てきます。
赤字の「!」部分は、必須です。
必要事項を入れて次に行きます。
↑最後の設定です。「長いサイト名」と「サイト省略名」を入れます。
↑お疲れ様です。この「ダッシュボード」のページが出れば、完了です。