1 Commits
Author SHA1 Message Date
claude 30e377d4ec fix: Hello Dolly等のデフォルトプラグインが再起動のたびに復活する不具合を修正
Helm Chart Release / release-chart (push) Successful in 5s
wordpress-init initContainerのコアファイルコピー処理(cp -r /usr/src/wordpress/* /var/www/html/)が
wp-contentを除外しておらず、PVC上の既存wp-contentへイメージ同梱のデフォルトファイル
(hello.php、akismet/、デフォルトテーマ)を毎回上書きマージしていた。
コピー対象からwp-contentを除外し、PVC上のwp-contentは新規インストール時以外
一切触れないよう修正。
2026-08-26 11:13:48 +09:00
4 changed files with 37 additions and 11 deletions
+14
View File
@@ -38,6 +38,20 @@ WordPress本体はイメージ内蔵のもの(`docker.io/wordpress:<tag>-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つの不具合が報告された。
+1 -1
View File
@@ -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
+10 -9
View File
@@ -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-contentPVCをシンボリックリンクで接続
1. WordPressコアファイルwp-content以外)を新しくコピー(常にクリーン)
2. 既存のwp-contentPVCはそのまま利用(**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-contentHello Dolly、Akismet、デフォルトテーマ等)がPVC上の既存wp-contentへ**毎回上書きマージ**され、ユーザーが削除したはずのプラグインが復活する不具合がありました。v7.1.0-aでコアファイルのコピーからwp-contentを除外し、PVC上のwp-contentは新規インストール時(PVCが空の場合)以外は一切触らないよう修正しています。
### セキュリティ更新の適用方法
```bash
+12 -1
View File
@@ -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