EC2のLinuxにPHPとMySQL・Moodleをインストールした。Database Connection エラーとPHPintlが有効化できないときの回避方法

Moodleインストール手順

AWSのEC2・Linuxに自分でMoodleを構築する方法

AWSのEC2に自分でMoodleを構築する方法は面倒くさいです。デメリットは面倒くさいこと。メリットは特にありません。自分で苦労して作った達成感くらいが味わえる、くらいですかね。

手順

ざっくりとした手順です。

  • AWS上にEC2を作成する 
  • 必要なプロダクトをインストールする

ここで、必要なプロダクトというのは、Apache(Webサーバー)、データベース(MySQL)、Moodleを動かすためのモジュール(?というのか?)であるPHPです。

これらを次の順番で入れていきます。

  1. Apache
  2. PHP
  3. MySQL
  4. Moodle

これらを順番に入れていきます。ちなみにMoodleの最新バージョン(この時3.10)に合わせて各プロダクトのバージョンは次のようにしています。

Moodleのシステム要件 2021年3月現在

PHP 7.2, MariaDB 10.2.29 or MySQL 5.7 or Postgres 9.6 or MSSQL 2012 or Oracle 11.2

  • MySQL – 最小バージョン 5.1.33 →なのでインストールしたのは (mysqld 5.7.34) 
  • Apache -(httpd -v)で2.4.46
  • PHP 7.3

入れる前にMariaDB削除

さっそくサーバーを作っていきます。ここで大事なことはMariaDBを削除することです。MariaDBとはAWSがMySQLを改良したデータベースで、EC2のAmazon Linuxに初めから導入されています。これをまずアンインストールします。

sudo yum list installed | grep mariadb →すでにインストールされているMariaDBを探す
sudo yum remove mariadb-libs*→インストールされているMariaDBを削除

ApacheWebサーバーを入れる

作成したEC2上のAmazon LinuxにApache Webサーバーをインストールします。

sudo yum install -y httpd →Apacheをインストール

PHPをインストール

Apacheが無事インストール出来たら、続いてはPHPをインストールします。

sudo amazon-linux-extras install php7.3

続いて拡張モジュールも次のコマンドでインストール

sudo yum install php-cli php-common php-devel php-fpm php-gd php-mysqlnd php-mbstring php-pdo php-xml php-intl php-xmlrpc php-soap

データベースMySQLをインストール

1、MySQL公式のyumリポジトリを追加
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

→mysql8.0リポジトリの追加(このリポジトリに5.7も含まれています)

2、MySQL8.0無効化とMySQL5.7有効化
$ sudo yum-config-manager -–disable mysql80-community
$ sudo yum-config-manager -–enable mysql57-community

3、mysql5.7がインストールできるか確認

$sudo yum info mysql-community-server

4、MySQL のインストール
$ sudo yum install mysql-community-server -y
そのあと、下記コマンドでMySQLのバージョンを確認
$ mysqld –version

MySQLの自動起動を設定します。Webサーバーもね。

systemctl enable mysqld.service

5、MySQLのrootパスワードを変える

続いて、MySQLの初期パスワードを変更します。初期パスワードはMySQLをインストールしたログファイルにrootのパスワードが記載されています。

/var/log/mysqld.logの中を探す

[Note] A temporary password is generated for root@localhost: Xg/g;#B/f6Y;

みたいな感じで。

このパスワードを「mysql_secure_installation 」を使って変更します。

# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 初期パスワードを入力する。ここでは「Xg/g;#B/f6Y;

The existing password for the user account root has expired. Please set a new password.

New password: 新しいパスワードを入力する

Re-enter new password: 再度同じ新しいパスワードを入力する

パスワードを忘れないようにメモしながら入力すると良いです。その他、DB管理に関することもいくつか聞かれます。セキュリティも考えて、すべて「y」にしています。

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.・・・・・

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.・・・・・

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y Success.・・・・・

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

という感じ。

6、Moodle用のDBを作成する

➀MySQLにログインする。

mysql -u root -p

→このとき先ほど設定したMySQLのパスワードを聞かれるので、普通にパスワードを入力する。

②MySQLにログイン出来たら、テーブルを作成する

CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

ここでは「moodle」という名前のデータベースにしていますが、名前は何でもいいですw

コマンドラインではこんな感じ。

mysql> CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Query OK, 1 row affected (0.00 sec)

③「show databases;」でDBが作成できているか確認する

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| moodle |
| mysql |
| performance_schema |
| sys |
+——————–+
5 rows in set (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

④MoodleがDBを操作できるように権限付与

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO ‘moodleuser’@’localhost’ IDENTIFIED BY ‘DBのパスワード’;

■Udemyはいろんなことが勉強できますよ。私も使っています。■

Moodleのインストール

ここまでおぜん立てして、いよいよMoodleのインストールです。

1、gitをインストール

Moodleのモジュールをダウンロードするため、gitをインストールします。

sudo yum install git

2、Moodleのモジュールをダウンロード

git clone -b MOODLE_310_STABLE git://git.moodle.org/moodle.git

このとき、Moodleのモジュールをダウンロードするフォルダを「/var/www/html」にしましょう。Apacheのドキュメントルートが「/var/www/html」だからね。

3、Moodleインストールのための設定

moodledataディレクトリを作る

/var/www/html以下にmoodledataフォルダを作成し、書き込み権限を与えます。

mkdir moodledata

chmod 777 moodledata/

4、オーナーを変える

chown apache /var/www/html/moodle

結果、こうなります。

drwxr-xr-x 58 apache root 4096 Jun 5 03:50 moodle
drwxrwxrwx 4 root root 47 Jun 5 02:06 moodledata

インストール終了後はオーナーを戻しておきます

5、moodleのインストール画面でインストール

後は「http://ホストアドレス/moodle」にアクセスし、Moodleのインストールを実行するだけです。この時エラーが出ます。

インストール時のノウハウ

Database Connection Failedが出る

DBを先に作ってないのに、Moodleをインストールしようとすると、Database Connection faildが出ます。当然ちゃ当然ですが、わからずはまりました。Moodleのインストールには、先に空のデータベースを作っておきましょう。

MoodleのDatabase Connection Failed

PHPのintlモジュールでエラー

Moodleをインストールする際、PHP拡張モジュールのインストールを促されます。追加モジュールとしてyum install phpのintlして、成功しても全く有効化されませんでした。phpinfo();でも出てこない。

困り果てたので、一度PHPを全削除、再度PHPをインストール、拡張モジュールの中にintlを入れて再導入することで治りました。

これからはMoodle側の運用について調べていきます。

■サーバー立ててみる。話はそれからです。■