AWSからWordPressを起動する際に詰まったところ

# この記事なんの記事
結構前に購入した「[Amazon Web Service 基礎からのネットワーク＆サーバー構築](https://www.amazon.co.jp/Amazon-Web-Services-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%EF%BC%86%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89-%E6%94%B9%E8%A8%823%E7%89%88-%E5%A4%A7%E6%BE%A4-ebook/dp/B084QQ7TCF)」という本を基にAWS上でWordPressを起動するところまでをやってみました。
私が持っていたのは2019年2月発行の第4版ですが、書籍通りの手順でやってみてできなかった箇所がいくつかあったので、解決方法をメモしておきます。
エラーメッセージ含め、色々とメモが残っていなくて雑気味です。すみません。

# 前提
AWSなどの設定は上記の書籍に準拠してCentOS7を使用しています。

# つまったところ
## MySQLのWordPress用のユーザー作成
DBサーバーにMySQLをインストールをして、以下のSQLでユーザー作成をしようとしましたが、エラーになりました。
```
mysql> grant all on wordpress.* to wordpress@"%" identified by "wordpresspasswd";
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by "wordpresspasswd"' at line 1
```
インストールしたのはMySQLのバージョン`8.0.28`で、8系ではgrantとCreate Userは同時に実行できないとのこと。[こちらの記事](https://qiita.com/egnr-in-6matroom/items/e77dfc719ed3dfbe0027)を参考にさせていただきました。
Create Userをしてからgrantして解決。

## WordPressでPHPのバージョンエラー
PHPをインストールして、いざWordPressを起動してみると、「PHPのバージョンが5.4で古いからNGよ。少なくとも5.6以上を使ってね」という旨のエラーが表示されました。
※エラーメッセージメモするの忘れました...すみません。

書籍通りに以下のコマンドでインストールしたのですが、このコマンドだと`5.4.16`がインストールされてしまっていたので、バージョンアップを実施する必要がありました。
```
sudo yum -y install php php-mysql php-mbstring
```

[こちらの記事](https://qiita.com/heimaru1231/items/84d0beca81ca5fdcffd0)を参考にさせていただき、PHP7系をインストールしようと試みることに。
すでにインストールされているPHP5.4.16をアンインストール
```
sudo yum remove php-*
```

PHP7.0.xをインストール
```
sudo yum install --disablerepo=* --enablerepo=epel,remi,remi-safe,remi-php70 php
```
その後`php --version`で確認すると、インストールされてない。
バーっと実行されるので最初ログを飛ばし読みして気づかなかったのですが(おい)、PHP7.0をインストールしようとして、以下のエラーが発生していました。
```
Error: Package: libraqm-0.7.0-4.el7.x86_64 (epel)
           Requires: libharfbuzz.so.0()(64bit)
Error: Package: gd-last-2.3.3-2.el7.remi.x86_64 (remi)
           Requires: libfontconfig.so.1()(64bit)
```

インストール時の依存関係のエラーのようなので、Requiresの後のものをググって、それぞれ以下ページにたどり着く。
https://centos.pkgs.org/7/centos-x86_64/harfbuzz-1.7.5-2.el7.x86_64.rpm.html
https://centos.pkgs.org/7/centos-x86_64/fontconfig-2.13.0-4.3.el7.x86_64.rpm.html

ダウンロード用のファイルがあったので、以下コマンドでライブラリを取得。この辺見よう見まねです…。
```
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/harfbuzz-1.7.5-2.el7.x86_64.rpm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/fontconfig-2.13.0-4.3.el7.x86_64.rpm
```

その後再度7.0系のインストールコマンドを実行、今度はエラーメッセージも表示されず。バージョンを確認して完了！
```
php --version;
PHP 7.0.33 (cli) (built: Nov 15 2021 10:51:40) ( NTS )
```

## WordPressでデータベース接続エラー
apacheを再起動して、再度WordPressを開こうとしたところ、以下のエラーが表示されました。
![2020-01-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528357/006e3f15-da3a-b258-af5a-52fc1743c866.png)

色々遠回りしましたが、私は以下の3つの設定を変更することで解決しました。
1. wp-config.phpの書き換え
2. MySQLユーザーの認証方式の書き換え
3. MySQL本体の認証方式の書き換え

### 1. wp-config.phpの書き換え
ググってみると、`wp-config.php`というファイルの編集が必要なんだとか。
`wp-config.php`の編集方法は色々な方が記事を書いてくださっていますので、そちら参照。例：https://qiita.com/moomindani/items/9968df0d4396564bf74c
書籍上は `~/wordpress`以下にファイルがあって、それを`/var/www/html`にコピーしていたので、同じ手順で編集してコピーします。
```
cd ~/wordpress
vi wp-config.php
-- wp-configを設定に従って書き換え
sudo cp -r * /var/www/html
sudo chown apache:apache /var/www/html -R
```
### 2. ユーザーの認証方式の書き換え
apacheを再起動しても、1だけだとエラーは解消せずでした。`wp-config.php`のデバッグモードをONにしてみる。
```diff
- define( 'WP_DEBUG', false ); 
+ define( 'WP_DEBUG', true );
```

WordPressの起動画面に以下のエラーメッセージが表示されました。
```
mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in /var/www/html/wp/wordpress/wp-includes/wp-db.php on line 1753
mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client in /var/www/html/wp-includes/wp-db.php on line 1753
```

エラーメッセージをググって、[この記事](https://webree.jp/article/wordpress-mysql8-connection-error/)を参考にwordpress用のDBユーザーの認証を`caching_sha2_password`から`mysql_native_password`に変更しました。

### 3. MySQL本体の認証方式の書き換え
それでも解消せず、[こちら](https://qiita.com/worldgoodbye/items/afd30058f77f529bbabc)を参考にさせていただき、MySQL自体のデフォルトの認証形式を変えました。
DBサーバーに接続し、`etc/my.conf`を開いて、`default-authentication-plugin`の設定を変更(コメントアウトを外すだけ)。

```diff
- # default-authentication-plugin=mysql_native_password
+ default-authentication-plugin=mysql_native_password
```
その後、MySQLの再起動とapacheの再起動をしたら、WordPressのページが表示されるようになりました。
2までで解決する方が多いようですが、私の場合は3もやらないとだめでした。