QNAPのDockerで既存環境を壊さず新しいWordPressを追加する方法

QNAPのDockerで既存環境を壊さず新しいWordPressを追加する方法

はじめに

QNAPのContainerStationでDockerを使ってWordPressを運用していると、「新しいサイトを追加したいけど既存のサイトに影響が出ないか不安」という場面があります。

この記事では、既存のコンテナに一切触れずに新しいWordPressコンテナを追加する手順を解説します。

分離構成(サイトごとに独立したフォルダ・docker-compose.yml)を採用しているため、新しいサイトの追加は既存サイトへの影響がありません。


この記事でわかること

  • 既存サイトへの影響ゼロで新しいWordPressを追加する方法
  • テスト用WordPressをローカルIPでアクセスできる状態にする手順
  • 本番公開に向けてNginxとCloudflare Tunnelに追加する方法

環境

  • QNAP NAS(ContainerStation インストール済み)
  • 分離構成でWordPressを運用中
  • SSH接続ソフト:TeraTerm

分離構成への移行手順はこちら [QNAPのDockerで複数WordPressを分離構成に移行する方法]


現在のフォルダ構成

docker/
├── shared/        ← Nginx・Cloudflared・phpMyAdmin
├── your-site1/ ← 既存サイト1
├── your-site2/    ← 既存サイト2
├── your-site3/        ← 既存サイト3
└── site_test/     ← 今回新規追加

分離構成のため、site_test/フォルダを新規作成するだけで既存サイトに影響しません。


Step 1:新しいサイト用フォルダを作成する

SSHで接続して新しいフォルダを作成します。

SSHの有効化手順はこちら [QNAPのCloudflaredをSSHでアップデートする方法]

mkdir -p /share/CACHEDEV4_DATA/docker/site_test
cd /share/CACHEDEV4_DATA/docker/site_test

Step 2:docker-compose.ymlを作成する

WordPressとMariaDBだけのシンプルな構成で作成します。

nanoでもvimでも構いません。

cat > /share/CACHEDEV4_DATA/docker/site_test/docker-compose.yml << 'EOF'
services:
  mariadb_test:
    image: mariadb:10.11
    container_name: mariadb_test
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: wp_test
      MYSQL_USER: your_user
      MYSQL_PASSWORD: your_password
    volumes:
      - ./db_data:/var/lib/mysql

  wordpress_test:
    image: wordpress:php8.2-apache
    container_name: wordpress_test
    restart: unless-stopped
    ports:
      - "8090:80"
    environment:
      WORDPRESS_DB_HOST: mariadb_test
      WORDPRESS_DB_USER: your_user
      WORDPRESS_DB_PASSWORD: your_password
      WORDPRESS_DB_NAME: wp_test
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mariadb_test

EOF
echo "done"

ポイント:

設定内容
ports: "8090:80"ホストの8090番ポートをコンテナの80番に転送
depends_onMariaDBが起動してからWordPressを起動する
volumes: ./db_dataデータベースのデータをホストに保存(コンテナ削除後もデータ保持)
volumes: ./htmlWordPressのファイルをホストに保存

ポート番号について 既存サイトで使用中のポートと重複しないように注意してください。 既存サイトのポートはdocker psで確認できます。

パスワードについて テスト用でも推測されにくいパスワードを使用してください。 本番環境に移行する際は必ず変更してください。


Step 3:コンテナを起動する

docker compose up -d

実行結果の例:

✔ Container mariadb_test    Started  1.1s
✔ Container wordpress_test  Started  2.1s

Step 4:動作確認

ブラウザでアクセスする

ブラウザで以下のURLにアクセスします:

http://QNAPのIPアドレス:8090 (例:192.168.0.xxx)

WordPressのインストール画面が表示されれば成功です。

ContainerStationで確認する

ContainerStationの「コンテナ」タブでmariadb_testwordpress_testが「実行中」になっていることを確認します。

既存のコンテナは全て「実行中」のまま影響を受けていません。


Step 5:本番公開に向けた追加設定(ドメインがある場合)

テスト用として動作確認できたら、本番公開に向けて以下の設定を追加します。

① shared_proxyネットワークに接続する

本番公開する場合はNginxと通信できるようshared_proxyネットワークに接続します。

docker-compose.ymlに以下を追加します:

services:
  mariadb_test:
    ...
    networks:
      - shared_proxy  # 追加

  wordpress_test:
    ...
    ports:            # 本番環境ではportsは不要(Nginx経由でアクセスするため)
      - "8090:80"     # 削除またはコメントアウト
    networks:
      - shared_proxy  # 追加

networks:
  shared_proxy:
    external: true    # 追加

② Nginxにサイトの設定ファイルを追加する

/share/CACHEDEV4_DATA/docker/shared/nginx/conf.d/your-new-site.confを作成します。

upstream wordpress_test {
    server wordpress_test:80;
}

server {
    listen 80;
    server_name www.your-new-site.com;
    return 301 https://your-new-site.com$request_uri;
}

server {
    listen 443 ssl;
    server_name your-new-site.com;
    ssl_certificate     /etc/certs/origin.crt;
    ssl_certificate_key /etc/certs/origin.key;

    location / {
        proxy_pass http://wordpress_test;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Nginxをリロードします:

docker exec nginx_reverse_proxy_shared nginx -s reload

③ Cloudflare Tunnelのconfig.ymlにルートを追加する

/share/CACHEDEV4_DATA/docker/shared/cloudflared/config.ymlに追記します:

ingress:
  - hostname: your-new-site.com
    service: https://nginx_reverse_proxy_shared:443
    originServerName: your-new-site.com
    originRequest:
      noTLSVerify: true
  # 既存のルール...
  - service: http_status:404

Cloudflaredを再起動します:

cd /share/CACHEDEV4_DATA/docker/shared
docker compose up -d --force-recreate cloudflared

Cloudflare Tunnelの詳しい設定はこちら [QNAPのDockerで1つのCloudflare Tunnelを使って複数サイトを運用する方法]


テスト用コンテナを削除する

テストが終わったらコンテナを削除できます。

cd /share/CACHEDEV4_DATA/docker/site_test
docker compose down

データも含めて完全に削除する場合:

docker compose down -v
rm -rf /share/CACHEDEV4_DATA/docker/site_test

⚠️ データの削除に注意 rm -rfは取り消しができません。必要なデータがないか確認してから実行してください。


まとめ

分離構成を採用しているため、新しいWordPressの追加は非常にシンプルです。

# 1. フォルダ作成
mkdir -p /share/CACHEDEV4_DATA/docker/site_test
cd /share/CACHEDEV4_DATA/docker/site_test

# 2. docker-compose.yml作成(WordPress + MariaDB)
# ポート番号は既存サイトと重複しないように設定

# 3. コンテナ起動
docker compose up -d

# 4. ブラウザで確認
# http://QNAPのIPアドレス:8090

既存サイトへの影響がゼロな理由:

  • サイトごとに独立したフォルダ・docker-compose.ymlで管理している
  • 新しいコンテナは独自のネットワーク(site_test_default)で動作する
  • 既存コンテナのネットワークには接続していない

本番公開する際はNginxとCloudflare Tunnelに設定を追加するだけで対応できます。


関連記事