Amazon Linux 2023でWordPressを構築

# 概要
EC2にWordPressを構築して初期表示までやってみたいと思います。

# EC2を作成
まずはEC2を作成していきます。

AMIはAmazon Linux 2023を使用します。
![スクリーンショット 2024-02-16 22.10.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851087/2f118cf4-6b13-b2cd-831e-762782b0aa0d.png)

キーペアも作成しておきます。(SSH接続で使う)
![スクリーンショット 2024-02-16 22.11.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851087/cb64e92d-ccc8-7471-37df-a67366264feb.png)

# EC2へSSH接続する
作成したキーペアを``.ssh``へ移動します。
```
% mv Downloads/aws-test-key.pem .ssh/
```
パーミッションを変更する。
```
% chmod 400 "aws-test-key.pem"
```
ここまできたらEC2にSSH接続してみる。
```
% ssh -i "aws-test-key.pem" ec2-user@インスタンスのパブリック IPv4 アドレス

  ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
```

一応rootユーザーになっておきます。
```
$ sudo su -
```
# パッケージをアップデート
まずパッケージを最新にしておきましょう
```
# dnf update -y
```
# Apacheのインストール
```
# dnf install -y httpd
```
Complete!と出たら完了です。

起動します。
```
# systemctl start httpd
```
起動されたか確認します。
active (running)になっていたら起動成功です。
```
# systemctl status httpd
```
自動起動するようにしておきます。
```
# systemctl enable httpd
```
Webサーバは起動できたので、この時点でEC2のパブリックIPにアクセスすると初期ページが表示されるはずです。

# MySQLをインストール
リポジトリをインストールします。
```
# dnf -y localinstall  https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
```
次にパッケージをインストールしますが、デフォルトだと下記のエラーが出るはずです。
```
# dnf install mysql-community-server mysql-community-client mysql-community-devel
Error: GPG check FAILED
```
GPGキーをインポートします。
```
# rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
```
これでもう一度クライアントをインストールします。
Complete!と表示されたら完了です。
```
# dnf install mysql-community-server mysql-community-client mysql-community-devel
Complete!
```
起動してみる。
```
# systemctl start mysqld
```
起動確認
active (running)になっていたら成功です。
```
# systemctl status mysqld
```
自動起動設定をします。
```
# systemctl enable mysqld
```

# PHPのインストール
次に、PHPをインストールしていきます。
```
# dnf -y install php-fpm php-mysqli php-json php php-devel
```
インストールされたかどうか確認します。
```
# php -v
PHP 8.2.15 (cli) (built: Jan 16 2024 12:19:32) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.2.15, Copyright (c) Zend Technologies
    with Zend OPcache v8.2.15, Copyright (c), by Zend Technologies
```

# WordPressのインストール
wgetコマンドでWordPressをインストールしていきます。
```
# wget https://ja.wordpress.org/latest-ja.tar.gz
```
パッケージを展開します。
```
# tar -zxvf latest-ja.tar.gz
```
展開が終わったら元のファイルは不要なので削除します。
```
# rm latest-ja.tar.gz 
```
Web公開用にドキュメントルートにWordPressのファイルを配置します。
```
# mv wordpress/* /var/www/html/
```
サーバを再起動します。
```
# systemctl restart httpd.service
```
ここまできたらEC2のパブリックIPにアクセスするとWordPressの初期画面が表示されます。

![スクリーンショット 2024-02-17 12.33.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851087/4ba7fd20-bd4f-46aa-df20-8130921e537c.png)
![スクリーンショット 2024-02-17 12.33.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851087/a01cec0d-cc78-f92f-b4c0-8a52025285eb.png)

# DBの各種設定
MySQLにログインします。
```
# mysql -u root -p
```
ここでパスワードが聞かれますが、MySQLの初期パスワードは``/var/log/mysqld.log``で確認することができます。
```
# less /var/log/mysqld.log
```
lessコマンドで確認すると以下の様なログが確認できるはずです。
``root@localhost:``以降の``GrGapdplN0*m:``が初期パスワードです。
```
[Note] A temporary password is generated for root@localhost: GrGapdplN0*m:
```
ログインができたら、初期パスワードを変更する必要があります。
(パスワードの変更をしないとデータベース操作やクエリ実行ができないため)
```
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';
```
WordPress用のデータベースを作成します。
```
mysql> CREATE DATABASE 'wordpress';
```
WordPress用のユーザーとパスワードを作成します。
```
mysql> CREATE USER 'wordpress-user'@'localhost' IDENTIFIED BY 'your_strong_password';
```
DBに対する完全な権限を付与します。
```
mysql> GRANT ALL PRIVILEGES ON `wordpress`.* TO "wordpress-user"@"localhost";
```
変更を適用
```
mysql> FLUSH PRIVILEGES;
```

# WordPressの各種設定
先ほど作成したDBの接続情報をWordPressの設定ファイルに記述していきます。

WordPressの設定ファイルを配置します。
```
# cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
```
``wp-config.php``のDB設定の箇所を変更します。
```
# vi /var/www/html/wp-config.php 
```
```
/** The name of the database for WordPress */
define( 'DB_NAME', 'データベース名' );

/** Database username */
define( 'DB_USER', 'ユーザー名' );

/** Database password */
define( 'DB_PASSWORD', 'パスワード' );
```
ブラウザ Cookie に暗号化レイヤーを提供するためにランダムな値を設定します。
下記のURLにアクセスして値を取得してください
https://api.wordpress.org/secret-key/1.1/salt/
```
define('AUTH_KEY',         ' #U$$+[RXN8:b^-L 0(WU_+ c+WFkI~c]o]-bHw+)/Aj[wTwSiZ<Qb[mghEXcRh-');
define('SECURE_AUTH_KEY',  'Zsz._P=l/|y.Lq)XjlkwS1y5NJ76E6EJ.AV0pCKZZB,*~*r ?6OP$eJT@;+(ndLg');
define('LOGGED_IN_KEY',    'ju}qwre3V*+8f_zOWf?{LlGsQ]Ye@2Jh^,8x>)Y |;(^[Iw]Pi+LG#A4R?7N`YB3');
define('NONCE_KEY',        'P(g62HeZxEes|LnI^i=H,[XwK9I&[2s|:?0N}VJM%?;v2v]v+;+^9eXUahg@::Cj');
define('AUTH_SALT',        'C$DpB4Hj[JK:?{ql`sRVa:{:7yShy(9A@5wg+`JJVb1fk%_-Bx*M4(qc[Qg%JT!h');
define('SECURE_AUTH_SALT', 'd!uRu#}+q#{f$Z?Z9uFPG.${+S{n~1M&%@~gL>U>NV<zpD-@2-Es7Q1O-bp28EKv');
define('LOGGED_IN_SALT',   ';j{00P*owZf)kVD+FVLn-~ >.|Y%Ug4#I^*LVd9QeZ^&XmK|e(76miC+&W&+^0P/');
define('NONCE_SALT',       '-97r*V/cgxLmp?Zy4zUU4r99QQ_rGs2LTd%P;|_e1tS)8_B/,.6[=UK<J_y9?JWG');
```

これで初期画面から必要な項目を設定してインストールを完了させることでWordPressを使用することができるようになります。