WordPress を複数コンテナで構築し、サブドメインで外部公開する完全手順
最近、自分のブログがちょっと分野が広すぎて、読み手の人のことは考えてないものになってるなぁ。。。と気が付きました。
まぁ、気が付くのが遅すぎなのですが。。。
なので、ブログを今後は分割しようと思って、複数作るのにはどうやるのかなぁ?と思いましたが、以下の方法で作成できました。
今後、徐々に当サイトは、ジャンルごとに分割されていくことになります。
一応、趣味とか、ジャンルごとにしていきたいと思ってます。
このサイトもどうするかはまだ、はっきりとは決めてません。
WordPress を複数コンテナで構築し、サブドメインで外部公開する完全手順
Synology の Docker(Container Manager)を使って
複数の WordPress サイトを独立コンテナとして構築し、
DS1621+ のリバースプロキシ経由で外部公開するための
完全なセットアップ手順をまとめました。
本記事は、
- DS920+:WordPress(wp1〜wp8)をホスト
- DS1621+:外部公開の“親”(Reverse Proxy + DDNS)
という 2台構成を前提にしています。
🧩 WordPress コンテナ完全セットアップ手順(DS920+ → DS1621+ Reverse Proxy 統合版)
以下は wpX(wp1〜wp8)共通の手順。(8つ作ったのですよね)
番号だけ変えればすべてのサイトに適用できますよ。
それと、作成されるWordpressはDS920+を購入しましたので、そこに作成しました。
で、公開するにはリバースプロキシを使って公開してます。
#️⃣ 1. ディレクトリ作成(DS920+ ホスト側)
mkdir -p /volume1/docker/wpX/html
mkdir -p /volume1/docker/wpX/db
#️⃣ 2. Portainer でスタックをデプロイ
Portainerが好き(スタックが残せて、後でも編集できる)なので、Portainer用のスタックです。
wpXとそれぞれ1、とかに変更してください。
あと、808X:80のxも1とかに。
WordPress + MariaDB のスタックを起動。
version: ‘3.8’
services:
mariadb_wpX:
image: mariadb:10.6
container_name: mariadb_wpX
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppass
volumes:
– /volume1/docker/wpX/db:/var/lib/mysql
restart: always
wordpress_wpX:
image: wordpress:php8.2-apache
container_name: wordpress_wpX
environment:
WORDPRESS_DB_HOST: mariadb_wpX:3306
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppass
WORDPRESS_DB_NAME: wordpress
ports:
– “808X:80”
volumes:
– /volume1/docker/wpX/html:/var/www/html
restart: always
(この時点では MariaDB が権限エラーで落ちるのは正常)
#️⃣ 3. MariaDB の権限修正(DS920+ ホスト側)
3-1. MariaDB 停止
docker stop mariadb_wpX
3-2. ディレクトリ権限修正
sudo chown -R 999:999 /volume1/docker/wpX/db
sudo synoacltool -del /volume1/docker/wpX/db
sudo chmod 775 /volume1/docker/wpX/db
3-3. 再起動
docker start mariadb_wpX
#️⃣ 4. WordPress データベースのインポート
docker exec -i mariadb_wpX mysql -u wpuser -pwppass wordpress < /volume1/Share/DB-name.sql
DB-nameは自分で付けた名前を、これで、元のブログの内容をコピーしてます。
4-1. もし「Table already exists」エラーが出たら
docker exec -it mariadb_wpX bash
mysql -u wpuser -pwppass
DROP DATABASE wordpress;
CREATE DATABASE wordpress;
exit
exit
#️⃣ 5. wp-content のコピー(DS920+ ホスト側)
rsync -av /volume1/Share/wp-content/ /volume1/docker/wpX/html/wp-content/
#️⃣ 6. WordPress コンテナ内で URL 置換準備(wp-cli)
docker exec -it wordpress_wpX bash
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
#️⃣ 7. WordPress の内部URL → 外部URLへ置換(後で実行)
※ Reverse Proxy 設定後に実行する
例:wp1 の場合
php wp-cli.phar search-replace 'http://192.168.0.70:8081' 'https://wp1.ysand.myds.me' --all-tables --allow-root
#️⃣ 8. WordPress ディレクトリの権限修正(DS920+ ホスト側)
sudo chown -R 33:33 /volume1/docker/wpX/html
sudo chmod -R 775 /volume1/docker/wpX/html
🧩 ここから外部公開(DS1621+ Reverse Proxy)
私の環境では DS1621+ が外部公開の“親”。
DS920+ の WordPress はすべて DS1621+ 経由で公開する。
#️⃣ 9. DS1621+ でサブドメインを作成
例:
- wp1.ysand.myds.me(DS1621+のDDNSを使う。DS920+のDDNSでない)
- wp2.ysand.myds.me
- …
- wp8.ysand.myds.me
(myds.me はサブドメイン自由に作れる)
#️⃣ 10. DS1621+ Reverse Proxy 設定
DSM → アプリケーションポータル → Reverse Proxy → 作成
wp1 の例:
ソース:
- プロトコル:HTTPS
- ホスト名:wp1.ysand.myds.me
- ポート:443
宛先:
- プロトコル:HTTP
- ホスト名:192.168.0.70
- ポート:8081
wp2〜wp8 も同様に:
| サイト | サブドメイン | 宛先 |
|---|---|---|
| wp1 | wp1.ysand.myds.me | 192.168.0.70:8081 |
| wp2 | wp2.ysand.myds.me | 192.168.0.70:8082 |
| wp3 | wp3.ysand.myds.me | 192.168.0.70:8083 |
| … | … | … |
| wp8 | wp8.ysand.myds.me | 192.168.0.70:8088 |
#️⃣ 11. DS1621+ で Let’s Encrypt 証明書取得
DSM → セキュリティ → 証明書 → 追加 → Let’s Encrypt
- wp1.ysand.myds.me
- wp2.ysand.myds.me
- …
- wp8.ysand.myds.me
をそれぞれ取得。
Reverse Proxy の「詳細設定」で割り当てる。
#️⃣ 12. WordPress の URL を本番URLに置換(最終ステップ)
例:wp1
php wp-cli.phar search-replace 'http://192.168.0.70:8081' 'https://wp1.ysand.myds.me' --all-tables --allow-root
wp2〜wp8 も同様。
🏁 これで DS920+ の WP1〜WP8 がすべて外部公開される
構造はこう:
外部
↓
443
↓
DS1621+(ysand.myds.me)
↓
Reverse Proxy
↓
wpX.ysand.myds.me → DS920+ の WordPress(808X)
と言う感じで、段々とブログサイトがジャンルごとに分割されるというお話でした。


