AWS EC2 + CentOS 7.6 + Apache 2.4 + PHP 7.3 + MySQL 8.0 でWordPress5.1を動かす

# きっかけ
久しぶりにWordPressを触ってみたい衝動にかられて、"AWS WordPress"などで検索すると、
AWS謹製のチュートリアルを見つけたので何も考えずにインストールしてみた。

WordPress ウェブサイトを構築する
https://aws.amazon.com/jp/getting-started/projects/build-wordpress-website/

インストールできたはいいものの、「PHPのバージョンが古いよ」みたいなエラーが出たので
いっその事、一からインストールし直して最新バージョンにしてみようと試み、
Amazon Linuxにも慣れないのでCentOS7にして
ついでにMySQLも8.0系にしてみたら、いろいろハマったのでまとめてみる

# AWS EC2でインスタンスを作る
普通にEC2でインスタンスを作る

- EC2ダッシュボードから「インスタンスの作成」をクリック
- AWS Marketplaceから"CentOS 7 (x86_64) - with Updates HVM"を選択する
- 詳細が表示されたら、"Continue"をクリック
- インスタンスタイプはお好みで
- インターネットからアクセス可能なサブネットを選択
- 自動割り当てパブリック IPを有効にするか、インスタンス生成後Elastic IPを割り当てる
- セキュリティグループでSSHとHTTPを許可する

# OS周りの設定
インスタンスが立ち上がったらSSHでログインし、ひとまずアップデート
途中にGPGキーのインポートが行われるので、yを押してEnter

```
$ sudo yum update
```

必須ではないが、日本語環境にしておく

```shell

$ sudo yum install ibus-kkc vlgothic-*
$ sudo localectl set-locale LANG=ja_JP.UTF-8
$ source /etc/locale.conf
$ echo $LANG
ja_JP.UTF-8
```

試しにdateコマンドを打ってみると、UTC（協定世界時）が表示される

```
$ date
2019年  3月 21日 木曜日 17:50:02 UTC
```

これも必須ではないが、タイムゾーンを変更しておく
Time zoneが"Asia/Tokyo (JST, +0900)"になっているのを確認

```
$ sudo timedatectl set-timezone Asia/Tokyo
$ timedatectl
      Local time: 金 2019-03-22 02:52:31 JST
  Universal time: 木 2019-03-21 17:52:31 UTC
        RTC time: 木 2019-03-21 17:52:30
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
```

あとでwgetとunzipを使うのでここでインストールしておく
vim派の人はvim等、必要なものを入れておく

```shell

$ sudo yum install wget unzip vim
```

SELinuxを無効化する
（これをうっかり忘れると、WordPressのDB設定時のwp-config.phpが生成できない）

```
$ getenforce
Enforcing
$ sudo vim /etc/selinux/config
```

```conf:/etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
```

configファイルの編集が終わったら一度再起動する

```
$ sudo reboot
```

再起動後、SELinuxが無効化されていることを確認

```
$ getenforce
Disabled
```

# WordPress 5.1 をダウンロードする

先にWordPressをダウンロードしておく
以下のURLから、必要なバージョンを確認しURLをコピーしておく
（2019年3月22日時点での最新バージョンは5.1.1)

https://ja.wordpress.org/download/releases/

```shell
$ wget https://ja.wordpress.org/wordpress-5.1.1-ja.zip
$ unzip wordpress-5.1.1-ja.zip
$ ls -l
合計 11892
drwxr-xr-x. 5 centos centos     4096  3月 13 15:03 wordpress
-rw-rw-r--. 1 centos centos 12171656  3月 13 15:04 wordpress-5.1.1-ja.zip
```

# Apache 2.4 を入れる
次にWebサーバのApacheをインストール


```shell
$ sudo yum install httpd 
```
何も考えずにインストールすれば、2.4系がインストールされる。

```shell
$ httpd -v
Server version: Apache/2.4.6 (CentOS)
Server built:   Nov  5 2018 01:47:09
```

先程ダウンロードしたWordPressを/var/www/下に移動し、所有者等を変更する

```shell
$ sudo cp -r wordpress /var/www/
$ sudo chown -R apache:apache /var/www/wordpress
$ ls -l /var/www/
合計 4
drwxr-xr-x. 2 root   root      6 11月  5 10:47 cgi-bin
drwxr-xr-x. 2 root   root      6 11月  5 10:47 html
drwxr-xr-x. 5 apache apache 4096  3月 22 02:59 wordpress
```

Apacheの設定を変更する
先程/var/www/下に移動したWordPressディレクトリをドキュメントルートにし、
.htaccessによるディレクティブの上書きを許可する

```shell
$ cd /etc/httpd/conf
$ sudo cp -pi httpd.conf httpd.conf.org
$ sudo vim httpd.conf
```

``` conf:httpd.conf
# 119行目付近を修正
#DocumentRoot "/var/www/html"
DocumentRoot "/var/www/wordpress"

# 以下を追記
<Directory "/var/www/wordpress">
    AllowOverride All
</Directory>
```


インストール後は停止しているので起動し、ついでに自動起動の設定をしておく

```
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
```

起動していること(active)と、自動起動になっていること(httpd.service; enabled;)を確認

```shell
$ systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2019-03-22 03:12:38 JST; 12s ago
```

# PHP 7.3 を入れる
何も考えずにインストールすると5.4系がインストールされてしまうので
EPELのレポジトリと、Remiのレポジトリを追加する

```shell
$ sudo yum install epel-release
$ sudo yum install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
```

PHP本体とwordpressに必要なPHP拡張をインストールする
GPGキーのインポート確認にはyを押してEnter

```shell
$ sudo yum install php php-mysql php-mbstring --enablerepo=remi-php73
```

インストールが完了したら念の為、バージョン確認

```shell
$ php --version
PHP 7.3.3 (cli) (built: Mar  5 2019 13:50:38) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.3, Copyright (c) 1998-2018 Zend Technologies
```

```shell
$ rpm -qa | grep php
php-json-7.3.3-1.el7.remi.x86_64
php-pdo-7.3.3-1.el7.remi.x86_64
php-7.3.3-1.el7.remi.x86_64
php-cli-7.3.3-1.el7.remi.x86_64
php-mbstring-7.3.3-1.el7.remi.x86_64
php-common-7.3.3-1.el7.remi.x86_64
php-mysqlnd-7.3.3-1.el7.remi.x86_64
```

Apacheを再起動しておく

```
$ sudo systemctl restart httpd
```

ここまで完了すると、ブラウザでサーバへアクセスしたときにWordPressの設定画面が表示される。
外部のDBに接続する場合はこれで大丈夫なはずだが、今回はlocalhostにDBを用意する

# MySQL 8.0 を入れる

MySQLの公式サイトから、使用するMySQLのレポジトリのURLを確認する
https://dev.mysql.com/downloads/repo/yum/

"Red Hat Enterprise Linux 7 / Oracle Linux 7 (Architecture Independent), RPM Package"のDownloadボタンをクリックし、
表示されるログイン画面下部の、"No thanks, just start my download."のリンク先URLをコピーしておく
コピーしたURLを使って、rpmコマンドでレポジトリをインストール


```shell
$ sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm
```

MySQLをインストールする
GPGキーのインポートがでたら、yを押してEnter

```shell
$ sudo yum install mysql-community-devel
$ sudo yum install mysql-community-server
```

念の為バージョン確認

```
$ mysql --version
mysql  Ver 8.0.15 for Linux on x86_64 (MySQL Community Server - GPL)
```

```
$ rpm -qa | grep mysql
mysql-community-libs-8.0.15-1.el7.x86_64
mysql-community-client-8.0.15-1.el7.x86_64
mysql80-community-release-el7-2.noarch
mysql-community-common-8.0.15-1.el7.x86_64
mysql-community-devel-8.0.15-1.el7.x86_64
php-mysqlnd-7.3.3-1.el7.remi.x86_64
mysql-community-libs-compat-8.0.15-1.el7.x86_64
mysql-community-server-8.0.15-1.el7.x86_64
```

起動する前に、my.cnfを修正する
ここでハマったのが、"default_authentication_plugin"という設定

MySQLの8系からパスワードが自動的に暗号化されたそうで、
この設定がないとWordPressからDBへ接続する際の認証で弾かれる

MySQL 8系で PHPから接続できない場合
http://bashalog.c-brains.jp/18/12/17-191903.php

```shell
$ sudo vim /etc/my.cnf
```

``` conf:my.cnf
[mysqld]

# 最下部に以下を追記
log_timestamps=SYSTEM
skip-character-set-client-handshake
default_authentication_plugin= mysql_native_password
```

設定を書き換えたら、MySQLを起動します

```config

$ sudo systemctl start mysqld
$ sudo systemctl enable mysqld
```
```
$ systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2019-03-22 03:33:59 JST; 16s ago
```

MySQLのrootユーザの初期パスワードを確認します

```
$ grep password /var/log/mysqld.log
2019-03-22T03:33:55.697759+09:00 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: (ここに初期パスワード)
```

MySQLのrootユーザのパスワードを変更します。

```
$ mysql_secure_installation --use-default

Securing the MySQL server deployment.

Enter password for user root:(ここに上で確認した初期パスワードを入力する)

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

New password:（新しいパスワード）

Re-enter new password:（新しいパスワード）

(中略)

All done!
```

パスワードの変更が完了したら、rootユーザでログインしてデータベースを作成します

```sql

$ mysql -u root -p
Enter password:(先程変更したパスワードを入力する)

(中略)

mysql> create database wordpress;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)
mysql> quit
```

# WordPressのインストール

必要なものを一通り入れ終わったので、ブラウザからサーバにアクセスしてWordPressのセットアップ画面が表示されることを確認

http://(AWS EC2インスタンスに割り当てられているGlobal IP)

| 設定                   | 値                              | 備考               |
|:-----------------------|:--------------------------------|:------------------:|
| データベース名         | wordpress                       |                    |
| ユーザ名               | root                            |                    |
| パスワード             | (MySQLのrootユーザのパスワード) |                    |
| データベースのホスト名 | localhost                       |                    |
| テーブル接頭辞         | wp_                             | 必要に応じて変更   |

問題なく接続できれば、/var/www/wordpress/にwp-config.phpが生成され
必要情報を記入するページに誘導されるので、WordPressライフを始めることができます！

# さいごに
細かいところでハマりまくったので、トラブルシューティングのいい練習になりました


# 参考サイト
[日本語環境にする](https://www.server-world.info/query?os=CentOS_7&p=japanese)
[CentOSにWordPressをインストール](https://qiita.com/ikenyal/items/b599d7a29d884e67b3a9)
[PHP 7.3 の最新版を CentOS 7.5 に yum インストールする](https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3523)
[MySQL 8.0 を yum でインストール&設定メモ](https://blog.apar.jp/linux/9868/)