WordPress(Multipass)の構築メモ

multipass+Wordpress

by nmin

はじめに

MultipassでWordpressを作った時のメモ。

手順

1. 構成

コンポーネントバージョン
Ubuntu (Multipass)22.04.3
Nginx1.18.0
PHP-FPM7.4.33
MySQL8.0.34
WordPress6.3.2

2. Nginx

2-1. インストール

# 前提パッケージのインストール
sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

# 公式署名キーのインポート
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

# キーの検証
gpg --dry-run --quiet --no-keyring --import --import-options import-show \
    /usr/share/keyrings/nginx-archive-keyring.gpg

# apt リポジトリの設定
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

# インストール・起動
sudo apt update
sudo apt install nginx-full
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

2-2. アップロードサイズ制限の変更

/etc/nginx/nginx.confhttp ブロックに以下を追加する。

http {
    client_max_body_size 32M;
    ...
}

2-3. ログフォーマットの変更

同じく /etc/nginx/nginx.conf に以下を追加する。

log_format custom '[nginx] time:$time_iso8601 server_addr:$server_addr host:$host '
                   'method:$request_method reqsize:$request_length uri:$uri '
                   'query:$args status:$status size:$body_bytes_sent referer:$http_referer '
                   'ua:$http_user_agent forwardedfor:$http_x_forwarded_for '
                   'reqtime:$request_time apptime:$upstream_response_time';

2-4. デフォルト設定ファイルの編集

/etc/nginx/sites-available/defaultindex ディレクティブに index.php を追加する。

index index.php index.html index.htm index.nginx-debian.html;

2-5. バーチャルホストの設定

設定ファイルを作成し、sites-enabled にシンボリックリンクを張る。

sudo vim /etc/nginx/sites-available/dev.wp.me.conf
sudo ln -s /etc/nginx/sites-available/dev.wp.me.conf /etc/nginx/sites-enabled/
sudo systemctl restart nginx

dev.wp.me.conf の内容:

server {
    listen 80;
    server_name dev.wp.me;
    root /var/www/html/wordpress;
    index index.php index.html index.htm index.nginx-debian.html;

    access_log /var/log/nginx/access.log custom;
    error_log  /var/log/nginx/error.log warn;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

Note: access_log のフォーマットを main から custom(2-3 で定義)に変更している。

2-6. ローカルの hosts ファイルに追記

ローカル Mac の /etc/hosts に以下を追加する。

192.168.64.xx  dev.wp.me

3. PHP

3-1. PHP-FPM 7.4 のインストール

Ubuntu 22.04 の標準リポジトリには PHP 7.4 が含まれないため、ondrej/php PPA を追加する。

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.4-fpm

php -v
# PHP 7.4.33 (cli)

3-2. php.ini の編集

/etc/php/7.4/fpm/php.ini を以下の値に変更する。

file_uploads        = On
max_execution_time  = 300
memory_limit        = 256M
post_max_size       = 32M
max_input_time      = 60
max_input_vars      = 4440
upload_max_filesize = 32M

3-3. PHP-FPM プロセスマネージャーのチューニング

/etc/php/7.4/fpm/pool.d/www.conf を編集し、プロセスマネージャーを static に変更する。

pm                   = static
pm.max_children      = 50
pm.start_servers     = 50
pm.min_spare_servers = 50
pm.max_spare_servers = 50
pm.process_idle_timeout = 10s
pm.max_requests      = 100
php_admin_value[memory_limit] = 256M
request_terminate_timeout = 180

4. MySQL

4-1. MySQL 8 のインストール

sudo apt-get update
sudo apt-get install mysql-server mysql-client

4-2. データベース・ユーザーの作成

sudo mysql -u root -p
CREATE DATABASE wp_db CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'wp-user'@'%' IDENTIFIED BY '任意のパスワード';
GRANT ALL PRIVILEGES ON wp_db.* TO 'wp-user'@'%';
FLUSH PRIVILEGES;
GRANT PROCESS ON *.* TO 'root'@'localhost';
QUIT;

Note: 元の手順では CREATE DATABASE wordpress としているが、後続の wp-user 権限付与で wp_db.* を指定しているため、データベース名を wp_db に統一している。

4-3. MySQLバックアップスクリプトの作成(第5世代)

認証情報ファイル

sudo vim ~/secrets.sh
chmod 600 ~/secrets.sh
# ~/secrets.sh
DB_USER="root"
DB_PASSWORD="パスワード"

バックアップスクリプト

sudo mkdir -p /tmp/shell/mysql_bk
sudo vim /tmp/shell/mysql_bk/mysql_backup.sh
chmod +x /tmp/shell/mysql_bk/mysql_backup.sh
#!/bin/bash

# 認証情報の読み込み
source ~/secrets.sh

DB_NAME="wp_db"
BACKUP_DIR="/tmp/shell/mysql_bk"
DATE=$(date +%F)
BACKUP_FILE="$BACKUP_DIR/backup_$DATE.sql"

# バックアップ作成
mysqldump -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$BACKUP_FILE"

# 圧縮
gzip "$BACKUP_FILE"

# 5日より古いバックアップを削除
find "$BACKUP_DIR" -type f -name "backup_*" -mtime +5 -exec rm {} \;

5. WordPress

5-1. インストール

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -zxvf latest.tar.gz

# Nginx のドキュメントルートに配置
sudo mv wordpress /var/www/html/

# 所有者を Nginx の実行ユーザーに変更
sudo chown -R www-data:www-data /var/www/html/wordpress

# 設定ファイルを作成
cd /var/www/html/wordpress
cp wp-config-sample.php wp-config.php

5-2. 環境変数による認証情報の管理

phpdotenv を使用し、認証情報をコードから分離する。

cd /var/www/html/wordpress

# phpdotenv のインストール
composer require vlucas/phpdotenv

# .env ファイルの作成
vim .env
DATABASE_USER="wp-user"
DATABASE_PASSWORD="パスワード"

5-3. wp-config.php の編集

vim /var/www/html/wordpress/wp-config.php
<?php
require 'vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

define('DB_NAME',     'wp_db');
define('DB_USER',     $_ENV['DATABASE_USER']);
define('DB_PASSWORD', $_ENV['DATABASE_PASSWORD']);
define('DB_HOST',     'localhost');
define('DB_CHARSET',  'utf8');
define('DB_COLLATE',  '');
// ...(その他の設定は省略)

6. 動作確認

ブラウザで http://dev.wp.me にアクセスし、WordPress のインストールウィザードに従ってセットアップを完了させる。