Ubuntu 20.04 + Nginx 1.18 + PHP(WordPress) + MariaDBで環境構築メモ

nginxの学習のためローカルで環境を構築したのでメモ

## 環境

Ubuntu 20.04.1 LTS (Focal Fossa)
nginx nginx/1.18.0 (Ubuntu)

## Ubuntu + nginx + PHP(WordPress)

ApacheにはPHPの拡張モジュール(mod_php)があるが、nginxにはモジュールがない。
そのため、FastCGIインターフェースを使ってPHPを動作させる `PHP-FPM(FastCGI Process Manager)`を使ってnginxと接続させる。
FastCGIは、Webアプリケーションのプロセスがデーモンとしてappサーバ上に常駐することでCGI(Common Gateway Interface)の欠点を補ったプロトコル。
PHP-FPMはPHPの開発元が配布しており、FastCGIのインターフェイスを使ってPHPプログラムを動作させる。

[PHP-FPM](https://www.php.net/manual/ja/install.fpm.php)

## インストール

まず、aptでPHP-FPMと、WordPressで使用するためのMySQLのライブラリをインストール

```bash
$ sudo apt install php-fpm php-mysql -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
...
# 省略
...
# インストール完了

$ php -v
PHP 7.4.3 (cli) (built: May 26 2020 12:24:22) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

$ php-fpm7.4 -v
Sun 16 Aug 2020 08:06:23 AM UTC
PHP 7.4.3 (fpm-fcgi) (built: May 26 2020 12:24:22)
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies
```

### PHP-FPMの設定ファイル

PHP-FPMは`/etc/php/7.4/fpm/`以下にある。
`fpm/php-fpm.conf`にPHP-FPMの設定が、`fpm/php.ini`にPHPの設定が記述されている。

また、各プール(PHP-FPM内部でプロセスやソケットを共有するグループ)ごとの設定は`fpm/pool.d/`以下に`*.conf`としてファイルを作成。
デフォルトでは`/fpm/pool.d/www.conf`が作成されていて、`fpm/php-fpm.conf`内で`include=/etc/php/7.4/fpm/pool.d/*.conf'で読み込まれている。

項目`listen`を編集し、TCPソケット通信ではなくUnixドメインソケットを利用する設定。(今回はデフォルトのまま使用)
また、php-fpm.sockがFPMの再起動によって削除されることに対応するため、`listen.owner`, `listen.group`を編集
(ここでは`nginx`する)
参考：[Nginxとphp-fpmをsock接続するときphp-fpm.sockが消える件](https://qiita.com/shikigamix/items/ad02566903c5c1433b02)
PHPプログラムとnginxの権限の違いによってファイルアクセスができなくなるなどトラブルを防止するため、`user`, `group`も`nginx`で設定。
参考：[Ubuntu 18.04にNginx、PHP 7.4、MySQL 5.7をインストールする](https://qiita.com/kshiva1126/items/676d939584e0506bb501)


```bash
$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf
 ...
listen = /run/php/php7.4-fpm.sock
 ...
user = nginx
group = nginx
listen.owner = username 
listen.group = username
```

### WordPressをインストール

```bash
$ sudo mkdir -p /var/www/php-fpm.example.com
$ cd /var/www/php-fpm.example.com/
$ sudo tar xfz wordpress-5.5-ja.tar.gz  # 公式サイトからダウンロードする
$ sudo chown -R nginx: wordpress
```

### nginxの設定

以下の設定を`/etc/nginx/conf.d/wordpress.conf`として保存

```bash
server {
    listen 80;
    server_name 127.0.0.1;
    root /var/www/php-fpm.example.com/wordpress;    # wordpressの格納先をルートにする
    index index.php;
    location ~ \.php$ {         # /*.phpにマッチするリクエスト
        try_files $uri =404;    # ファイルが存在しない場合は404エラー
        include fastcgi_params; # FastCGIに使用される変数を読み込む
        fastcgi_index index_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   # fastcgi_paramにない変数を定義
        fastcgi_pass unix:/run/php/php7.4-fpm.sock; # FastCGIサーバの待受アドレス。Unixドメインソケットで通信する場合は戦闘に`unix:`が必要
    }
    location / {
        try_files $uri/ /index.php?$args;   # *.php以外のファイルへの対応
    }
}
```

### MariaDBのインストールと設定

wordpressテーブルの作成、ユーザの作成を行う

```bash
$ sudo apt install mariadb-server
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
$ sudo mysqladmin -uroot create wordpress
$ sudo mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 50
Server version: 10.3.22-MariaDB-1ubuntu1 Ubuntu 20.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON wordpress.* TO [ユーザ名]@localhost IDENTIFIED BY '[パスワード]';
Query OK, 0 rows affected (0.001 sec)

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

nginxを再起動

```bash
systemctl restart nginx
```

ブラウザで`120.0.0.1`にログインすればWordPressの管理者画面に遷移
DB、管理者情報登録画面ではCSSが読み込まれていないような白背景の画面だったが、登録後にログインすれば通常のダッシュボードに入れる