feat: PVCルートを /var/www にマウント、/composer を使い捨て領域に変更 (v8.5.6-e)
Helm Chart Release / release-chart (push) Successful in 6s
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:
@@ -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)
|
||||
@@ -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: true` 指定時、heredoc 内の `{{ .Values.composer.composerJson }}` がインデント無しで展開され、複数行JSONの2行目以降がブロックスカラーを破壊して YAML parse error になる潜在バグを修正。`trim | nindent 14` で展開するよう変更(`composerLock` も同様)。
|
||||
|
||||
+1
-1
@@ -2,6 +2,6 @@ apiVersion: v2
|
||||
name: phpfpm
|
||||
description: Nginx + PHP-FPM Helm Chart with external DB and optional Selenium support
|
||||
type: application
|
||||
version: 8.5.6-d
|
||||
version: 8.5.6-e
|
||||
appVersion: "8.5.6"
|
||||
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png
|
||||
|
||||
@@ -117,6 +117,14 @@ kubectl logs -l app.kubernetes.io/name=phpfpm -c nginx
|
||||
| `persistence.size` | ストレージサイズ | `1Gi` |
|
||||
| `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設定
|
||||
|
||||
| パラメータ | 説明 | デフォルト |
|
||||
@@ -241,7 +249,8 @@ persistence:
|
||||
> **📌 Composerの導入先について**
|
||||
> Composerパッケージはデフォルトで**Webルート外**の `/composer` に導入されます(`composer.workingDir` で変更可能)。
|
||||
> `vendor/` や `composer.json` がWeb経由で公開されないため、情報漏洩などのセキュリティリスクを回避できます。
|
||||
> また、Webルート(`/var/www/html`)と親子関係にないパスのため、ネストマウントによる空フォルダも生成されません。
|
||||
>
|
||||
> `/composer` は**PVCにマウントされない使い捨て領域**です。Pod再起動のたびにクリーンな環境へ再構築されるため、万一不正アクセスでマルウェアを書き込まれても再起動で消え、常にクリーンなComposer環境を維持できます(PVCに永続化したい場合は `/var/www/composer` など `/var/www` 配下を指定)。
|
||||
>
|
||||
> PHPコードからは以下のように読み込みます:
|
||||
> ```php
|
||||
|
||||
@@ -200,16 +200,13 @@ spec:
|
||||
ports:
|
||||
- containerPort: 9000 # PHP-FPMは9000ポートでリッスン
|
||||
volumeMounts:
|
||||
# PVCルートを /var/www にマウント
|
||||
# - /var/www/html のみ nginx が公開(nginx側は html サブパスだけをマウント)
|
||||
# - それ以外(/var/www/<任意>)は非公開ファイルの格納先として利用可能
|
||||
# ※ Composer導入先(デフォルト /composer)は意図的にマウントしない:
|
||||
# Pod再起動のたびにクリーンな環境へ再構築される使い捨て領域とする
|
||||
- name: app-storage
|
||||
mountPath: /var/www/html
|
||||
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 }}
|
||||
mountPath: /var/www
|
||||
{{- if and .Values.composer.enabled .Values.composer.useComposerJson }}
|
||||
- name: composer-config
|
||||
mountPath: /tmp/composer-init
|
||||
|
||||
+5
-3
@@ -86,13 +86,15 @@ composer:
|
||||
enabled: false
|
||||
|
||||
# Composerの導入先ディレクトリ(composer.json / vendor の配置先)
|
||||
# デフォルトはWebルート(/var/www/html)の外の /composer に導入し、
|
||||
# vendor/ や composer.json がWeb経由で公開されるのを防ぐ
|
||||
# ※ Webルートと親子関係にないパスを推奨(ネストマウントによる空フォルダ生成を回避)
|
||||
# デフォルトの /composer はWebルート外かつPVCにマウントされない「使い捨て」領域:
|
||||
# - vendor/ や composer.json がWeb経由で公開されない
|
||||
# - Pod再起動のたびにクリーンな環境へ再構築されるため、
|
||||
# 不正アクセスでマルウェアを書き込まれても再起動で消える
|
||||
#
|
||||
# 【重要】PHPコードからの autoload.php の読み込み方:
|
||||
# require_once '/composer/vendor/autoload.php';
|
||||
#
|
||||
# PVC上に永続化したい場合は /var/www 配下(例: "/var/www/composer")を指定
|
||||
# 旧来の動作(Webルート直下に導入)へ戻す場合は "/var/www/html" を指定
|
||||
workingDir: "/composer"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user