From 30e377d4eccafdf659181f2f345f500fe24396d9 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 26 Aug 2026 11:10:45 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20Hello=20Dolly=E7=AD=89=E3=81=AE=E3=83=87?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88=E3=83=97=E3=83=A9=E3=82=B0?= =?UTF-8?q?=E3=82=A4=E3=83=B3=E3=81=8C=E5=86=8D=E8=B5=B7=E5=8B=95=E3=81=AE?= =?UTF-8?q?=E3=81=9F=E3=81=B3=E3=81=AB=E5=BE=A9=E6=B4=BB=E3=81=99=E3=82=8B?= =?UTF-8?q?=E4=B8=8D=E5=85=B7=E5=90=88=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit wordpress-init initContainerのコアファイルコピー処理(cp -r /usr/src/wordpress/* /var/www/html/)が wp-contentを除外しておらず、PVC上の既存wp-contentへイメージ同梱のデフォルトファイル (hello.php、akismet/、デフォルトテーマ)を毎回上書きマージしていた。 コピー対象からwp-contentを除外し、PVC上のwp-contentは新規インストール時以外 一切触れないよう修正。 --- CLAUDE.md | 14 ++++++++++++++ Chart.yaml | 2 +- README.md | 19 ++++++++++--------- templates/deployment.yaml | 13 ++++++++++++- 4 files changed, 37 insertions(+), 11 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 30d12e3..6357261 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -38,6 +38,20 @@ WordPress本体はイメージ内蔵のもの(`docker.io/wordpress:-fpm-a ## チャート改修履歴 +### Hello Dolly等のデフォルトプラグインが削除しても復活する不具合の修正(2026-08-08, v7.1.0-a) + +※自動更新ワークフローがこの作業と並行してWordPress 7.1.0への正式リリース(v7.1.0)を実行したため、本修正はそのタグの上に手動リリース `7.1.0-a` として適用した。 + +**症状**: WP管理画面からHello Dolly(`hello.php`)を削除しても、Pod再起動のたびに復活する。 + +**原因**: `templates/deployment.yaml` の `wordpress-init` initContainerで、WordPressコアファイルをemptyDirにコピーする処理が `cp -r /usr/src/wordpress/* /var/www/html/` という実装になっており、`wp-content` を除外していなかった。`/var/www/html/wp-content` はPVCマウントの別ボリュームだが、`cp -r` はワイルドカード展開で `wp-content` ディレクトリ自体も対象に含めてしまうため、イメージ同梱のデフォルトwp-content(`hello.php`、`akismet/`、デフォルトテーマ群)がPod再起動のたびにPVC上の既存wp-contentへ**無条件に上書きマージ**されていた。直後にある「PVCが空の場合のみ初期化する」条件分岐(`if [ ! -d /var/www/html/wp-content/themes ]`)は、この最初の `cp -r` の副作用までは防げていなかった。 + +**対象**: Hello Dolly(`hello.php`)だけでなく、Akismet(`wp-content/plugins/akismet/`)も同じ理由で同様に復活する。**本チャート自身が明示的に`wp plugin install`等でプラグインを追加している箇所は存在しない**(該当するのはWordPressコア配布物に同梱されているこの2つのみ)。 + +**修正内容**: コアファイルのコピーを `/usr/src/wordpress/` 直下を1件ずつ列挙し、`wp-content` をスキップするループに変更。これによりPVC上のwp-contentは、新規インストール時(PVCが空=`wp-content/themes` が存在しない場合)以外は一切触れなくなった。 + +**対象ファイル**: `templates/deployment.yaml`, `README.md`, `Chart.yaml` + ### 実IP取得の修正 + SMTP経由メール送信の追加(2026-08-08, v7.0.2-a) **背景**: ルーター(グローバルIP)配下の 192.168.9.x セグメントにコントロールプレーン/ワーカーノードがあり、その上のPodでWordPressが稼働する構成において、(1) 訪問者の実IPアドレスが正しく取得できない、(2) `wp_mail()` によるメール送信が失敗する、という2つの不具合が報告された。 diff --git a/Chart.yaml b/Chart.yaml index 2880809..c684563 100644 --- a/Chart.yaml +++ b/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: wordpress-nginx description: WordPress with Nginx and PHP-FPM on Kubernetes type: application -version: 7.1.0 +version: 7.1.0-a appVersion: "7.1.0" keywords: - wordpress diff --git a/README.md b/README.md index 22738ae..58ce220 100644 --- a/README.md +++ b/README.md @@ -403,20 +403,19 @@ helm install my-wordpress ./wordpress-nginx \ ## 初期化の動作 ### 新規インストール時 -1. WordPress本体ファイルをemptyDirにコピー(使い捨て領域) -2. wp-contentディレクトリをPVCに作成(永続化領域) -3. シンボリックリンクで wp-content を接続 -4. wp-config.phpをSecretから生成 -5. データベース接続を確認 -6. テーブルが存在しない場合: +1. WordPressコアファイル(wp-content以外)をemptyDirにコピー(使い捨て領域) +2. wp-contentディレクトリのPVCが空の場合のみ、イメージ同梱のデフォルトwp-content(デフォルトテーマ、Akismet、Hello Dolly等)で初期化(永続化領域) +3. wp-config.phpをSecretから生成 +4. データベース接続を確認 +5. テーブルが存在しない場合: - WP-CLIを使用してWordPressをインストール - 管理者アカウントを作成 - パスワードが未指定の場合は16文字のランダム生成 -7. ads.txtが有効な場合は配置(使い捨て領域) +6. ads.txtが有効な場合は配置(使い捨て領域) ### アップデート/再起動時 -1. WordPress本体ファイルを新しくコピー(常にクリーン) -2. 既存のwp-content(PVC)をシンボリックリンクで接続 +1. WordPressコアファイル(wp-content以外)を新しくコピー(常にクリーン) +2. 既存のwp-content(PVC)はそのまま利用(**wp-content配下は一切上書きしない**。デフォルトプラグイン等を削除していればその状態を維持) 3. wp-config.phpを再生成 4. データベーステーブルの存在を確認 5. テーブルが存在する場合: @@ -425,6 +424,8 @@ helm install my-wordpress ./wordpress-nginx \ - 必要に応じてデータベーススキーマをアップデート 6. 既存データ(wp-content)を保持したまま起動 +**注意(v7.1.0-aで修正)**: それ以前は、WordPressコアファイルのコピー処理が `cp -r /usr/src/wordpress/* /var/www/html/` という実装になっており、`wp-content` を除外していませんでした。このため、Pod再起動のたびにイメージ同梱のデフォルトwp-content(Hello Dolly、Akismet、デフォルトテーマ等)がPVC上の既存wp-contentへ**毎回上書きマージ**され、ユーザーが削除したはずのプラグインが復活する不具合がありました。v7.1.0-aでコアファイルのコピーからwp-contentを除外し、PVC上のwp-contentは新規インストール時(PVCが空の場合)以外は一切触らないよう修正しています。 + ### セキュリティ更新の適用方法 ```bash diff --git a/templates/deployment.yaml b/templates/deployment.yaml index 18b2650..66d51f4 100644 --- a/templates/deployment.yaml +++ b/templates/deployment.yaml @@ -28,7 +28,18 @@ spec: echo "=== WordPress Initialization Started ===" echo "Copying WordPress to emptyDir..." - cp -r /usr/src/wordpress/* /var/www/html/ + # wp-contentは別マウントのPVCのため、ここではコアファイルのみコピーする。 + # "cp -r /usr/src/wordpress/* /var/www/html/" のようにwp-contentを含めて + # 丸ごとコピーすると、既存のPVC上のwp-contentディレクトリにイメージ同梱の + # デフォルトファイル(hello.php等)が毎回上書きマージされてしまい、 + # ユーザーが削除したはずのプラグインがPod再起動のたびに復活する原因になる。 + for item in /usr/src/wordpress/*; do + name=$(basename "$item") + if [ "$name" = "wp-content" ]; then + continue + fi + cp -r "$item" /var/www/html/ + done echo "WordPress files copied" if [ ! -d /var/www/html/wp-content/themes ]; then