PHP-FPM 8.2でWordPressを動かす

PHP 8.2をPHP-FPMで動かす場合,Ubuntuの標準aptリポジトリにはパッケージが存在しない.

ここではサードパーティの提供するPPAリポジトリを使いPHP-FPM 8.2をインストールする.

以降ではNginx + PHP-FPM 8.2 + MySQLでWordPressを構築していく.

環境

  • CPU v1core
    • AMD EPYC 7702P 64-Core Processor
  • RAM 2GB
  • SSD 30GB
  • OS Ubuntu 20.04.3 LTS

手順

手順A. PHP-FPMのインストール

リポジトリ追加のためのパッケージをインストールする. このパッケージには add-apt-repository コマンドが含まれている.

sudo apt install software-properties-common

PPAリポジトリを追加する.PPAとはPersional Package Archiveの略だという.

sudo add-apt-repository ppa:ondrej/php

Packaging/PPA - Launchpad Help

アップデートを実行する.

sudo apt update

PHP-FPM 8.xパッケージを探す.次のようにパッケージ php8.x-fpm が見つかった. ここでは最新のphp8.2-fpmを入れてみる.

$ apt search php8 | grep fpm

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

php8.0-fpm/focal 8.0.28-1+ubuntu20.04.1+deb.sury.org+1 amd64
php8.1-fpm/focal 8.1.16+repack-1+ubuntu20.04.1+deb.sury.org+1 amd64
php8.2-fpm/focal 8.2.3-1+ubuntu20.04.1+deb.sury.org+1 amd64

php8.2の関連パッケージをインストールする.

sudo apt install php8.2 php8.2-fpm php8.2-curl php8.2-gd php8.2-mbstring php8.2-xml php8.2-xmlrpc php8.2-soap php8.2-intl php8.2-zip php8.2-mysql

PHP-FPMのUnixドメインソケットのパスを確認する.listen =で始まる行に書いてあるパスがUnixドメインソケットのパスになる.ここにNginxがPHP処理を渡すように以降で設定する.

$ grep ^listen /etc/php/8.2/fpm/pool.d/www.conf
listen = /run/php/php8.2-fpm.sock
listen.owner = www-data
listen.group = www-data

/etc/php/8.2/fpm/php.iniの最大アップロードファイルサイズを40MBに引き上げる.

upload_max_filesize = 40M

/etc/php/8.2/fpm/php.iniのPOST最大サイズを40MB引き上げる.

post_max_size = 40MB

手順B. Nginxのインストール

Nginx公式がaptリポジトリを提供している.ここでは簡単のためにUbuntuの標準リポジトリからNginxをインストールする.

## 古いパッケージ群を先に削除
$ sudo apt purge nginx nginx-common nginx-core

## インストール
$ sudo apt install nginx

## 永続化
$ sudo systemctl enable nginx

## インストールされたバージョンの確認
$ nginx -v
nginx version: nginx/1.18.0 (Ubuntu)

手順C. NginxにPHP-FPMの設定を追加

以下の設定を /etc/nginx/conf.d/wordpress.conf として保存する.ここではサーバ名を example.com とした.このアドレスにWebブラウザからアクセスする.

server {
    listen       80;
    server_name  example.com;
    root         /var/www/wordpress;

    access_log /var/log/nginx/wordpress.access.log;
    error_log  /var/log/nginx/wordpress.error.log error;
    index index.html index.htm index.php;

    client_max_body_size 20M;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        include snippets/fastcgi-php.conf;
    }
}

ドキュメントルートのディレクトリを作成する.

sudo mkdir -p /var/www/wordpress

Nginxの設定をテストする.

sudo nginx -t

Nginxへ設定を読み込む.

sudo systemctl reload nginx

サンプルファイルを配置する.

echo "<?php phpinfo();" | sudo tee /var/www/wordpress/index.php

WebサーバにcurlコマンドやWebブラウザでアクセスして動作を確認する.

手順D. MySQLのインストール

aptでインストールされるMySQLを調べてみる.

$ apt search mysql* | grep ^mysql-
mysql-client/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 all
mysql-client-8.0/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 amd64
mysql-client-core-8.0/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 amd64
mysql-common/focal 5.8+1.0.5ubuntu2 all
mysql-router/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 amd64
mysql-sandbox/focal 3.2.05-1 all
mysql-server/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 all
mysql-server-8.0/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 amd64
mysql-server-core-8.0/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 amd64
mysql-source-8.0/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 amd64
mysql-testsuite/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 all
mysql-testsuite-8.0/focal-updates,focal-security 8.0.32-0ubuntu0.20.04.2 amd64

mysql-serverとmysql-clientがともにバージョン8.0でインストールされることがわかった. そのためバージョン指定せずにMySQL 8.0のサーバとクライアントをインストールする.

sudo apt install mysql-server mysql-client

MySQLサーバを永続化する.

sudo systemctl enable mysql

MySQLクライアントから接続できることを確かめる.

$ sudo mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.32-0ubuntu0.20.04.2 (Ubuntu)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> ^D
## Ctrl + Dで抜ける

手順E. MySQLデータベースの初期設定

事前にパスワードを生成しておく. MySQLに接続する.

## 適当なパスワード生成
eval echo '$RANDOM'{,,,,} | tr ' ' -

sudo mysql

MySQLデータベースへWordPress用のデータベースを追加する.

create database wordpress;

MySQLデータベースへWordPress用のユーザを追加する.ここではユーザ名を wp_user に,パスワードを PASSWORD に設定した.

create user wp_user@'localhost' identified with mysql_native_password by 'PASSWORD';

wp_user ユーザにデータベース wordpress へのアクセスを許可する.

grant all on wordpress.* to wp_user@'localhost';

MySQLデータベースから抜ける.

exit

手順F. WP-CLIのインストールとWordPressのダウンロード

ここではWordPressのダウンロードをWP-CLIから行う. WP-CLIはWordPressをコマンドラインから管理するためのツールである. このツールを使うと,インストール作業をすべてコマンドで完結できる.

WP-CLIをインストールする.

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

コマンドを使い検証を行う.

$ php wp-cli.phar --info
OS:	Linux 5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023 x86_64
Shell:	/bin/bash
PHP binary:	/usr/bin/php8.2
PHP version:	8.2.3
php.ini used:	/etc/php/8.2/cli/php.ini
MySQL binary:	/usr/bin/mysql
MySQL version:	mysql  Ver 8.0.32-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
SQL modes:	
WP-CLI root dir:	phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:	phar://wp-cli.phar/vendor
WP_CLI phar path:	/home/koyama
WP-CLI packages dir:	
WP-CLI cache dir:	/home/koyama/.wp-cli/cache
WP-CLI global config:	
WP-CLI project config:	
WP-CLI version:	2.7.1

WP-CLIをインストールする.

chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

パスが通っているか確認する.

$ which wp
/usr/local/bin/wp

WordPressのインストール用ディレクトリに移動する.

cd /var/www/wordpress

WordPressをダウンロードする.

sudo wp core download --allow-root

手順G. WordPressのインストール

WordPressの設定を追加する.

sudo wp core config --dbhost=localhost --dbname=wordpress --dbuser=wp_user --dbpass=PASSWORD --allow-root

ディレクトリの所有者をNginxの実行ユーザである www-data へ変更する.

sudo chown www-data: -R .

WordPressの初期設定を行う.サイトのタイトルやURL,管理者のメールアドレスやパスワードをセットする.

wp core install --url=example.com --title="My WordPress" --admin_name=myadm --admin_password=Passw0rd --admin_email=you@example.com

コマンドが正常に終了すると以下のメッセージが表示される.

Success: WordPress installed successfully.

WordPressをインストールしたURLにアクセスする.

参考資料

メモ

以下はNginxを公式リポジトリからインストールした場合のNginx Config

server {
    listen       80;
    server_name  10.146.0.5;
    root         /var/www/example.com;

    access_log /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log error;
    index index.html index.htm index.php;

    client_max_body_size 20M;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

https://www.nginx.com/resources/wiki/start/topics/recipes/wordpress/