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にアクセスする.
参考資料
- How To Install WordPress on Ubuntu 22.04 with a LAMP Stack | DigitalOcean
- How to Install PHP 8 on Ubuntu 22.04
- How to Configure PHP-FPM with NGINX | DigitalOcean
- WP-CLI: How to Install WordPress via SSH
メモ
以下は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/