Helm Chart Release / release-chart (push) Successful in 5s
smtp-secrets ボリュームの mode: 0600 により、Secretファイルの所有者は rootだが、msmtp は PHP mail() 経由で PHP-FPMワーカー(www-data等の 非rootユーザー)として実行されるため読み取れず、 'cat: can't open ... Permission denied' で認証失敗していた。 mode を 0644(全ユーザー読み取り可)に変更。ファイルはPod内にのみ 存在し外部からアクセス不可のため許容できるトレードオフ。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
79 lines
5.2 KiB
Markdown
79 lines
5.2 KiB
Markdown
# 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` |
|
||
|
||
## チャート改修履歴
|
||
|
||
### 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 コンテナの環境変数として渡せるようにした。
|
||
|
||
```yaml
|
||
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`
|