本記事は広告(アフィリエイト)を含みます。
個人事業主やフリーランスがサイトを持つ場合、レンタルサーバーの共有プランを選ぶ人が多いですが、コストを抑えつつ自由度も欲しいなら「VPS + Docker + WordPress」という構成も選択肢に入ります。この記事では、実際にVPS上にWordPress環境を構築した手順と、つまずいたポイントをそのまま共有します。
全体の流れ
- VPSにSSHで接続する
- Dockerを導入する
- Docker ComposeでWordPress + MySQL + Nginxを構築する
- WP-CLIで初期設定・プラグイン導入を行う
- (次のステップ)独自ドメインとSSLを設定する
Docker Composeで環境を構築する
WordPress・MySQL・Nginxの3つのコンテナを、docker-compose.ymlひとつでまとめて管理します。最小構成の例は以下の通りです(パスワード類は必ずランダム生成した値に置き換えてください)。
services:
db:
image: mysql:8.0
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: (ランダム生成する)
MYSQL_ROOT_PASSWORD: (ランダム生成する)
volumes:
- db_data:/var/lib/mysql
wordpress:
image: wordpress:php8.3-fpm
depends_on:
- db
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: (ランダム生成する)
volumes:
- wp_data:/var/www/html
nginx:
image: nginx:alpine
depends_on:
- wordpress
ports:
- \"80:80\"
volumes:
- wp_data:/var/www/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
volumes:
db_data:
wp_data:
ポイントは、WordPress本体のデータ(wp_data)とデータベースのデータ(db_data)をそれぞれ独立したボリュームにしておくことです。コンテナを作り直しても中身が消えません。
つまずいたポイント:WP-CLIでの権限エラー
初期設定をWP-CLIで一気に済ませようとしたところ、2つのエラーにぶつかりました。
1つ目: wp-config.phpが環境変数からDB接続情報を読む構成になっていたため、一時起動したWP-CLIコンテナに同じ環境変数を渡していないと接続エラーになりました。WordPressコンテナと同じ環境変数を、WP-CLI実行時にも指定することで解決しました。
2つ目: WordPressコンテナ内のファイル所有者が特定のUID(33)で動いているのに対し、WP-CLIコンテナを別のUIDで実行していたため、ファイル書き込み権限のエラーが発生しました。WP-CLIコンテナの実行ユーザーをWordPress側と同じUIDに揃えることで解決しました。
Dockerで複数コンテナを組み合わせる場合、「どのコンテナが」「どのユーザー権限で」「どのボリュームを触るか」を揃えておくのが地味に重要なポイントです。
最低限入れておきたいプラグイン3つ
- Rank Math SEO — タイトル・メタディスクリプションの管理、サイトマップ生成など、SEOの基本設定をまとめて行える
- WP Super Cache — ページの表示速度を上げるキャッシュプラグイン。有効化するだけでなく、実際にキャッシュファイルが生成されているかまで確認するのがおすすめ
- Wordfence Security — 不正アクセスやマルウェアスキャンに対応するセキュリティプラグイン
これらはWP-CLIから一括インストール・有効化できるので、サイトを量産する場合はスクリプト化しておくと毎回の作業が数分で終わります。
次にやること:独自ドメインとSSL化
ここまででサイトはIPアドレスでアクセスできる状態になりますが、実運用にはドメインの取得とSSL(https)化が欠かせません。この部分は別記事で詳しく解説します。
まとめ
VPS + Docker + WordPressの構成は、レンタルサーバーに比べて自由度が高い反面、権限まわりでつまずきやすいという特徴があります。逆に言えば、一度型を作ってしまえば、2つ目・3つ目のサイトは驚くほど早く立ち上げられます。
