標準の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>
7.4 KiB
CLAUDE.md — phpfpm Helm Chart
リポジトリ概要
Raspberry Pi などのベアメタルで稼働することを想定した、Kubernetes 上で動作する Nginx + PHP-FPM の Helm チャート。
- Gitea リポジトリ:
ssh://git@192.168.9.65/helmchart/phpfpm - Helm リポジトリ:
https://git.cafepieters.com/api/packages/helmchart/helm
実行環境について
PHP の実行環境(インタープリタ)はこのリポジトリには含まれていない。
チャートは docker.io/php:<tag>-fpm-alpine の公式イメージを Kubernetes 上で起動するものであり、PHP コードそのものは PVC(/var/www/html)に別途配置する必要がある。
Git コミット情報
| 項目 | 値 |
|---|---|
| 名前 | Claude |
| メール | claude@cafepieters.com |
| SSH キー | P:\Claude\.ssh\id_claude |
チャート改修履歴
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 セクションを新設し、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') で呼び出す。
なお、この改修中に自動更新ワークフローがPHP 8.5.8へのフルリリース(v8.5.8)を実行したため、本機能はそのタグの上に手動リリース 8.5.8-a として適用した。
対象ファイル: values.yaml, templates/deployment.yaml, README.md, Chart.yaml, CHANGELOG-8.5.8-a.md
/etc/msmtprc の権限を0600→0644に修正(2026-07-19, v8.5.6-g)
v8.5.6-f のフォローアップ。/etc/smtp-secrets/password の権限修正だけでは不十分で、起動スクリプトが cp 後に chmod 600 していた /etc/msmtprc 自体もrootのみ読み取り可のままだった(msmtp: account default not found, exit:78)。chmod 644 に変更。msmtprcには平文パスワードは含まれない(passwordeval経由で別ファイル参照)ため実害なし。
対象ファイル: templates/deployment.yaml, Chart.yaml, CHANGELOG-8.5.6-g.md
SMTPパスワードSecretの権限を0600→0644に修正(2026-07-19, v8.5.6-f)
smtp-secrets ボリュームの mode: 0600 が原因で、rootではなく www-data(PHP-FPMワーカー)として動く msmtp が /etc/smtp-secrets/password を読めず、SMTP認証に失敗する不具合を修正。0644 に変更(Pod内にしか存在しないファイルのため許容範囲)。
対象ファイル: templates/deployment.yaml, Chart.yaml, CHANGELOG-8.5.6-f.md
PVCルートを /var/www にマウント + /composer を使い捨て化(2026-07-19, v8.5.6-e)
php-fpm コンテナのマウントを「html サブパスのみ」から「PVCルート → /var/www」に変更。html/ は公開フォルダ、それ以外(/var/www/<任意>)は非公開ファイルの格納先として使える。nginx は html サブパスのみマウントするため非公開分は公開されない。あわせて /composer のPVC永続化マウントを廃止し、Pod再起動ごとにクリーン再構築される使い捨て領域とした(マルウェア混入対策、ユーザー要望)。永続化したい場合は workingDir に /var/www/composer 等を指定。
対象ファイル: templates/deployment.yaml, values.yaml, README.md, Chart.yaml, CHANGELOG-8.5.6-e.md
useComposerJson の YAML parse error 修正(2026-07-19, v8.5.6-d)
useComposerJson: true 指定時、heredoc 内の {{ .Values.composer.composerJson }} がインデント無しで展開され、複数行JSONの2行目以降がブロックスカラーを破壊して YAML parse error になる潜在バグを修正。trim | nindent 14 で展開するよう変更(composerLock も同様)。
対象ファイル: templates/deployment.yaml, Chart.yaml, CHANGELOG-8.5.6-d.md
Composerデフォルト導入先を /composer に変更(2026-07-19, v8.5.6-c)
/var/www はWebルート /var/www/html の親のため、ネストマウントでPVCの composer サブパス内に空の html/ が生成されていた。デフォルトをWebルートと親子関係にない /composer に変更してネストを解消。autoloadは require_once '/composer/vendor/autoload.php';(values.yaml のコメントにも明記)。
対象ファイル: values.yaml, templates/deployment.yaml, README.md, Chart.yaml, CHANGELOG-8.5.6-c.md
旧composer.jsonの自動移行 + mbstring依存の自動追加(2026-07-19, v8.5.6-b)
v8.5.6-a のフォローアップ。起動時に workingDir に composer.json が無く旧Webルート /var/www/html にある場合、composer.json / composer.lock / vendor/ を自動移行する。また additionalPhpExtensions に mbstring 指定時、ビルドに必要な oniguruma-dev を自動追加(GDと同じ仕組み)。
なお、PVC上の composer/html/(空ディレクトリ)はネストマウントのマウントポイント作成による正常な副産物で、実害なし。
対象ファイル: templates/deployment.yaml, README.md, Chart.yaml, CHANGELOG-8.5.6-b.md
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 コンテナの環境変数として渡せるようにした。
phpEnv:
API_KEY: "your-api-key"
STRIPE_SECRET: "sk_live_..."
REDIS_URL: "redis://localhost:6379"
PHP 側では $_ENV['API_KEY'] または getenv('API_KEY') で取得できる。
対象ファイル: values.yaml, templates/deployment.yaml, README.md