feat: Composer導入先をWebルート外(/var/www)に変更 (v8.5.6-a)
Helm Chart Release / release-chart (push) Successful in 5s

従来はWebルート /var/www/html 直下にComposerを導入していたため、
composer.json / composer.lock / vendor/ がWeb経由で公開され、
依存パッケージ情報の漏洩などのセキュリティリスクがあった。

- values.yaml: composer.workingDir を追加(デフォルト: /var/www)
- templates/deployment.yaml: 作業ディレクトリを workingDir に変更、
  Webルート以外の場合はPVCの composer サブパスをマウントして永続化
- README.md: パラメータ説明・autoload読み込みパスの解説を追加
- Chart.yaml: 8.5.6-a(手動リリース)
- CHANGELOG-8.5.6-a.md: 変更内容を記録

PHP側は require_once '/var/www/vendor/autoload.php'; で読み込む。
旧動作へは composer.workingDir: "/var/www/html" で復帰可能。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 14:29:23 +09:00
co-authored by Claude Fable 5
parent 112fae7059
commit 8ff43615fa
6 changed files with 91 additions and 5 deletions
+50
View File
@@ -0,0 +1,50 @@
# Changelog - Version 8.5.6-a
## 変更点
### Composer導入先をWebルート外に変更(セキュリティ改善)
従来、Composerは Webルート `/var/www/html` 直下に導入されており、`composer.json` / `composer.lock` / `vendor/` がWeb経由で公開される状態でした。これらのファイルは公開する必要がなく、依存パッケージ構成の漏洩などセキュリティリスクとなるため、デフォルトの導入先をWebルート外の `/var/www` に変更しました。
#### 主な変更点
1. **values.yaml**
- `composer.workingDir` パラメータを追加(デフォルト: `"/var/www"`
- Composerの導入先ディレクトリを任意のパスに変更可能
2. **templates/deployment.yaml**
- Composer実行時の作業ディレクトリを `composer.workingDir` に変更(`mkdir -p` で自動作成)
- `workingDir` がWebルート(`/var/www/html`)以外の場合、PVCの `composer` サブパスを `workingDir` にマウントし、vendor類を永続化(Pod再起動時の再構築を回避、従来と同等の永続化動作を維持)
3. **README.md**
- `composer.workingDir` のパラメータ説明を追加
- Composer導入先とautoload読み込みパスの解説を追加
- Selenium使用例の `require_once` パスを更新
## PHPコードでの利用
```php
// 新: デフォルトの読み込みパス
require_once '/var/www/vendor/autoload.php';
```
## 互換性
- **注意**: PHPコード内で `require_once '/var/www/html/vendor/autoload.php';` や相対パス `vendor/autoload.php` を使用している場合は、パスの修正が必要です。
- 旧バージョンと同じ動作(Webルート直下に導入)へ戻す場合は、以下を指定してください:
```yaml
composer:
workingDir: "/var/www/html"
```
- 既存のPVC内 `html/vendor` はそのまま残ります。不要であれば手動で削除してください。
## セキュリティ
- `vendor/``composer.json` / `composer.lock` がWebサーバー(Nginx)から配信されなくなり、依存パッケージ情報の漏洩や、vendor内スクリプトへの直接アクセスのリスクを排除できます。
---
**リリース日**: 2026-07-19
**担当**: プロサーバーエンジニア(Claude)
+8
View File
@@ -22,6 +22,14 @@ Raspberry Pi などのベアメタルで稼働することを想定した、Kube
## チャート改修履歴
### composer.workingDir — Composer導入先のWebルート外への変更(2026-07-19, v8.5.6-a
Composerの導入先をWebルート `/var/www/html` からWebルート外の `/var/www` に変更し、`vendor/``composer.json` がWeb経由で公開されないようにした。`values.yaml``composer.workingDir` で導入先を変更可能(旧動作に戻すには `"/var/www/html"` を指定)。導入先がWebルート以外の場合、PVCの `composer` サブパスをマウントして永続化する。
PHP側の読み込みは `require_once '/var/www/vendor/autoload.php';`
**対象ファイル**: `values.yaml`, `templates/deployment.yaml`, `README.md`, `Chart.yaml`, `CHANGELOG-8.5.6-a.md`
### phpEnv — 汎用 PHP 環境変数サポート(2026-04-17
`values.yaml``phpEnv` セクションを追加し、DB 接続情報と同様に任意のキーと値を PHP-FPM コンテナの環境変数として渡せるようにした。
+1 -1
View File
@@ -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
version: 8.5.6-a
appVersion: "8.5.6"
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png
+13 -1
View File
@@ -122,6 +122,7 @@ kubectl logs -l app.kubernetes.io/name=phpfpm -c nginx
| パラメータ | 説明 | デフォルト |
|-----------|------|-----------|
| `composer.enabled` | Composer有効化 | `false` |
| `composer.workingDir` | Composer導入先ディレクトリ(`{workingDir}/vendor/autoload.php` | `"/var/www"` |
| `composer.packages` | インストールパッケージ | `[]` |
| `composer.useComposerJson` | composer.json使用 | `false` |
| `composer.composerJson` | composer.json内容 | `""` |
@@ -237,6 +238,17 @@ persistence:
size: 2Gi
```
> **📌 Composerの導入先について**
> Composerパッケージはデフォルトで**Webルート外**の `/var/www` に導入されます(`composer.workingDir` で変更可能)。
> `vendor/` や `composer.json` がWeb経由で公開されないため、情報漏洩などのセキュリティリスクを回避できます。
>
> PHPコードからは以下のように読み込みます:
> ```php
> require_once '/var/www/vendor/autoload.php';
> ```
>
> 旧バージョン(Webルート直下 `/var/www/html` に導入)と同じ動作に戻す場合は `composer.workingDir: "/var/www/html"` を指定してください。
### 例3: composer.jsonを使用
```yaml
@@ -330,7 +342,7 @@ resources:
**PHPコード例**:
```php
<?php
require_once '/var/www/html/vendor/autoload.php';
require_once '/var/www/vendor/autoload.php';
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
+11 -2
View File
@@ -106,8 +106,10 @@ spec:
{{- if or .Values.composer.enabled .Values.selenium.enabled }}
echo "Installing Composer..."
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
cd /var/www/html
# Composer導入先(デフォルトはWebルート外の /var/www
mkdir -p {{ .Values.composer.workingDir | default "/var/www" }}
cd {{ .Values.composer.workingDir | default "/var/www" }}
{{- if .Values.composer.enabled }}
# ユーザー定義のComposer設定
@@ -190,6 +192,13 @@ spec:
- name: app-storage
mountPath: /var/www/html
subPath: html
{{- $composerDir := .Values.composer.workingDir | default "/var/www" }}
{{- 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 }}
- name: composer-config
mountPath: /tmp/composer-init
+8 -1
View File
@@ -84,7 +84,14 @@ nginx:
composer:
# Composerを使用するかどうか
enabled: false
# Composerの導入先ディレクトリ(composer.json / vendor の配置先)
# デフォルトはWebルート(/var/www/html)の外の /var/www に導入し、
# vendor/ や composer.json がWeb経由で公開されるのを防ぐ
# PHPコードからは require_once '/var/www/vendor/autoload.php'; で読み込む
# 旧来の動作(Webルート直下に導入)へ戻す場合は "/var/www/html" を指定
workingDir: "/var/www"
# Composerでインストールするパッケージ
# packages配列が空の場合、composer.jsonを使用
packages: []