WordPress(Multipass)の構築メモ
multipass+Wordpress
by nmin
はじめに
MultipassでWordpressを作った時のメモ。
手順
1. 構成
| コンポーネント | バージョン |
|---|---|
| Ubuntu (Multipass) | 22.04.3 |
| Nginx | 1.18.0 |
| PHP-FPM | 7.4.33 |
| MySQL | 8.0.34 |
| WordPress | 6.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.conf の http ブロックに以下を追加する。
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/default の index ディレクティブに 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 のインストールウィザードに従ってセットアップを完了させる。