Raspberry Pi 4 Model B WordPress検証環境の作成

### はじめに
本記事はRaspberry piを使用して検証用WordPressのサイトを構築することを目的としている

### 必要機材
・Raspberry pi 4 Model B（以降ラズパイと呼ぶ）

### 参考サイト
　<a href="https://www.ingenious.jp/articles/howto/raspberry-pi-howto/wordpress-server-setup/">ここ</a>に構築に関するすべてが記載されているが、+αの情報を記載

### ラズパイを最新状態にする
```
kensho_pi@raspberrypi:~ $ sudo apt update
kensho_pi@raspberrypi:~ $ sudo apt upgrade
kensho_pi@raspberrypi:~ $ sudp reboot
```

### Apache Webサーバのインストール及びバージョン確認
```
kensho_pi@raspberrypi:~ $ sudo apt install apache2
kensho_pi@raspberrypi:~ $ apache2 -v
+----------+------2024/01/22-----+----------+
| Server version: Apache/2.4.56 (Raspbian)  |
| Server built:   2023-04-02T03:06:01       |
+----------+----------+----------+----------+
```

### PHPのインストール
```
kensho_pi@raspberrypi:~ $ sudo apt install lsb-release apt-transport-https ca-certificates
```

### GPGキーのダウンロード及び保存
```
kensho_pi@raspberrypi:~ $ sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
```

### SURY PPAリポジトリの追加
```
kensho_pi@raspberrypi:~ $ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
```

### パッケージ一覧の更新
```
kensho_pi@raspberrypi:~ $ sudo apt update
kensho_pi@raspberrypi:~ $ sudo apt upgrade
kensho_pi@raspberrypi:~ $ sudo reboot
```

### PHP7.4のインストール
```
kensho_pi@raspberrypi:~ $ sudo apt install php7.4
kensho_pi@raspberrypi:~ $ php -v
+----------+----------+------2024/01/22-----+----------+----------+----------+
|PHP 7.4.33 (cli) (built: Sep  4 2023 08:11:54) ( NTS )                      |
|Copyright (c) The PHP Group                                                 |
|Zend Engine v3.4.0, Copyright (c) Zend Technologies                         |
|    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies          |
+----------+----------+----------+----------+----------+----------+----------+
```

### PHPモジュールのインストール
```
# WordPressサーバを動作させるために必須のモジュール
kensho_pi@raspberrypi:~ $ sudo apt install php7.4-curl php7.4-json php7.4-mbstring php7.4-mysql php7.4-imagick php7.4-xml php7.4-zip
```

### PHPの設定
参考サイトでは何行目に存在する文字列か記載がないためまずはcatコマンドで何行目に変更する箇所が存在するか調査

1622行目：コメントアウトを削除
409行目：128M 変更
694行目：40M 変更
846行目：30M 変更
```
kensho_pi@raspberrypi:~ $  sudo cat -n /etc/php/7.4/apache2/php.ini | grep mbstring.language
 -> 1622  ;mbstring.language = Japanese

kensho_pi@raspberrypi:~ $ sudo cat -n /etc/php/7.4/apache2/php.ini | grep memory_limit
 -> 409  memory_limit = XXXXM

kensho_pi@raspberrypi:~ $ sudo cat -n /etc/php/7.4/apache2/php.ini | grep post_max_size
 -> 694  post_max_size = XXXXM

kensho_pi@raspberrypi:~ $ sudo cat -n /etc/php/7.4/apache2/php.ini | grep upload_max_filesize
 -> 846  upload_max_filesize = XXXM
```

### php-fpmのインストール及びApache Webサーバの再起動
```
kensho_pi@raspberrypi:~ $ sudo apt install php7.4-fpm
kensho_pi@raspberrypi:~ $ sudo systemctl restart apache2
```

### PHP環境の動作確認
```
kensho_pi@raspberrypi:~ $ sudo vi /var/www/html/test.php

<php
    phpinfo()
?>

+----------++----------++----------+
保存後ブラウザを開いて下記リンクを入力
「http://ラズパイのアドレス/test.php」
成功するとインストールしたPHP情報が表示される
```

### Apache Webサーバの設定
```
# 1: ServerNameディレクティブの設定
kensho_pi@raspberrypi:~ $ sudo vi /etc/apache2/apache2.conf

# Global configuration
#
ServerName 任意のサーバ名

+-----+---上記コマンド入力保存後---+-----+

kensho_pi@raspberrypi:~ $ apache2ctl
 -> Usage: /usr/sbin/apache2ctl start~~~が表示されれば正しく設定ができている
```

### DirectoryIndexディレクティブの設定変更
```
kensho_pi@raspberrypi:~ $ sudo vi /etc/apache2/mods-available/dir.conf

DirectoryIndex index.html ~~~が現在先頭になっているため
「DirectoryIndex index.php index.html ~~~」と、なるように変更
```

### Rewriteモジュールの有効化
```
kensho_pi@raspberrypi:~ $ sudo a2enmod rewrite

kensho_pi@raspberrypi:~ $ apache2ctl -t -D DUMP_MODULES | grep rewrite
 -> rewrite_module (shared)
# 上記出力が確認できれば正常

kensho_pi@raspberrypi:~ $  sudo systemctl restart apache2
```

### AllowOverrideの設定変更
```
kensho_pi@raspberrypi:~ $ sudo vi /etc/apache2/apache2.conf

【変更前】
<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

【変更後】
<Directory /var/www/>
        Options FollowSymLinks  <-- 「Indexes」を削除
        AllowOverride All  <-- 「All」に修正
        Require all granted
</Directory>

```

### MariaDBのインストール
```

kensho_pi@raspberrypi:~ $ sudo apt install mariadb-server-10.3

kensho_pi@raspberrypi:~ $ sudo mysql -u root -p
Enter password: <--[Enter]押下
```

### MariaDBの初期設定
```
kensho_pi@raspberrypi:~ $ sudo  mysql_secure_installation
 Enter current password for root (enter for none):    <== [Enter]を押下
 
~~~ 省略 ~~~

Set root password? [Y/n] Y   <== rootパスワード設定
New password:    <== パスワードを入力
Re-enter new password:   <== 再度パスワードを入力

~~~ 省略 ~~~

Remove anonymous users? [Y/n]    <== 匿名ユーザーを削除

~~~ 省略 ~~~

Disallow root login remotely? [Y/n] Y    <== リモート接続を拒否

~~~ 省略 ~~~

Remove test database and access to it? [Y/n] Y    <== 不要なテストデータベースを削除

~~~ 省略 ~~~

Reload privilege tables now? [Y/n] Y    <== これまでに設定した内容を反映
```

### 初期設定の変更
```
kensho_pi@raspberrypi:~ $ sudo mysql -u root -p
 Enter password: 設定したパスワードを入力

MariaDB [(none)]> grant all privileges on *.* to root@localhost identified by 'password' with grant option;
 -> Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> flush privileges;
 -> Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> quit
 -> Bye
```

上記コマンド実行後「mysql -u root -p」で接続できることを確認する
しかし、ここまで正しく設定したと思うが下記のようなエラーが出るときがある
```
kensho_pi@raspberrypi:~ $ mysql -u root -p
Enter password: パスワードを入力
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
```
上記エラーがでた場合、恐らくパスワード設定に不備があるかrootユーザーを作成していないために発生表示された可能性がある

### 上記エラーに遭遇した場合のみ
```
kensho_pi@raspberrypi:~ $ sudo systemctl stop mariadb # MariaDBを一時停止
kensho_pi@raspberrypi:~ $ sudo mysqld_safe --skip-grant-tables & # セキュアモードで起動
kensho_pi@raspberrypi:~ $ mysql -u root # セキュアモードでMariaDBに接続

USE mysql;
UPDATE user SET Password=PASSWORD('新しいパスワード') WHERE User='root';
FLUSH PRIVILEGES;

kensho_pi@raspberrypi:~ $ sudo systemctl restart mariadb # MariaDB再起動

再起動後「mysql -u root -p」で接続できることを確認する
```

### WordPressのインストール
```
kensho_pi@raspberrypi:~ $ wget https://ja.wordpress.org/latest-ja.tar.gz

# ファイルの解凍
kensho_pi@raspberrypi:~ $ tar -xzvf latest-ja.tar.gz
```

### データベースとユーザ作成
ここでは下記の値で設定
DB　：db_wordpress
USER：TEST
PASS：TESTPASSWORD
```
kensho_pi@raspberrypi:~ $ mysql -u root -p
Enter password: パスワードを入力

MariaDB [(none)]> CREATE DATABASE db_wordpress;
　Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON db_wordpress.* TO "TEST"@"localhost" IDENTIFIED BY "TESTPASSWORD";
　Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
　Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> quit
　Bye
```

### WordPressファイルのアップロード及び権限の設定
```
kensho_pi@raspberrypi:~ $ sudo cp -R ./wordpress/* /var/www/html/
kensho_pi@raspberrypi:~ $ sudo chown -R www-data:www-data /var/www/html/
```

### WordPressにアクセス
```
http://ラズパイのIPアドレス/wp-admin/install.php
```

上記アクセス後通常通りWordPressの設定をしてラズパイで検証用WordPressが構築完了