Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0cf3e29b9e | ||
|
|
f8aaa5944d | ||
|
|
5ab3428893 |
@@ -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)
|
||||
|
||||
- **背景**: 定期実行したいPHPスクリプト(レポート送信・バッチ処理等)を動かす手段がなく、外部で別途スケジューラを用意する必要があった。
|
||||
|
||||
+2
-2
@@ -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.11
|
||||
appVersion: "8.5.11"
|
||||
version: 8.5.12
|
||||
appVersion: "8.5.12"
|
||||
icon: https://upload.wikimedia.org/wikipedia/commons/thumb/2/27/PHP-logo.svg/330px-PHP-logo.svg.png
|
||||
|
||||
@@ -329,13 +329,18 @@ smtp:
|
||||
| パラメータ | 説明 | デフォルト |
|
||||
|-----------|------|-----------|
|
||||
| `nginx.customConfig.enabled` | カスタム設定有効化 | `false` |
|
||||
| `nginx.customConfig.snippet` | 設定スニペット | `""` |
|
||||
| `nginx.customConfig.snippet` | `server { }` ブロック末尾へそのまま挿入するnginx設定(下記注意参照) | `""` |
|
||||
| `nginx.forwardRealIP.enabled` | リアルIP取得有効化 | `false` |
|
||||
| `nginx.forwardRealIP.header` | リアルIP取得ヘッダー | `"X-Forwarded-For"` |
|
||||
| `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.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: application/xml; charset=utf-8` で配信されます。標準の `mime.types` では `.xml` が `text/xml` 扱いでcharsetが付かず、ブラウザやGoogle Search Consoleなどのツールが正しく解釈できない場合があるための組み込み対応です(設定不要、常時有効)。
|
||||
> なお、PHPで動的に生成する場合はこの設定は適用されません(PHP側で `header('Content-Type: application/xml; charset=utf-8');` を指定してください)。
|
||||
@@ -521,21 +526,20 @@ $driver->quit();
|
||||
|
||||
```yaml
|
||||
# values.yaml
|
||||
|
||||
# アップロード上限は snippet ではなく uploadMaxSize で設定する
|
||||
# (nginx の client_max_body_size を snippet に書くと、チャートの自動出力と重複して起動失敗する)
|
||||
uploadMaxSize: "100m"
|
||||
|
||||
nginx:
|
||||
customConfig:
|
||||
enabled: true
|
||||
# server { } ブロックの末尾にそのまま挿入される。
|
||||
# PHPの location ~ \.php$ はチャート本体が定義済みのため、ここでは再定義しない
|
||||
# (タイムアウト等は server レベルで指定すれば PHP の location にも継承される)
|
||||
snippet: |
|
||||
client_max_body_size 100M;
|
||||
|
||||
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 {
|
||||
auth_basic "Administrator Area";
|
||||
@@ -546,6 +550,8 @@ persistence:
|
||||
enabled: true
|
||||
```
|
||||
|
||||
> `snippet` で指定する際の注意点は、[Nginx設定](#nginx設定)の「`nginx.customConfig.snippet` の注意点」を参照してください。
|
||||
|
||||
### 例7: ベアメタル環境でのリアルIP取得
|
||||
|
||||
ベアメタルKubernetesやLoadBalancer経由でのアクセスで、PHPからクライアントの実IPアドレスを取得する設定です。
|
||||
@@ -706,11 +712,13 @@ ingress:
|
||||
hosts:
|
||||
- api.production.com
|
||||
|
||||
# アップロード上限は snippet ではなく uploadMaxSize で設定する
|
||||
uploadMaxSize: "50m"
|
||||
|
||||
nginx:
|
||||
customConfig:
|
||||
enabled: true
|
||||
snippet: |
|
||||
client_max_body_size 50M;
|
||||
fastcgi_read_timeout 300;
|
||||
|
||||
# Opcache設定
|
||||
|
||||
@@ -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 }}
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
|
||||
+13
-3
@@ -4,17 +4,17 @@ image:
|
||||
nginx:
|
||||
registry: docker.io
|
||||
repository: nginx
|
||||
tag: "1.31.6-alpine-perl"
|
||||
tag: "1.31.8-alpine-perl"
|
||||
pullPolicy: IfNotPresent
|
||||
php:
|
||||
registry: docker.io
|
||||
repository: php
|
||||
tag: "8.5.11-fpm-alpine3.24"
|
||||
tag: "8.5.12-fpm-alpine3.24"
|
||||
pullPolicy: IfNotPresent
|
||||
selenium:
|
||||
registry: docker.io
|
||||
repository: selenium/standalone-chromium
|
||||
tag: "152.0-chromedriver-152.0"
|
||||
tag: "155.0-chromedriver-155.0"
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
service:
|
||||
@@ -64,6 +64,16 @@ persistence:
|
||||
size: 1Gi
|
||||
|
||||
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:
|
||||
enabled: false
|
||||
snippet: |-
|
||||
|
||||
Reference in New Issue
Block a user