Amazon linux 2023 にWordpress6.4.3をインストール

# なにしたの
とあるミッションがあり、Wordpressにプラグインを入れて動作確認をすることが必要になりました。
最近あまりwordpressを触っていないので、AWS上に軽く立てて動かそうというのが狙いです。
以下の解説はインストール開始以降に絞っており、事前にAWSでインスタンスを立ててnetwork設定したりするところは大いに割愛しています。

# 参考にしたもの

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/hosting-wordpress.html

## いろいろバージョン
<dl>
  <dt>EC2</dt>
  <dd>Amazon Linux 2023 AMI 2023.3.20240304.0 x86_64 HVM kernel-6.1</dd>
  <dt>mysql</dt>
  <dd>Ver 8.0.36 for Linux on x86_64 (MySQL Community Server - GPL)</dd>
  <dt>php</dt>
  <dd>php8.2-mysqlnd-8.2.15-1.amzn2023.0.1.x86_64</dd>
  <dt>wordpress</dt>
  <dd>6.4.3</dd>
<dl>


# インストール前提事項
aws上にEC2を立てています。
VPC、interet gateway、SecurityGroupはもともと作ってあります。

EC2を立てた後、コンソール上public ipやホスト名が見当たらないなーと少々悩みましたが、
EC2インスタンス作成の際、VPCのpublic ipを自動で取得するようになっていませんでした。（忘れがち）
インスタンスを立て直し、正しく設定してssh接続が可能になりました。

## wordpressを拾ってきて解答
EC2にsshログイン後、ec2-userのhomeにてバイナリを拾ってきて解凍。
```
wget https://wordpress.org/latest.tar.gz
tar -xzf latest.tar.gz
```

## mysqlのインストール
よくわからないので適当にググって開始。
リポジトリに接続し、community-serverをインストール。
```
sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm 
sudo yum install -y mysql-community-server
```
エラーが出たので、以下を実行。なんでそうしたのかは覚えていないけれど・・・
```
sudo yum install http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-3.el8.x86_64.rpm
```
その後
```
sudo yum install -y mysql-community-server
```
すると
```
Import of key(s) didn't help, wrong key(s)?
～
You can remove cached packages by executing 'yum clean packages'.
Error: GPG check FAILED
[ec2-user@ip-10-0-8-113 ~]$
```
とか出る。GPGが整合取れてないということらしい。
```
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum update
sudo yum install -y mysql-community-server
```

で成功。

## 起動とステータス確認
```
sudo systemctl start mysqld
sudo systemctl status mysqld
```
めでたく起動しました。
なお、mysqlのrootの初期パスワードはこの中に入ってます。
```
sudo cat /var/log/mysqld.log
```
ログを漁ると、パスワードが見つかります。
## mysqlのrootのパスワードを変更しよう
rootのパスワード変更が必要と思い、これもググって拾ったスクリプトを実行してみたが
```
mysql> set password for root@localhost=password('rootの新パスワード');
```
エラーになっちまった。ので調べてちゃんとSQLを投げる。
USER()でログインDBユーザのことを示すそうです。へえー。
```
mysql> ALTER USER USER() IDENTIFIED BY 'rootの新パスワード';
Query OK, 0 rows affected (0.01 sec)
```
うまく行きました。ではwodpressユーザを作成
```
mysql>
mysql> CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'wordpressパスワード';
Query OK, 0 rows affected (0.02 sec)
```

これでmysqlのrootのパスワードが変更、wordpressユーザ作成に成功しました。

## wordpress用のdatabaseの作成
```
CREATE DATABASE `wordpress-db`;
GRANT ALL PRIVILEGES ON `wordpress-db`.* TO "wordpress-user"@"localhost";
FLUSH PRIVILEGES;
```
databaseを作った後、PHPからmysqlへの接続用にwp-config.phpを修正する。
```
nano wordpress/wp-config.php
```
うーん、nanoはどうにも使いづらい。昔ながらのvim(vi)がらくちん。
今の人はvimなんか使わないのかな・・・。

DB_NAME
DB_USER
DB_PASSWORD
の設定を実施。

あとは認証鍵類（ランダム文字列）の再設定。AUTH_KEY,SALT等を更新
```
define('AUTH_KEY',         'ひみつ');
define('SECURE_AUTH_KEY',  'ひみつ');
define('LOGGED_IN_KEY',    'ひみつ');
define('NONCE_KEY',        'ひみつ');
define('AUTH_SALT',        'ひみつ');
define('SECURE_AUTH_SALT', 'ひみつ');
define('LOGGED_IN_SALT',   'ひみつ');
define('NONCE_SALT',       'ひみつ');
```
と、変更しました。

## apacheインストールとwordpress一式をコピー
apacheが入っていないことに気づいたのでインストール。
ec2-userのhomeに展開されてるwordpress一式をドキュメントルートにコピー
そんでもってhttpd.confを変更

```
sudo yum install httpd
sudo cp -r wordpress/* /var/www/html/

sudo vim /etc/httpd/conf/httpd.conf
```
\<Directory "/var/www/html"> AllowOverride None 行を AllowOverride All に変更

これは問題なく行きましたね。
## グラフィックライブラリのインストール
```
sudo yum install php-gd
```
実行後、検証
```
[ec2-user@ip-10-0-8-113 ~]$ sudo yum list installed php-gd
Error: No matching Packages to list
```
なぜかエラーに？
```
[ec2-user@ip-10-0-8-113 ~]$ sudo yum list installed php8.2-gd
Installed Packages
php8.2-gd.x86_64               8.2.15-1.amzn2023.0.1                @amazonlinux
[ec2-user@ip-10-0-8-113 ~]$
```
インストールには問題はなく、単にphp8.2で検索しないと出てこないという事でした

## apahe関連の権限付与
この辺は定番かと思われますが、ちゃんとやらないとセキュリティあぶない。
合ってるのかな？知らんけど、機密はないので参考資料にある通りでいいや。
```
sudo chown -R apache /var/www
sudo chgrp -R apache /var/www
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0644 {} \;
```
めでたく、apache,mysql起動状態となりました。
が！publicのURLにブラウザからアクセスしても見れません。当然Networkの問題はあるだろうとみて、
セキュリティグループのルールにインバウンドのhttpを追加してみました。これは成功。443,8000はあるけど80はなかったみたい。

でもブラウザにhttpの応答はあるものの、画面にはit works! しか表示されません。これ何だっけ？apacheが動きましたよってことだったかな？
ドキュメントルートを再確認し、index.phpを表示しようとしたところ、index.phpのソースがなぜかそのまま表示されます。

いろいろ考えてみたが **PHPがなかった** ようです。
要するに、Amazon linux 2023は素では何にも入ってないってことですね。
```
sudo yum install php

Installed:
  libsodium-1.0.18-13.amzn2023.0.1.x86_64
  libxslt-1.1.34-5.amzn2023.0.2.x86_64
  nginx-filesystem-1:1.24.0-1.amzn2023.0.2.noarch
  php8.2-8.2.15-1.amzn2023.0.1.x86_64
  php8.2-cli-8.2.15-1.amzn2023.0.1.x86_64
  php8.2-fpm-8.2.15-1.amzn2023.0.1.x86_64
  php8.2-mbstring-8.2.15-1.amzn2023.0.1.x86_64
  php8.2-opcache-8.2.15-1.amzn2023.0.1.x86_64
  php8.2-pdo-8.2.15-1.amzn2023.0.1.x86_64
  php8.2-process-8.2.15-1.amzn2023.0.1.x86_64
  php8.2-sodium-8.2.15-1.amzn2023.0.1.x86_64
  php8.2-xml-8.2.15-1.amzn2023.0.1.x86_64

Complete!
```
これでめでたくphpの画面らしきものは出たのですが、
**mysqlがないよ** みたいな事でブラウザ画面上、怒られてます。
ということで、軽くググってphp8.2のインストール手順のyum installを投げてみる。
```
sudo yum install php8.2-cli php8.2-common php8.2-mysql php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml php8.2-bcmath
```

でも、どうしてもphp8.2-mysqlがインストールされず蹴られちゃうんですよね。
ということで調べたところ、 **mysqliを入れるべし** との情報を得ました

## mysqliのインストール
```
sudo yum install php-mysqli
～
Installed:
  php8.2-mysqlnd-8.2.15-1.amzn2023.0.1.x86_64
```
やりました！

最後に再起動
```
sudo systemctl restart httpd
```

以上でwordpressの初画面の表示が成功いたしましたとさ。

めでたしめでたし。