diff --git a/CHANGELOG-8.5.9-b.md b/CHANGELOG-8.5.9-b.md new file mode 100644 index 0000000..c487c16 --- /dev/null +++ b/CHANGELOG-8.5.9-b.md @@ -0,0 +1,52 @@ +# Changelog - Version 8.5.9-b + +## 新機能 + +### アップロード最大サイズを values.yaml で設定可能に + +大きなファイルのアップロードが失敗する問題(nginxとPHPそれぞれに別々のアップロード上限があり、片方だけ上げても失敗する)に対応するため、`uploadMaxSize` パラメータを新設しました。 + +#### 主な変更点 + +1. **values.yaml** + - `uploadMaxSize: "100m"` を追加(デフォルト100MB) + +2. **templates/configmap.yaml** + - nginx設定に `client_max_body_size {{ .Values.uploadMaxSize }};` を追加 + +3. **templates/deployment.yaml** + - PHP-FPM起動時に `/usr/local/etc/php/conf.d/99-uploads.ini` を生成し、 + `upload_max_filesize` / `post_max_size` に同じ値を設定 + - 常時適用(他機能の有効化状態に依存しない) + +4. **README.md** + - パラメータ表と、nginx/PHP両方に反映される設計についての注記を追加 + +## 背景 + +nginxの `client_max_body_size` だけを上げても、PHPには独自の `upload_max_filesize`(デフォルト2M)/ `post_max_size`(デフォルト8M)という別の上限があり、nginxを通過した後にPHP側で無言で失敗するケースがありました。この2つを同じ値で連動させることで、設定漏れによる失敗を構造的に防ぎます。 + +## 使用例 + +```yaml +uploadMaxSize: "100m" +# 大きな動画ファイルなどを扱う場合 +# uploadMaxSize: "500m" +``` + +## 互換性 + +- デフォルト値は `100m`(従来の暗黙の上限より大幅に緩和)。既存よりアップロード可能サイズが大きくなる方向の変更のため、既存環境への悪影響はありません。 +- 大きなファイルをPHP側でメモリに読み込んで処理する場合、`memory_limit`(デフォルト128M程度)が別途不足する可能性がある点に注意してください。 + +## アップグレード手順 + +```bash +helm repo update +helm upgrade <リリース名> cafepieters/phpfpm --version 8.5.9-b -f values.yaml +``` + +--- + +**リリース日**: 2026-08-06 +**担当**: プロサーバーエンジニア(Claude) diff --git a/CLAUDE.md b/CLAUDE.md index 066af43..b2f9d95 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -22,6 +22,12 @@ Raspberry Pi などのベアメタルで稼働することを想定した、Kube ## チャート改修履歴 +### uploadMaxSize の追加(2026-08-06, v8.5.9-b) + +nginxの `client_max_body_size` とPHPの `upload_max_filesize`/`post_max_size` を1つの `uploadMaxSize`(デフォルト `"100m"`)で連動させるパラメータを追加。片方だけ上げてももう片方の上限でアップロードが無言で失敗する問題への対応。PHP側は起動時に `/usr/local/etc/php/conf.d/99-uploads.ini` を常時生成(他機能の有効/無効に依存しない)。memory_limitは対象外(別途必要なら将来検討)。 + +**対象ファイル**: `values.yaml`, `templates/configmap.yaml`, `templates/deployment.yaml`, `README.md`, `Chart.yaml`, `CHANGELOG-8.5.9-b.md` + ### sitemap.xml のContent-Type明示(2026-08-06, v8.5.9-a) `templates/configmap.yaml`(実際に使われているnginx設定。`templates/configmap-nginx.yaml` は `.Values.nginx.enabled` が values.yaml に存在せず常に未出力の死んだファイルなので注意)に `location = /sitemap.xml { types { } default_type "application/xml; charset=utf-8"; ... }` を追加。標準mime.typesでは `.xml` が `text/xml` 扱いでcharset無しになる問題への対応。静的ファイルの場合のみ有効、PHP動的生成には効かない(PHP側でheader()指定が必要)。設定不要・常時有効。 diff --git a/Chart.yaml b/Chart.yaml index a21af87..7ab9d17 100644 --- a/Chart.yaml +++ b/Chart.yaml @@ -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.9-a +version: 8.5.9-b appVersion: "8.5.9" icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png diff --git a/README.md b/README.md index 97b3109..2f8cf8a 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,14 @@ kubectl logs -l app.kubernetes.io/name=phpfpm -c nginx | `image.nginx.tag` | Nginxバージョン | `1.29.4-alpine-perl` | | `service.type` | Serviceタイプ | `LoadBalancer` | | `service.port` | Serviceポート | `80` | +| `uploadMaxSize` | アップロード最大サイズ(nginx/PHP両方に反映) | `"100m"` | + +> **📌 アップロードサイズ上限について** +> `uploadMaxSize` の値は、nginxの `client_max_body_size` と、PHPの `upload_max_filesize` / `post_max_size` の**両方**に同時に反映されます。片方だけ上げてももう片方の上限で失敗するため、この1つの値で揃える設計です。 +> +> 単位は `k` / `m` / `g`(大文字小文字問わず)が使用できます(例: `"200m"`, `"1g"`)。 +> +> 大きなファイルをPHP側でメモリに読み込んで処理する場合は、PHPの `memory_limit`(デフォルト128M程度)が不足する可能性があります。その場合は `phpEnv` 等ではなくカスタムイメージ、または将来的な設定拡張で対応してください。 ### 永続化ストレージ diff --git a/templates/configmap.yaml b/templates/configmap.yaml index 66e5984..57e8692 100644 --- a/templates/configmap.yaml +++ b/templates/configmap.yaml @@ -55,6 +55,9 @@ data: root /var/www/html; index index.php index.html index.htm; + # アップロード可能な最大サイズ(PHP側のupload_max_filesize/post_max_sizeと連動) + client_max_body_size {{ .Values.uploadMaxSize }}; + # sitemap.xml のContent-Typeを明示的に指定 # 標準のmime.typesでは .xml は text/xml 扱いでcharsetが付かず、 # ブラウザやSearch Consoleが正しく解釈できない場合があるため diff --git a/templates/deployment.yaml b/templates/deployment.yaml index 09e9a55..964d918 100644 --- a/templates/deployment.yaml +++ b/templates/deployment.yaml @@ -35,7 +35,15 @@ spec: - -c - | echo "Starting PHP-FPM setup process..." - + + # ======================================== + # アップロードサイズ上限(nginxのclient_max_body_sizeと連動) + # ======================================== + cat > /usr/local/etc/php/conf.d/99-uploads.ini << 'UPLOADS_INI_EOF' + upload_max_filesize = {{ .Values.uploadMaxSize }} + post_max_size = {{ .Values.uploadMaxSize }} + UPLOADS_INI_EOF + {{- if or .Values.composer.enabled .Values.selenium.enabled .Values.externalDatabase.enabled .Values.python.enabled }} # ======================================== # APKパッケージのインストール diff --git a/values.yaml b/values.yaml index c0a1909..fd80b17 100644 --- a/values.yaml +++ b/values.yaml @@ -22,6 +22,12 @@ service: type: LoadBalancer port: 80 +# アップロード可能な最大サイズ +# nginxの client_max_body_size と、PHPの upload_max_filesize / post_max_size に +# 同じ値を反映する(両方を揃えないと、どちらか一方の上限で失敗するため) +# 単位はnginx/PHP共通でk/m/g(大文字小文字問わず)が使用可能(例: "100m", "1g") +uploadMaxSize: "100m" + ingress: enabled: false className: ""