feat: PVCルートを /var/www にマウント、/composer を使い捨て領域に変更 (v8.5.6-e)
Helm Chart Release / release-chart (push) Successful in 6s

php-fpm コンテナのマウントを html サブパスのみから PVCルート
(/var/www)に変更。html/ は公開フォルダ、それ以外は非公開ファイル
の格納先として利用可能に。nginx は従来どおり html サブパスのみ
マウントするため、非公開ディレクトリがWebに公開されることはない。

あわせて /composer のPVC永続化マウントを廃止し、Pod再起動ごとに
クリーン再構築される使い捨て領域とした(マルウェア書き込み対策)。
永続化したい場合は composer.workingDir に /var/www/composer 等を指定。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 17:03:16 +09:00
co-authored by Claude Fable 5
parent be1c82e968
commit 85b7f69ccb
6 changed files with 71 additions and 14 deletions
+43
View File
@@ -0,0 +1,43 @@
# Changelog - Version 8.5.6-e
## 変更点
### php-fpm コンテナのマウントを PVCルート → /var/www に変更
従来、php-fpm コンテナには PVC の `html` サブパスのみが `/var/www/html` にマウントされており、PVC上の他のディレクトリにはアクセスできませんでした。
**対応**: php-fpm コンテナには PVC の**ルート**を `/var/www` にマウントするように変更しました。
- `/var/www/html` — 公開フォルダ(nginxが配信するWebルート、従来どおり)
- `/var/www/<任意>`**非公開ファイルの格納先**(PHPから読み書き可能だがWebには公開されない)
nginx コンテナは従来どおり `html` サブパスのみをマウントするため、`html/` 以外のディレクトリはWebサーバーのファイルシステムに存在せず、公開されることはありません。設定ファイル・秘密鍵・アップロード受け皿など、公開したくないファイルの置き場として利用できます。
### Composer導入先(/composer)を使い捨て領域に変更
v8.5.6-c/d では `/composer` をPVCの `composer` サブパスに永続化していましたが、このマウントを廃止しました。
`/composer` はコンテナローカルの**使い捨て領域**となり、Pod再起動のたびに `composer install` でクリーンに再構築されます。万一不正アクセスで `vendor/` 内にマルウェアを書き込まれても、再起動で消滅します。
- 永続化したい場合は `composer.workingDir``/var/www/composer` など `/var/www` 配下を指定してください。
- 再起動ごとにパッケージの再ダウンロードが発生します(クリーン環境維持とのトレードオフ)。
## アップグレード手順
```bash
helm repo update
helm upgrade <リリース名> cafepieters/phpfpm --version 8.5.6-e -f values.yaml
```
## 互換性
- autoloadパスは変わりません: `require_once '/composer/vendor/autoload.php';`
- PVC上に残っている旧 `composer/` サブパスのデータは、今後は `/var/www/composer` として見えます。不要であれば削除してください:
```bash
kubectl exec <pod> -c php-fpm -- rm -rf /var/www/composer
```
---
**リリース日**: 2026-07-19
**担当**: プロサーバーエンジニア(Claude)
+6
View File
@@ -22,6 +22,12 @@ Raspberry Pi などのベアメタルで稼働することを想定した、Kube
## チャート改修履歴 ## チャート改修履歴
### PVCルートを /var/www にマウント + /composer を使い捨て化(2026-07-19, v8.5.6-e
php-fpm コンテナのマウントを「`html` サブパスのみ」から「PVCルート → `/var/www`」に変更。`html/` は公開フォルダ、それ以外(`/var/www/<任意>`)は非公開ファイルの格納先として使える。nginx は `html` サブパスのみマウントするため非公開分は公開されない。あわせて `/composer` のPVC永続化マウントを廃止し、Pod再起動ごとにクリーン再構築される使い捨て領域とした(マルウェア混入対策、ユーザー要望)。永続化したい場合は `workingDir``/var/www/composer` 等を指定。
**対象ファイル**: `templates/deployment.yaml`, `values.yaml`, `README.md`, `Chart.yaml`, `CHANGELOG-8.5.6-e.md`
### useComposerJson の YAML parse error 修正(2026-07-19, v8.5.6-d ### useComposerJson の YAML parse error 修正(2026-07-19, v8.5.6-d
`useComposerJson: true` 指定時、heredoc 内の `{{ .Values.composer.composerJson }}` がインデント無しで展開され、複数行JSONの2行目以降がブロックスカラーを破壊して YAML parse error になる潜在バグを修正。`trim | nindent 14` で展開するよう変更(`composerLock` も同様)。 `useComposerJson: true` 指定時、heredoc 内の `{{ .Values.composer.composerJson }}` がインデント無しで展開され、複数行JSONの2行目以降がブロックスカラーを破壊して YAML parse error になる潜在バグを修正。`trim | nindent 14` で展開するよう変更(`composerLock` も同様)。
+1 -1
View File
@@ -2,6 +2,6 @@ apiVersion: v2
name: phpfpm name: phpfpm
description: Nginx + PHP-FPM Helm Chart with external DB and optional Selenium support description: Nginx + PHP-FPM Helm Chart with external DB and optional Selenium support
type: application type: application
version: 8.5.6-d version: 8.5.6-e
appVersion: "8.5.6" appVersion: "8.5.6"
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png
+10 -1
View File
@@ -117,6 +117,14 @@ kubectl logs -l app.kubernetes.io/name=phpfpm -c nginx
| `persistence.size` | ストレージサイズ | `1Gi` | | `persistence.size` | ストレージサイズ | `1Gi` |
| `persistence.accessMode` | アクセスモード | `ReadWriteOnce` | | `persistence.accessMode` | アクセスモード | `ReadWriteOnce` |
> **📁 PVCマウント構成(php-fpmコンテナ)**
> php-fpm コンテナには PVC の**ルート**が `/var/www` にマウントされます。
>
> - `/var/www/html` — **公開フォルダ**nginxが配信するWebルート)
> - `/var/www/<任意のフォルダ>` — **非公開の格納先**(PHPからは読み書きできるが、Web経由では公開されない)
>
> nginx コンテナは `html` サブパスのみをマウントするため、`html/` 以外のディレクトリはWebサーバーのファイルシステムに存在せず、設定ミスでも公開されることはありません。設定ファイル・秘密鍵・アップロード受け皿・ログなど、公開したくないファイルの置き場として利用できます。
### Composer設定 ### Composer設定
| パラメータ | 説明 | デフォルト | | パラメータ | 説明 | デフォルト |
@@ -241,7 +249,8 @@ persistence:
> **📌 Composerの導入先について** > **📌 Composerの導入先について**
> Composerパッケージはデフォルトで**Webルート外**の `/composer` に導入されます(`composer.workingDir` で変更可能)。 > Composerパッケージはデフォルトで**Webルート外**の `/composer` に導入されます(`composer.workingDir` で変更可能)。
> `vendor/` や `composer.json` がWeb経由で公開されないため、情報漏洩などのセキュリティリスクを回避できます。 > `vendor/` や `composer.json` がWeb経由で公開されないため、情報漏洩などのセキュリティリスクを回避できます。
> また、Webルート(`/var/www/html`)と親子関係にないパスのため、ネストマウントによる空フォルダも生成されません。 >
> `/composer` は**PVCにマウントされない使い捨て領域**です。Pod再起動のたびにクリーンな環境へ再構築されるため、万一不正アクセスでマルウェアを書き込まれても再起動で消え、常にクリーンなComposer環境を維持できます(PVCに永続化したい場合は `/var/www/composer` など `/var/www` 配下を指定)。
> >
> PHPコードからは以下のように読み込みます: > PHPコードからは以下のように読み込みます:
> ```php > ```php
+6 -9
View File
@@ -200,16 +200,13 @@ spec:
ports: ports:
- containerPort: 9000 # PHP-FPMは9000ポートでリッスン - containerPort: 9000 # PHP-FPMは9000ポートでリッスン
volumeMounts: volumeMounts:
# PVCルートを /var/www にマウント
# - /var/www/html のみ nginx が公開(nginx側は html サブパスだけをマウント)
# - それ以外(/var/www/<任意>)は非公開ファイルの格納先として利用可能
# ※ Composer導入先(デフォルト /composer)は意図的にマウントしない:
# Pod再起動のたびにクリーンな環境へ再構築される使い捨て領域とする
- name: app-storage - name: app-storage
mountPath: /var/www/html mountPath: /var/www
subPath: html
{{- $composerDir := .Values.composer.workingDir | default "/composer" }}
{{- if and (or .Values.composer.enabled .Values.selenium.enabled) (ne $composerDir "/var/www/html") }}
# Composer導入先をPVCに永続化(Pod再起動時のvendor再構築を回避)
- name: app-storage
mountPath: {{ $composerDir }}
subPath: composer
{{- end }}
{{- if and .Values.composer.enabled .Values.composer.useComposerJson }} {{- if and .Values.composer.enabled .Values.composer.useComposerJson }}
- name: composer-config - name: composer-config
mountPath: /tmp/composer-init mountPath: /tmp/composer-init
+5 -3
View File
@@ -86,13 +86,15 @@ composer:
enabled: false enabled: false
# Composerの導入先ディレクトリ(composer.json / vendor の配置先) # Composerの導入先ディレクトリ(composer.json / vendor の配置先)
# デフォルトはWebルート(/var/www/html)の外の /composer に導入し、 # デフォルトの /composer はWebルート外かつPVCにマウントされない「使い捨て」領域:
# vendor/ や composer.json がWeb経由で公開されるのを防ぐ # - vendor/ や composer.json がWeb経由で公開されない
# ※ Webルートと親子関係にないパスを推奨(ネストマウントによる空フォルダ生成を回避) # - Pod再起動のたびにクリーンな環境へ再構築されるため、
# 不正アクセスでマルウェアを書き込まれても再起動で消える
# #
# 【重要】PHPコードからの autoload.php の読み込み方: # 【重要】PHPコードからの autoload.php の読み込み方:
# require_once '/composer/vendor/autoload.php'; # require_once '/composer/vendor/autoload.php';
# #
# PVC上に永続化したい場合は /var/www 配下(例: "/var/www/composer")を指定
# 旧来の動作(Webルート直下に導入)へ戻す場合は "/var/www/html" を指定 # 旧来の動作(Webルート直下に導入)へ戻す場合は "/var/www/html" を指定
workingDir: "/composer" workingDir: "/composer"