🔄 内部サービスのポート変更手順 (WordPress / Website)
概要
Docker Infrastructure環境において、WordPress (PHP-FPM) や Bonus Website (Node.js) の内部待受ポートを変更する手順です。 これらは外部(ホストOS)に直接公開されておらず、Dockerネットワーク内でのみ通信されますが、NGINXとの連携設定を変更する必要があります。
INFO
FTPと異なり、これらのポートは「コンテナ間通信」用です。ホスト側のファイアウォール設定(UFW)やポートフォワーディング設定を変更する必要はありません。
1. WordPress (PHP-FPM) のポート変更
デフォルトの 9000 番ポートを変更する場合の手順です(例: 9001 に変更)。
手順
PHP-FPM設定の修正 (
srcs/requirements/wordpress/conf/www.conf)ini; 変更前 listen = 0.0.0.0:9000 ; 変更後 listen = 0.0.0.0:9001Dockerfileの修正 (
srcs/requirements/wordpress/Dockerfile)dockerfile# 変更前 EXPOSE 9000 # 変更後 EXPOSE 9001NGINX設定の修正 (
srcs/requirements/nginx/conf/nginx.conf) WordPressへの転送先ポートを合わせます。nginxlocation ~ \.php$ { # ... # 変更前 fastcgi_pass wordpress:9000; # 変更後 fastcgi_pass wordpress:9001; }
2. Bonus Website (Node.js) のポート変更
デフォルトの 4443 番ポートを変更する場合の手順です(例: 5000 に変更)。
手順
アプリケーション設定の修正 (
srcs/requirements/bonus/website/server.js)javascript// 変更前 const PORT = 4443; // 変更後 const PORT = 5000;Dockerfileの修正 (
srcs/requirements/bonus/website/Dockerfile)dockerfile# 変更前 EXPOSE 4443 # 変更後 EXPOSE 5000NGINX設定の修正 (
srcs/requirements/nginx/conf/nginx.conf) Websiteへのプロキシ転送先ポートを合わせます。nginxlocation ^~ /website/ { # 変更前 proxy_pass http://website:4443/website/; # 変更後 (末尾のスラッシュなどに注意) proxy_pass http://website:5000/website/; # ... }
3. 設定の反映
変更後は、関連するコンテナを再ビルドして起動し直す必要があります。
# 全て再構築する場合
make down
make all
# 個別に再構築する場合(例: WordPressとNginxのみ)
docker compose -f srcs/docker-compose.yml up -d --build wordpress nginx✅ 動作確認
ブラウザから通常通りアクセスできるか確認します。 内部ポートが変わっていても、NGINXが適切にプロキシしていれば、ユーザー(ブラウザ)から見たURL (https://local.dev/...) は変わりません。
- WordPress: https://local.dev/
- Website: https://local.dev/website/
3. MariaDB (Database) のポート変更
デフォルトの 3306 番ポートを変更する場合の手順です(例: 3307 に変更)。
手順
MariaDB設定の修正 (
srcs/requirements/mariadb/conf/50-server.cnf)ini[mysqld] ; 変更前 port = 3306 ; 変更後 port = 3307Dockerfileの修正 (
srcs/requirements/mariadb/Dockerfile)dockerfile# 変更前 EXPOSE 3306 # 変更後 EXPOSE 3307環境変数の修正 (
srcs/.env) WordPressがデータベースへ接続する際のホスト指定を変更します。ini# 変更前 MYSQL_HOSTNAME=mariadb # 変更後 MYSQL_HOSTNAME=mariadb:3307※ NGINXと異なり、WordPressは環境変数(
MYSQL_HOSTNAME)を使って接続先を決定します。
技術的補足: setup.sh の自動対応について
MariaDBのポートを変更すると、通常は以下の問題が発生しますが、本プロジェクトの setup.sh はこれらを自動的に処理するように実装されています。
接続待機チェック (
mysqladmin ping) の問題:mysqladminコマンドはhost:port形式を認識しません。setup.sh内でホスト名とポート番号を分離してコマンドに渡す処理が入っています。既存ボリュームの設定残留 (
wp-config.php) の問題: WordPressのデータがボリュームに残っている場合、古いポート設定(3306)がwp-config.phpに書き込まれたままになり、再起動ループ(データベース接続エラー)が発生します。setup.shは起動時に現在の環境変数の値でwp-config.phpのDB_HOSTを強制的に上書き更新し、この問題を回避しています。bash# setup.sh 内の該当処理 if [ -f wp-config.php ]; then wp config set DB_HOST $MYSQL_HOSTNAME --allow-root fi
4. 設定の反映
変更後は、関連するコンテナを再ビルドして起動し直す必要があります。
# 全て再構築する場合
make down
make all
# 個別に再構築する場合
docker compose -f srcs/docker-compose.yml up -d --build mariadb wordpress✅ 動作確認
ブラウザからの確認に加え、コンテナ間通信で内部ポートが正しく変更されているか確認します。 NGINXコンテナ(WordPress/Websiteのクライアント役)やWordPressコンテナ(MariaDBのクライアント役)からコマンドを実行します。
1. WordPress (9001) の確認
NGINXコンテナから、新しいポートのWordPressへ接続できるか確認します。 ※ WordPressはFastCGIのため、curl では完全なレスポンスは得られませんが、接続確認は可能です。
# NGINXコンテナからWordPressへ接続
docker compose -f srcs/docker-compose.yml exec nginx nc -zv wordpress 9001成功例: Connection to wordpress 9001 port [tcp/*] succeeded!
2. Website (5000) の確認
NGINXコンテナから、新しいポートのWebsiteへ接続できるか確認します。
# NGINXコンテナからWebsiteへHTTPリクエスト
docker compose -f srcs/docker-compose.yml exec nginx curl -v http://website:5000/website/health成功例: HTTP/1.1 200 OK が返ってくれば成功です。
3. MariaDB (3307) の確認
WordPressコンテナから、新しいポートのMariaDBへ接続できるか確認します。
# WordPressコンテナからMariaDBへPing
docker compose -f srcs/docker-compose.yml exec wordpress mysqladmin -h mariadb -P 3307 -u$MYSQL_USER -p$MYSQL_PASSWORD ping成功例: mysqld is alive
TIP
これらの確認により、「ホストOSからは見えないが、Dockerネットワーク内部では正しくポートが変更され、通信できていること」を証明できます。
接続できない(502 Bad Gateway や DB connection error)場合は、設定したポート番号が全てのファイルで一致しているか再確認してください。
❓ FAQ (よくある質問)
Q. /etc/hosts でポート変更に対応できますか?
A. いいえ、できません。
/etc/hosts は「ドメイン名(ホスト名)を IPアドレス に変換する」ための仕組みであり、ポート番号を指定する機能はありません。 例えば、/etc/hosts に 127.0.0.1:9001 wordpress のように書くことはできません(無効な構文です)。
したがって、ポートを変更する場合は、必ず以下の設定変更が必要です:
- サービスの待受ポート変更 (
listen) - NGINXの転送先ポート変更 (
fastcgi_pass/proxy_pass)
Q. OAuth APIのリダイレクトURIを複数登録しても大丈夫ですか?
A. はい、大丈夫です(推奨されます)。
42APIの認証システムは、リクエストに含まれる redirect_uri が「登録済みのURIリストのいずれかと完全一致するか」をチェックします(ホワイトリスト方式)。
したがって、以下のように複数の環境用URIを登録しておくことで、設定を変更せずに環境を使い分けることができます:
- 本番環境用:
https://local.dev/website/auth/42/callback - ポート変更検証用:
https://local.dev:8443/website/auth/42/callback - 開発環境用:
http://localhost:3000/website/auth/42/callback
既存の設定を削除する必要はありません。