複数のWordPressサイトを運営するなら,1台のVPSにまとめて載せるのは合理的だ.固定費を分散でき,管理も一元化できる.だが「ただ詰め込む」と,1サイトの障害が全サイトを巻き込む危険がある.
鍵は「同居させつつ,適切に分離する」設計だ.Nginxのサイト分離,PHP-FPMプールの分離,DB・権限の分離── これらで,効率と安全を両立できる.
この記事は,複数のWordPressサイトをVPSで運用したい個人開発者・制作者に向けている.構成の選び方から,分離設計,一括バックアップ・更新管理までを実践的に解説する.
読み終えたとき,あなたは1台のVPSで複数サイトを,互いに影響させず安全に,効率的に運用できるようになっている.
なぜ多サイトを1台にまとめるのか、その注意点
複数サイトを別々のサーバーで運用するのはコストがかさむ.1台のVPSにまとめれば,固定費を共有でき,管理も一元化できる.VPSのリソースに余裕がある限り,これは合理的だ.
ただし安易な同居には危険がある.1サイトが攻撃される・暴走する・障害を起こすと,同居する全サイトに波及しうる.「1つのサイトのPHPエラーで全部重くなる」「1サイトの侵害で全サイトのファイルが読まれる」といった事態だ.
だからこそ「分離」が重要になる.Nginxでサイトを分け,PHP-FPMのプールを分け,DBと権限を分ける.これにより,問題を1サイト内に封じ込められる.
効率(同居)と安全(分離)を両立する設計── それが多サイト運用の核心だ.
構成の選択 ― 独立構成 vs マルチサイト
WordPressで複数サイトを運用するには,大きく2つの方法がある.「独立したWordPressを複数置く」か「WordPressマルチサイト機能を使う」かだ.性質が大きく異なる.
| 方式 | 特徴 | 向き |
|---|---|---|
| 独立構成(複数WP) | 各サイトが完全に独立 | 無関係なサイト群・安全性重視 |
| マルチサイト | 1つのWPで複数サイトを管理 | 似たサイト群・一元管理重視 |
無関係な複数サイトなら「独立構成」がおすすめだ──各サイトが完全に独立し,1つが壊れても他に影響しない.マルチサイトは「似たサイトを大量に一元管理」する場合に強いが,1つの障害や侵害が全サイトに及ぶリスクがある.本記事は主に独立構成を前提に,安全な分離を解説する.
Nginxでのサイト分離 ― ドメインごとに設定を分ける
各サイトは独立したNginxのserverブロックで受ける.ドメインごとに設定ファイルを分け,それぞれの配信ディレクトリとPHP-FPMに振り分ける(リバースプロキシ記事参照).
サイトごとに設定ファイルを分ける
# /etc/nginx/sites-available/site-a.com
server {
server_name site-a.com;
root /var/www/site-a;
location ~ .php$ {
fastcgi_pass unix:/run/php/site-a.sock; # サイト専用のFPMプール
}
}
# site-b.com も同様に別ファイル・別sockサイトごとに設定ファイルを分け,配信ディレクトリも分けることで,管理が明快になり,1サイトの設定変更が他に影響しない.次に重要なのが,fastcgi_passで指すPHP-FPMのプールを分けることだ.
PHP-FPMプールの分離 ― 障害を隔離する
これが多サイト安全運用の肝だ.PHP-FPMのプールをサイトごとに分けると,1サイトのPHPが暴走・クラッシュしても,他サイトのプールは無事で済む.
サイトごとのFPMプール(/etc/php/8.2/fpm/pool.d/site-a.conf)
[site-a]
user = site-a # サイト専用ユーザーで実行
group = site-a
listen = /run/php/site-a.sock
pm = dynamic
pm.max_children = 5 # サイトごとにリソース上限
; site-b は別ファイル・別ユーザー・別sockプールを分ける利点は2つ.(1)障害の隔離──1サイトがプールを使い切っても他サイトは動く.(2)権限の分離──各プールをサイト専用ユーザーで動かせば,1サイトのPHPが他サイトのファイルを読み書きできない(Linux権限記事参照).pm.max_childrenでサイトごとのリソース上限も設けられる.
DBと権限の分離 ― 1サイトの侵害を封じ込める
各サイトに専用のDBとDBユーザーを割り当てる.1サイトのDB認証情報が漏れても,他サイトのDBには触れないようにする.
サイトごとのDBとユーザー
-- サイトごとに独立したDBと専用ユーザー
CREATE DATABASE site_a CHARACTER SET utf8mb4;
CREATE USER 'site_a'@'localhost' IDENTIFIED BY '...';
GRANT ALL ON site_a.* TO 'site_a'@'localhost'; -- site_aのみ
-- site_b も同様に独立各サイトのDBユーザーは,自分のDBにしかアクセスできないようにする(GRANTを該当DBに限定).これで,1サイトのwp-config.phpが漏れても,被害をそのサイトのDBに封じ込められる.ファイル権限(サイト専用ユーザー所有・644/755)も併せて分離する(Linux権限記事参照).分離の徹底が,多サイト運用の安全性を支える.
一括バックアップと更新管理 ― WP-CLIで効率化
複数サイトの運用では,バックアップと更新を効率化する仕組みが要る.手動で1サイトずつやるのは非現実的だ.WP-CLIを使えば,コマンドで一括管理できる.
WP-CLIでの一括管理
# 各サイトでDBダンプ(ループでまとめて)
for site in site-a site-b; do
wp --path=/var/www/$site db export /backup/$site-$(date +%F).sql
done
# プラグイン・コア更新(サイトごと)
wp --path=/var/www/site-a plugin update --all
wp --path=/var/www/site-a core updateWP-CLIでバックアップ・更新・メンテをスクリプト化すれば,サイトが増えても運用負荷が一定に保てる.定期バックアップはcron/timerで自動化し(定期実行記事参照),外部ストレージへ逃がす(オブジェクトストレージ記事参照).更新は本番前にステージングで確認するのが理想だが,最低でも更新前にバックアップを取る.
リソース管理 ― 1台に何サイトまで載せられるか
「1台に何サイト載せられるか」は,VPSのメモリとアクセス量次第だ.各サイトのPHP-FPMプール・DBがメモリを消費するため,闇雲に詰め込むと共倒れになる.
目安として,各サイトのアクセスが少なければ多数同居でき,アクセスが多いサイトはリソースを食う.FastCGIキャッシュ(WordPress高速化記事参照)を効かせれば,1サイトあたりの負荷が下がり,より多く同居できる.メモリが逼迫してきたら,スケールアップで増強するか,アクセスの多いサイトを別VPSに分ける.監視(別記事)でリソースを見ながら判断する.
補論:多サイト運用は「メモリの余裕」と「スナップショット」で安全になる
多サイト運用は,各サイトのプール・DBが同時に動くため,メモリの余裕が安定性を左右する.そして複数サイトのコア/プラグイン更新は,1つでも失敗すると影響が出るため,「戻せる」備えが不可欠だ.
高速NVMe・50種類以上のOSテンプレートに対応した国内VPS─シン・VPS─ はメモリをスケールアップで増やせ,NVMe SSDで複数サイトのDBアクセスも高速だ.更新の前にスナップショットを取れば,どのサイトの更新が失敗しても丸ごと戻せる.固定費で複数サイトを集約できるため,サイトが増えるほどコスパが良くなる.
各サイトの独自ドメインは 取り扱い400種類以上のドメイン取得サービス─ムームードメイン─ でまとめて取得・管理できる.1台のVPSに複数ドメインを向け,Nginxとプールで分離すれば,効率と安全を両立した多サイト運用が完成する.
よくある質問(FAQ)
Q1.独立構成とマルチサイトどちらを選ぶ?
無関係なサイト群なら独立構成(各サイトが完全独立で安全),似たサイトを大量に一元管理するならマルチサイト.ただしマルチサイトは1つの障害・侵害が全サイトに及ぶリスクがある.迷ったら独立構成が安全だ.
Q2.1台に何サイトまで載せられる?
VPSのメモリとアクセス量次第だ.アクセスが少なければ多数同居でき,多いサイトはリソースを食う.FastCGIキャッシュで負荷を下げ,メモリが逼迫したらスケールアップする.
Q3.1サイトの障害が他に波及しないか?
PHP-FPMプールをサイトごとに分けることで隔離できる.1サイトがプールを使い切っても他は無事だ.DBユーザーとファイル権限も分離すれば,侵害も1サイトに封じ込められる.
Q4.複数サイトのバックアップはどうする?
WP-CLIでスクリプト化し,cron/timerで自動化する.各サイトのDBダンプとファイルを定期取得し,外部ストレージへ逃がす(オブジェクトストレージ記事参照).サイトが増えても運用負荷を一定に保てる.
Q5.更新管理を効率化したい
WP-CLIでコア・プラグイン更新をコマンド化する.更新前に必ずスナップショットかバックアップを取り,失敗時に戻せるようにする.重要サイトはステージングで事前確認するのが理想だ.
Q6.セキュリティで特に重要なことは?
サイトごとの権限分離だ.各サイトを専用ユーザーで動かし(FPMプール),DBユーザーも該当DBに限定する.これで1サイトが侵害されても,他サイトのファイルやDBに被害が及ばない.
まとめ ― 「同居させつつ分離する」が多サイト運用の極意
WordPressの多サイト運用は,1台に同居させて効率化しつつ,Nginx・PHP-FPMプール・DB・権限を分離して安全を保つのが極意だ.これにより,1サイトの障害や侵害を他に波及させずに済む.
今日やるべきことは,各サイトのPHP-FPMプールとDBユーザーが分離されているか確認すること.分離されていなければ,まずプール分離から着手する.
効率と安全の両立は,余裕のあるVPSとスナップショットの上に築かれる.分離を徹底し,WP-CLIで一括管理すれば,多サイト運用は驚くほど快適になる.