5 Commits
Author SHA1 Message Date
GitHub Actions Bot eb3eef601a chore: update nginx to 1.31.4-alpine-perl, selenium to 151.0-chromedriver-151.0 (no release) 2026-08-24 02:00:21 +00:00
GitHub Actions Bot 7c5e9e44c8 chore: update nginx to 1.31.3-alpine-perl, selenium to 151.0-chromedriver-151.0 (no release) 2026-08-17 02:00:23 +00:00
claudeandClaude Fable 5 e9428c6448 feat: IngressのproxyBodySizeもuploadMaxSizeに自動連動 (v8.5.9-c)
Helm Chart Release / release-chart (push) Successful in 5s
uploadMaxSizeでnginx/PHPのアップロード上限は連動していたが、
ingress.enabled: true の場合、ingress-nginx側にも独自の上限
(デフォルト1MB)があり、そこで先に弾かれるケースが残っていた。

templates/ingress.yaml で、ingress.annotationsに
nginx.ingress.kubernetes.io/proxy-body-sizeが明示指定されていない
場合、uploadMaxSizeの値を自動的に付与するようにした(merge使用、
明示指定があればそちらを優先)。

これでuploadMaxSize 1箇所の設定でnginx・PHP・Ingressの3箇所すべてに
反映される。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 00:09:20 +09:00
claudeandClaude Fable 5 8f1b050bb2 feat: アップロード最大サイズをvalues.yamlで設定可能に (v8.5.9-b)
Helm Chart Release / release-chart (push) Successful in 5s
大きなファイルのアップロードが失敗する問題(nginxとPHPそれぞれに
別々の上限があり、片方だけ上げても失敗する)に対応するため、
uploadMaxSize パラメータを新設(デフォルト 100m)。

- values.yaml: uploadMaxSize を追加
- templates/configmap.yaml: nginx の client_max_body_size に反映
- templates/deployment.yaml: PHP-FPM起動時に
  /usr/local/etc/php/conf.d/99-uploads.ini を生成し、
  upload_max_filesize / post_max_size に同じ値を設定(常時適用)
- README.md: パラメータ表と設計についての注記を追加

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 23:22:26 +09:00
claudeandClaude Fable 5 e27f02992f fix: sitemap.xmlのContent-Typeを application/xml; charset=utf-8 に明示 (v8.5.9-a)
Helm Chart Release / release-chart (push) Successful in 7s
標準のmime.typesでは .xml が text/xml 扱いとなりcharsetが付与されず、
ブラウザやGoogle Search Consoleなどのツールが正しく解釈できない
場合があった。

templates/configmap.yaml のnginx設定に location = /sitemap.xml を
追加し、types {} + default_type で明示的にContent-Typeを指定する
ようにした。静的ファイルの場合のみ有効(PHP動的生成には別途
header()指定が必要)。設定不要・常時有効。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 22:14:31 +09:00
10 changed files with 202 additions and 7 deletions
+35
View File
@@ -0,0 +1,35 @@
# Changelog - Version 8.5.9-a
## 修正
### sitemap.xml のContent-Typeを明示的に指定
`/sitemap.xml`(静的ファイル)へのアクセス時、標準の `mime.types` では `.xml``text/xml` 扱いとなり `charset` が付与されないため、ブラウザやGoogle Search Consoleなどのツールが正しく解釈できない場合がありました。
**対応**: `templates/configmap.yaml` のnginx設定に `location = /sitemap.xml` を追加し、`types { } default_type "application/xml; charset=utf-8";` によって明示的にContent-Typeを指定するようにしました。
```nginx
location = /sitemap.xml {
types { }
default_type "application/xml; charset=utf-8";
try_files $uri =404;
}
```
## 注意事項
- この対応は `/sitemap.xml` が**静的ファイル**として `html/` 直下に配置されている場合に適用されます。
- PHPで動的に生成する場合(`/index.php` へのフォールバック経由)は、nginxのこの設定は適用されません。PHP側で `header('Content-Type: application/xml; charset=utf-8');` を明示的に指定してください。
- 設定不要・常時有効です(values.yamlへの変更はありません)。ファイルが存在しない場合は従来どおり404を返します。
## アップグレード手順
```bash
helm repo update
helm upgrade <リリース名> cafepieters/phpfpm --version 8.5.9-a -f values.yaml
```
---
**リリース日**: 2026-08-06
**担当**: プロサーバーエンジニア(Claude)
+52
View File
@@ -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)
+40
View File
@@ -0,0 +1,40 @@
# Changelog - Version 8.5.9-c
## 新機能
### Ingressのアップロードサイズ上限も uploadMaxSize に自動連動
v8.5.9-b で `uploadMaxSize` によりnginx/PHPのアップロード上限を連動させましたが、`ingress.enabled: true` で運用している場合、Ingressコントローラー(ingress-nginx)にも独自のリクエストサイズ上限(デフォルト1MB)があり、そこで先に弾かれてしまうケースが残っていました。
**対応**: `templates/ingress.yaml` で、`ingress.annotations``nginx.ingress.kubernetes.io/proxy-body-size` が明示指定されていない場合、`uploadMaxSize` の値を自動的に付与するようにしました。ユーザーが `ingress.annotations` に明示的に指定した場合はそちらが優先されます。
```yaml
# 何も指定しなくても、Ingressにも uploadMaxSize の値(デフォルト100m)が反映される
uploadMaxSize: "100m"
ingress:
enabled: true
```
これにより、`uploadMaxSize` 1箇所の設定で以下すべてに反映されます:
- nginxPodコンテナ内)の `client_max_body_size`
- PHPの `upload_max_filesize` / `post_max_size`
- ingress-nginxの `nginx.ingress.kubernetes.io/proxy-body-size`
## 互換性
- Ingressコントローラーがingress-nginx以外の場合、このアノテーションは無視されます。該当コントローラー向けの設定を `ingress.annotations` に明示的に指定してください。
- 既存で `ingress.annotations` に独自の `proxy-body-size` を指定している場合、その値がそのまま優先されるため影響ありません。
## アップグレード手順
```bash
helm repo update
helm upgrade <リリース名> cafepieters/phpfpm --version 8.5.9-c -f values.yaml
```
---
**リリース日**: 2026-08-06
**担当**: プロサーバーエンジニア(Claude)
+18
View File
@@ -22,6 +22,24 @@ Raspberry Pi などのベアメタルで稼働することを想定した、Kube
## チャート改修履歴 ## チャート改修履歴
### Ingressのproxy-body-sizeもuploadMaxSizeに連動(2026-08-06, v8.5.9-c
v8.5.9-bのフォローアップ。`templates/ingress.yaml``merge (deepCopy .Values.ingress.annotations) (dict "nginx.ingress.kubernetes.io/proxy-body-size" .Values.uploadMaxSize)` を使い、ユーザーが明示指定していなければ `uploadMaxSize` をIngressの `proxy-body-size` にも自動反映。明示指定があればそちらが優先(sprigのmergeはdst=ユーザー指定annotationsが優先、srcのデフォルト値は不足分のみ補う)。これで `uploadMaxSize` 1箇所でnginx・PHP・Ingressの3箇所すべてが揃う。
**対象ファイル**: `templates/ingress.yaml`, `values.yaml`, `README.md`, `Chart.yaml`, `CHANGELOG-8.5.9-c.md`
### 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()指定が必要)。設定不要・常時有効。
**対象ファイル**: `templates/configmap.yaml`, `README.md`, `Chart.yaml`, `CHANGELOG-8.5.9-a.md`
### Python導入オプションの追加(2026-07-19, v8.5.8-a ### Python導入オプションの追加(2026-07-19, v8.5.8-a
`python` セクションを新設し、`values.yaml` の設定だけでPython仮想環境(venv)を導入可能にした。Composerと同じ設計方針(デフォルト導入先 `/venv` はPVC非マウントの使い捨て領域、`packages`/`useRequirementsTxt`の二択、`additionalApkPackages`でネイティブ拡張ビルド対応)。requirements.txtの展開は `trim | nindent 14`(v8.5.6-dのバグ修正と同じ手法)。PHPからは `exec('/venv/bin/python3 script.py')` で呼び出す。 `python` セクションを新設し、`values.yaml` の設定だけでPython仮想環境(venv)を導入可能にした。Composerと同じ設計方針(デフォルト導入先 `/venv` はPVC非マウントの使い捨て領域、`packages`/`useRequirementsTxt`の二択、`additionalApkPackages`でネイティブ拡張ビルド対応)。requirements.txtの展開は `trim | nindent 14`(v8.5.6-dのバグ修正と同じ手法)。PHPからは `exec('/venv/bin/python3 script.py')` で呼び出す。
+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.9 version: 8.5.9-c
appVersion: "8.5.9" appVersion: "8.5.9"
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
+18
View File
@@ -108,6 +108,17 @@ kubectl logs -l app.kubernetes.io/name=phpfpm -c nginx
| `image.nginx.tag` | Nginxバージョン | `1.29.4-alpine-perl` | | `image.nginx.tag` | Nginxバージョン | `1.29.4-alpine-perl` |
| `service.type` | Serviceタイプ | `LoadBalancer` | | `service.type` | Serviceタイプ | `LoadBalancer` |
| `service.port` | Serviceポート | `80` | | `service.port` | Serviceポート | `80` |
| `uploadMaxSize` | アップロード最大サイズ(nginx/PHP両方に反映) | `"100m"` |
> **📌 アップロードサイズ上限について**
> `uploadMaxSize` の値は、以下**すべて**に同時に反映されます。どれか一つでも小さいと、そこで上限に達して失敗するため、この1つの値で揃える設計です。
> - nginxPodコンテナ内)の `client_max_body_size`
> - PHPの `upload_max_filesize` / `post_max_size`
> - `ingress.enabled: true` の場合、ingress-nginxの `nginx.ingress.kubernetes.io/proxy-body-size`(明示指定があればそちらが優先)
>
> 単位は `k` / `m` / `g`(大文字小文字問わず)が使用できます(例: `"200m"`, `"1g"`)。
>
> 大きなファイルをPHP側でメモリに読み込んで処理する場合は、PHPの `memory_limit`(デフォルト128M程度)が不足する可能性があります。その場合は `phpEnv` 等ではなくカスタムイメージ、または将来的な設定拡張で対応してください。
### 永続化ストレージ ### 永続化ストレージ
@@ -213,6 +224,9 @@ PHP 側では `$_ENV['KEY']` または `getenv('KEY')` で取得できます。
| `ingress.hosts` | ホスト設定 | `[{host: "example.tld"}]` | | `ingress.hosts` | ホスト設定 | `[{host: "example.tld"}]` |
| `ingress.tls` | TLS設定 | `[]` | | `ingress.tls` | TLS設定 | `[]` |
> **📌 Ingressのアップロードサイズ上限**
> `ingress.enabled: true` の場合、`nginx.ingress.kubernetes.io/proxy-body-size` アノテーションが `uploadMaxSize` の値で**自動的に**付与されます(明示的に `ingress.annotations` へ指定した場合はそちらが優先されます)。Ingressコントローラーがnginx以外の場合は、`ingress.annotations` にそのコントローラー向けの上限設定を明示的に指定してください。
### Nginx設定 ### Nginx設定
| パラメータ | 説明 | デフォルト | | パラメータ | 説明 | デフォルト |
@@ -225,6 +239,10 @@ PHP 側では `$_ENV['KEY']` または `getenv('KEY')` で取得できます。
| `nginx.forwardRealIP.trustedProxies` | 信頼するプロキシネットワーク | `["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]` | | `nginx.forwardRealIP.trustedProxies` | 信頼するプロキシネットワーク | `["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]` |
| `nginx.forwardRealIP.additionalTrustedProxies` | 追加の信頼プロキシ | `[]` | | `nginx.forwardRealIP.additionalTrustedProxies` | 追加の信頼プロキシ | `[]` |
> **📌 sitemap.xml のContent-Type**
> `/sitemap.xml`(静的ファイルとして配置した場合)は、常に `Content-Type: application/xml; charset=utf-8` で配信されます。標準の `mime.types` では `.xml` が `text/xml` 扱いでcharsetが付かず、ブラウザやGoogle Search Consoleなどのツールが正しく解釈できない場合があるための組み込み対応です(設定不要、常時有効)。
> なお、PHPで動的に生成する場合はこの設定は適用されません(PHP側で `header('Content-Type: application/xml; charset=utf-8');` を指定してください)。
## 使用例 ## 使用例
### 例1: シンプルなPHPアプリケーション ### 例1: シンプルなPHPアプリケーション
+12
View File
@@ -55,6 +55,18 @@ data:
root /var/www/html; root /var/www/html;
index index.php index.html index.htm; 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が正しく解釈できない場合があるため
location = /sitemap.xml {
types { }
default_type "application/xml; charset=utf-8";
try_files $uri =404;
}
location / { location / {
try_files $uri $uri/ /index.php?$query_string; try_files $uri $uri/ /index.php?$query_string;
} }
+8
View File
@@ -36,6 +36,14 @@ spec:
- | - |
echo "Starting PHP-FPM setup process..." 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 }} {{- if or .Values.composer.enabled .Values.selenium.enabled .Values.externalDatabase.enabled .Values.python.enabled }}
# ======================================== # ========================================
# APKパッケージのインストール # APKパッケージのインストール
+3 -1
View File
@@ -6,7 +6,9 @@ metadata:
labels: labels:
{{- include "phpfpm.labels" . | nindent 4 }} {{- include "phpfpm.labels" . | nindent 4 }}
annotations: annotations:
{{- toYaml .Values.ingress.annotations | nindent 4 }} {{- /* uploadMaxSize を ingress-nginx の proxy-body-size に自動反映(明示指定があればそちらを優先) */}}
{{- $ingressAnnotations := merge (deepCopy .Values.ingress.annotations) (dict "nginx.ingress.kubernetes.io/proxy-body-size" .Values.uploadMaxSize) }}
{{- toYaml $ingressAnnotations | nindent 4 }}
spec: spec:
{{- if .Values.ingress.className }} {{- if .Values.ingress.className }}
ingressClassName: {{ .Values.ingress.className }} ingressClassName: {{ .Values.ingress.className }}
+14 -4
View File
@@ -4,7 +4,7 @@ image:
nginx: nginx:
registry: docker.io registry: docker.io
repository: nginx repository: nginx
tag: "1.31.3-alpine-perl" tag: "1.31.4-alpine-perl"
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
php: php:
registry: docker.io registry: docker.io
@@ -14,7 +14,7 @@ image:
selenium: selenium:
registry: docker.io registry: docker.io
repository: selenium/standalone-chromium repository: selenium/standalone-chromium
tag: "150.0-chromedriver-150.0" tag: "151.0-chromedriver-151.0"
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
service: service:
@@ -22,15 +22,25 @@ service:
type: LoadBalancer type: LoadBalancer
port: 80 port: 80
# アップロード可能な最大サイズ
# 以下3箇所に同じ値を反映する(どれか一つでも小さいと、そこで上限に達して失敗するため):
# - nginxPodコンテナ内)の client_max_body_size
# - PHPの upload_max_filesize / post_max_size
# - ingress.enabled: true の場合、ingress-nginxの nginx.ingress.kubernetes.io/proxy-body-size
# 単位はnginx/PHP共通でk/m/g(大文字小文字問わず)が使用可能(例: "100m", "1g"
uploadMaxSize: "100m"
ingress: ingress:
enabled: false enabled: false
className: "" className: ""
# nginx.ingress.kubernetes.io/proxy-body-size は uploadMaxSize の値が自動的に付与されるため
# 明示的に指定する必要はない(Ingress側の上限もnginx/PHPと揃う)
# 別の値にしたい場合や別コントローラーを使う場合は、ここに明示指定すれば上書きされる
annotations: {} annotations: {}
# { # {
# acme.cert-manager.io/http01-ingress-class: "nginx", # acme.cert-manager.io/http01-ingress-class: "nginx",
# cert-manager.io/cluster-issuer: "letsencrypt-issuer", # cert-manager.io/cluster-issuer: "letsencrypt-issuer",
# nginx.ingress.kubernetes.io/from-to-www-redirect: "true", # nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
# nginx.ingress.kubernetes.io/proxy-body-size: "100m"
# } # }
hosts: hosts:
- host: example.tld - host: example.tld