3 Commits
Author SHA1 Message Date
GitHub Actions Bot 0cf3e29b9e chore: update to PHP 8.5.12, nginx 1.31.8-alpine-perl, selenium 155.0-chromedriver-155.0 2026-10-21 23:22:52 +00:00
claude f8aaa5944d docs: nginx.customConfig の取り違えと client_max_body_size 重複を防ぐ記述に修正
Helm Chart Release / release-chart (push) Successful in 6s
あるプロジェクトから「serverSnippet が効かない」「snippet は古いキー」との
指摘があり調査した結果、指摘の前提は誤りだった。

- 実際に使われる templates/configmap.yaml が読むのは snippet で、values.yaml と
  README も snippet で一致している。
- serverSnippet / httpSnippet は、.Values.nginx.enabled が存在せず一度も出力
  されない configmap-nginx.yaml だけが読むキーで、values・README に載ったことが
  なく、指定しても黙って無視される。
- README 例6・例9 が snippet に client_max_body_size を書く手順になっており、
  v8.5.9-b 以降は uploadMaxSize の自動出力と重複して nginx が起動しない
  (2026-09-29 の障害の発生源)。例6 は location ~ \.php$ も重複定義していた。

挙動の変更はなくドキュメント・コメントのみ。
- values.yaml / README: 読まれるキーは snippet のみ、挿入先は server ブロック内、
  client_max_body_size は書かず uploadMaxSize を使うことを明記
- README 例6・例9 を uploadMaxSize 指定に修正
- configmap-nginx.yaml: 未使用であることを示す注記を追加

手動リリース 8.5.11-a。
2026-10-20 20:38:07 +09:00
GitHub Actions Bot 5ab3428893 chore: update nginx to 1.31.7-alpine-perl, selenium to 155.0-chromedriver-155.0 (no release) 2026-10-19 02:00:17 +00:00
5 changed files with 55 additions and 19 deletions
+10
View File
@@ -27,6 +27,16 @@ Websites 組織の各サイト(e-learn.jp / fcdomain.com / hotels / tskholding
## チャート改修履歴 ## チャート改修履歴
### nginx.customConfig の取り違え防止(ドキュメント修正、2026-10-20, v8.5.11-a)
- **症状 / 背景**: あるプロジェクトのレポートで「`serverSnippet` が効かない。既定の `snippet:` はどのテンプレートも読まない古いキーでは」という指摘があった。別件で、`snippet` に `client_max_body_size` を書いていたプロジェクトが `directive is duplicate` で nginx 起動失敗する障害(2026-09-29)も起きていた。
- **原因**:
- 指摘は誤り。実際に使われる `templates/configmap.yaml` が読むのは `snippet` で、`values.yaml`・README と一致している。`serverSnippet` / `httpSnippet` は、一度も出力されない `templates/configmap-nginx.yaml`(`.Values.nginx.enabled` が values に無く常に偽)だけが読むキーで、values・README に載ったことがない(コミット `31106e0` 由来)。指定すると黙って無視される。
- README 例6・例9 が `snippet` に `client_max_body_size` を書く手順を案内しており、v8.5.9-b 以降は `uploadMaxSize` の自動出力と重複して起動失敗する。例6 はチャート本体と重複する `location ~ \.php$` も再定義していた。
- **修正内容**: 挙動の変更なし(ドキュメント・コメントのみ)。`values.yaml` と README に「読まれるキーは `snippet` のみ、挿入先は server ブロック内、`client_max_body_size` は書かず `uploadMaxSize` を使う」を明記。README 例6・例9 を `uploadMaxSize` 指定に修正。`configmap-nginx.yaml` 先頭に「未使用」の注記を追加。
- **やらなかったこと**: `snippet` を `serverSnippet` に改名する(動いているキーを壊すため)。`serverSnippet` を `snippet` の別名として有効化する(これまで無視されていた設定が突然有効になり、重複で起動失敗する恐れがあるため)。`http` レベルの snippet が必要になった場合は、別途 `configmap.yaml` に正式対応を追加する。
- **対象ファイル**: `values.yaml`, `README.md`, `templates/configmap-nginx.yaml`(コメントのみ), `Chart.yaml`
### Cron(CronJob)定期実行機能を追加(2026-09-27, v8.5.10-e) ### Cron(CronJob)定期実行機能を追加(2026-09-27, v8.5.10-e)
- **背景**: 定期実行したいPHPスクリプト(レポート送信・バッチ処理等)を動かす手段がなく、外部で別途スケジューラを用意する必要があった。 - **背景**: 定期実行したいPHPスクリプト(レポート送信・バッチ処理等)を動かす手段がなく、外部で別途スケジューラを用意する必要があった。
+2 -2
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.11 version: 8.5.12
appVersion: "8.5.11" appVersion: "8.5.12"
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
+22 -14
View File
@@ -329,13 +329,18 @@ smtp:
| パラメータ | 説明 | デフォルト | | パラメータ | 説明 | デフォルト |
|-----------|------|-----------| |-----------|------|-----------|
| `nginx.customConfig.enabled` | カスタム設定有効化 | `false` | | `nginx.customConfig.enabled` | カスタム設定有効化 | `false` |
| `nginx.customConfig.snippet` | 設定スニペット | `""` | | `nginx.customConfig.snippet` | `server { }` ブロック末尾へそのまま挿入するnginx設定(下記注意参照) | `""` |
| `nginx.forwardRealIP.enabled` | リアルIP取得有効化 | `false` | | `nginx.forwardRealIP.enabled` | リアルIP取得有効化 | `false` |
| `nginx.forwardRealIP.header` | リアルIP取得ヘッダー | `"X-Forwarded-For"` | | `nginx.forwardRealIP.header` | リアルIP取得ヘッダー | `"X-Forwarded-For"` |
| `nginx.forwardRealIP.recursive` | 再帰的IP検索 | `true` | | `nginx.forwardRealIP.recursive` | 再帰的IP検索 | `true` |
| `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` | 追加の信頼プロキシ | `[]` |
> **📌 `nginx.customConfig.snippet` の注意点**
> - 読まれるキーは `snippet` のみです。`serverSnippet` / `httpSnippet` というキーは存在せず、指定しても**無視されます**(過去に作られた未使用テンプレート `configmap-nginx.yaml` 専用のキーで、一度も出力されたことがありません)。
> - 挿入先は `server { }` ブロック内です。`limit_req_zone` など `http` レベル専用のディレクティブは書けません。
> - チャートが自動で出力する設定を重複して書くと、nginxが起動しなくなります。特に **`client_max_body_size` は書かないでください**(`directive is duplicate` で起動失敗)。アップロード上限は `uploadMaxSize` で設定します。
> **📌 sitemap.xml のContent-Type** > **📌 sitemap.xml のContent-Type**
> `/sitemap.xml`(静的ファイルとして配置した場合)は、常に `Content-Type: application/xml; charset=utf-8` で配信されます。標準の `mime.types` では `.xml` が `text/xml` 扱いでcharsetが付かず、ブラウザやGoogle Search Consoleなどのツールが正しく解釈できない場合があるための組み込み対応です(設定不要、常時有効)。 > `/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');` を指定してください)。 > なお、PHPで動的に生成する場合はこの設定は適用されません(PHP側で `header('Content-Type: application/xml; charset=utf-8');` を指定してください)。
@@ -521,22 +526,21 @@ $driver->quit();
```yaml ```yaml
# values.yaml # values.yaml
# アップロード上限は snippet ではなく uploadMaxSize で設定する
# (nginx の client_max_body_size を snippet に書くと、チャートの自動出力と重複して起動失敗する)
uploadMaxSize: "100m"
nginx: nginx:
customConfig: customConfig:
enabled: true enabled: true
# server { } ブロックの末尾にそのまま挿入される。
# PHPの location ~ \.php$ はチャート本体が定義済みのため、ここでは再定義しない
# (タイムアウト等は server レベルで指定すれば PHP の location にも継承される)
snippet: | snippet: |
client_max_body_size 100M; fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
fastcgi_send_timeout 300;
}
location /admin { location /admin {
auth_basic "Administrator Area"; auth_basic "Administrator Area";
auth_basic_user_file /etc/nginx/.htpasswd; auth_basic_user_file /etc/nginx/.htpasswd;
@@ -546,6 +550,8 @@ persistence:
enabled: true enabled: true
``` ```
> `snippet` で指定する際の注意点は、[Nginx設定](#nginx設定)の「`nginx.customConfig.snippet` の注意点」を参照してください。
### 例7: ベアメタル環境でのリアルIP取得 ### 例7: ベアメタル環境でのリアルIP取得
ベアメタルKubernetesやLoadBalancer経由でのアクセスで、PHPからクライアントの実IPアドレスを取得する設定です。 ベアメタルKubernetesやLoadBalancer経由でのアクセスで、PHPからクライアントの実IPアドレスを取得する設定です。
@@ -706,11 +712,13 @@ ingress:
hosts: hosts:
- api.production.com - api.production.com
# アップロード上限は snippet ではなく uploadMaxSize で設定する
uploadMaxSize: "50m"
nginx: nginx:
customConfig: customConfig:
enabled: true enabled: true
snippet: | snippet: |
client_max_body_size 50M;
fastcgi_read_timeout 300; fastcgi_read_timeout 300;
# Opcache設定 # Opcache設定
+8
View File
@@ -1,3 +1,11 @@
{{- /*
【未使用】このファイルは出力されない。
下の if が参照する .Values.nginx.enabled は values.yaml に存在しないため、常に偽になる。
実際に使われる nginx 設定は templates/configmap.yaml(deployment.yaml が nginx.conf キーを
マウントしている)。カスタム設定として読まれるのは nginx.customConfig.snippet のみで、
このファイルだけが読む serverSnippet / httpSnippet は指定しても無視される。
nginx の設定を変更する場合は configmap.yaml を編集すること。
*/ -}}
{{- if .Values.nginx.enabled }} {{- if .Values.nginx.enabled }}
apiVersion: v1 apiVersion: v1
kind: ConfigMap kind: ConfigMap
+13 -3
View File
@@ -4,17 +4,17 @@ image:
nginx: nginx:
registry: docker.io registry: docker.io
repository: nginx repository: nginx
tag: "1.31.6-alpine-perl" tag: "1.31.8-alpine-perl"
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
php: php:
registry: docker.io registry: docker.io
repository: php repository: php
tag: "8.5.11-fpm-alpine3.24" tag: "8.5.12-fpm-alpine3.24"
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
selenium: selenium:
registry: docker.io registry: docker.io
repository: selenium/standalone-chromium repository: selenium/standalone-chromium
tag: "152.0-chromedriver-152.0" tag: "155.0-chromedriver-155.0"
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
service: service:
@@ -64,6 +64,16 @@ persistence:
size: 1Gi size: 1Gi
nginx: nginx:
# 独自のnginx設定を、server { } ブロックの末尾へそのまま挿入する(templates/configmap.yaml)。
# 読まれるキーは snippet のみ。serverSnippet / httpSnippet は未使用の
# templates/configmap-nginx.yaml 専用で出力されないため、指定しても無視される。
# また挿入先は server ブロック内のため、http レベル専用のディレクティブ
# (limit_req_zone 等)は書けない。
#
# 【重複注意】以下はチャートが自動で出力するため snippet に書かない
# (書くと "directive is duplicate" 等で nginx が起動しなくなる):
# - client_max_body_size → uploadMaxSize で設定する
# - location = /sitemap.xml(Content-Typeの明示)
customConfig: customConfig:
enabled: false enabled: false
snippet: |- snippet: |-