feat: Python導入オプションを追加 (v8.5.8-a)
Helm Chart Release / release-chart (push) Successful in 5s

PHPからPythonスクリプトを呼び出す用途向けに、values.yamlの設定
だけでPython仮想環境(venv)を導入できるようにした。既存のComposer
サポートと同じ設計方針(デフォルト導入先はWebルート外・PVC非マウ
ントの使い捨て領域、packages/useRequirementsTxtの二択、
additionalApkPackagesでネイティブ拡張ビルド対応)を踏襲。

- values.yaml: python セクション新設
- templates/deployment.yaml: python3/py3-pipのAPKインストール、
  venv構築、pip install処理を追加(requirements.txtの展開は
  trim | nindent 14 でYAML破壊を回避、v8.5.6-dと同じ手法)
- README.md: パラメータ表・使用例(例12)・注意事項を追加

PHPからは exec('/venv/bin/python3 script.py') で呼び出す。

自動更新ワークフローによりPHP 8.5.8へのフルリリース(v8.5.8)が
先行して行われたため、本機能はそのタグの上に手動リリース 8.5.8-a
として適用する。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-25 21:23:20 +09:00
co-authored by Claude Fable 5
parent 6e600bb308
commit 3d384ab72e
6 changed files with 208 additions and 5 deletions
+58
View File
@@ -0,0 +1,58 @@
# Changelog - Version 8.5.8-a
## 新機能
### Python導入オプションの追加
PHPからPythonスクリプトを呼び出す用途(データ処理・機械学習ライブラリの利用など)向けに、`values.yaml` の設定だけでPython仮想環境(venv)を導入できるようにしました。既存のComposerサポートと同じ設計方針を踏襲しています。
#### 主な変更点
1. **values.yaml**
- `python` セクションを新設
- `enabled`: Python有効化
- `venvDir`: venv導入先(デフォルト `/venv` — Webルート外かつPVCにマウントされない使い捨て領域)
- `packages` / `useRequirementsTxt` / `requirementsTxt`: pipパッケージ指定方法(Composerの `packages` / `useComposerJson` と同じ構造)
- `installOptions`: pip installオプション(デフォルト `--no-cache-dir`
- `additionalApkPackages`: ネイティブ拡張ビルド用の追加APKパッケージ
2. **templates/deployment.yaml**
- `python.enabled` 時に `python3` / `py3-pip` をAPKでインストール
- `python3 -m venv` で仮想環境を構築
- `useRequirementsTxt` / `packages` に応じてpipインストールを実行
- `requirementsTxt` の複数行内容は `trim | nindent 14` で展開(v8.5.6-d のComposer修正と同じ手法でYAML破壊を回避)
3. **README.md**
- パラメータ表・使用例(例12)を追加
- Alpine(musl)向け事前ビルドwheelが無いパッケージ(numpy等)はビルドに時間がかかる旨の注意書きを追加
## 設計方針(Composerとの一貫性)
- デフォルトの `/venv` はPVCにマウントされず、**Pod再起動のたびにクリーンな環境へ再構築される使い捨て領域**です。不正アクセスで書き込まれても再起動で消えます。
- 永続化したい場合は `python.venvDir``/var/www` 配下のパスを指定してください(例: `/var/www/venv`)。
## 使用例
```yaml
python:
enabled: true
useRequirementsTxt: true
requirementsTxt: |
requests>=2.31.0
pandas>=2.0.0
```
PHPからの呼び出し:
```php
exec('/venv/bin/python3 /var/www/scripts/process.py 2>&1', $output, $exitCode);
```
## 互換性
- デフォルトは `enabled: false` のため、既存環境への影響はありません。
---
**リリース日**: 2026-07-19
**担当**: プロサーバーエンジニア(Claude)
+8
View File
@@ -22,6 +22,14 @@ Raspberry Pi などのベアメタルで稼働することを想定した、Kube
## チャート改修履歴 ## チャート改修履歴
### 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 ### /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経由で別ファイル参照)ため実害なし。 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経由で別ファイル参照)ため実害なし。
+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.8 version: 8.5.8-a
appVersion: "8.5.8" appVersion: "8.5.8"
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
+55
View File
@@ -138,6 +138,30 @@ kubectl logs -l app.kubernetes.io/name=phpfpm -c nginx
| `composer.additionalPhpExtensions` | 追加PHP拡張 | `[]` | | `composer.additionalPhpExtensions` | 追加PHP拡張 | `[]` |
| `composer.additionalApkPackages` | 追加APKパッケージ | `[]` | | `composer.additionalApkPackages` | 追加APKパッケージ | `[]` |
### Python設定(オプション)
PHPからPythonスクリプトを呼び出す用途(データ処理・機械学習ライブラリの利用など)向けに、Python仮想環境(venv)を導入できます。
| パラメータ | 説明 | デフォルト |
|-----------|------|-----------|
| `python.enabled` | Python有効化 | `false` |
| `python.venvDir` | venv導入先ディレクトリ(`{venvDir}/bin/python3` | `"/venv"` |
| `python.packages` | pipでインストールするパッケージ | `[]` |
| `python.useRequirementsTxt` | requirements.txt使用 | `false` |
| `python.requirementsTxt` | requirements.txtの内容 | `"requests>=2.31.0"` |
| `python.installOptions` | pip installオプション | `"--no-cache-dir"` |
| `python.additionalApkPackages` | 追加APKパッケージ(ネイティブ拡張のビルド用) | `[]` |
> **📌 Python導入先について**
> Composerと同様、デフォルトの `/venv` は**Webルート外かつPVCにマウントされない使い捨て領域**です。Pod再起動のたびにクリーンな仮想環境へ再構築されます。PVCに永続化したい場合は `python.venvDir` に `/var/www` 配下(例: `/var/www/venv`)を指定してください。
>
> PHPコードからは `exec()` 等で呼び出します:
> ```php
> exec('/venv/bin/python3 /var/www/scripts/process.py 2>&1', $output, $exitCode);
> ```
>
> **⚠️ 注意**: `numpy` や `pillow` など、Alpine(musl)向けの事前ビルド済みwheelが無いパッケージは、Pod起動のたびにソースからビルドされ、Raspberry Pi等のARM環境では起動に数分〜十数分かかる場合があります。ビルドに必要なパッケージ(`gcc`, `musl-dev`, `python3-dev` 等)は `python.additionalApkPackages` に指定してください。永続化(`venvDir`をPVC配下に)すれば再起動のたびの再ビルドを回避できますが、使い捨てによるクリーン環境維持のメリットとのトレードオフになります。
### Selenium設定 ### Selenium設定
| パラメータ | 説明 | デフォルト | | パラメータ | 説明 | デフォルト |
@@ -696,6 +720,37 @@ $headers = [
SmtpConfig::mail($to, $subject, $body, $headers, 'custom@your-domain.com'); SmtpConfig::mail($to, $subject, $body, $headers, 'custom@your-domain.com');
``` ```
### 例12: Python連携(requirements.txtを使用)
PHPからPythonスクリプトを呼び出してデータ処理を行う設定です。
```yaml
# values.yaml
python:
enabled: true
useRequirementsTxt: true
requirementsTxt: |
requests>=2.31.0
pandas>=2.0.0
installOptions: "--no-cache-dir"
```
**PHPでの使用例**:
```php
<?php
$script = escapeshellarg('/var/www/scripts/process.py');
exec("/venv/bin/python3 {$script} 2>&1", $output, $exitCode);
if ($exitCode === 0) {
echo implode("\n", $output);
} else {
error_log('Python script failed: ' . implode("\n", $output));
}
```
`/var/www/scripts/` のようなPVC上の非公開フォルダにPythonスクリプトを配置すれば、Web経由で公開されずに済みます(詳細はPVCマウント構成の項を参照)。
**デプロイ手順**: **デプロイ手順**:
```bash ```bash
+46 -2
View File
@@ -36,7 +36,7 @@ spec:
- | - |
echo "Starting PHP-FPM setup process..." echo "Starting PHP-FPM setup process..."
{{- if or .Values.composer.enabled .Values.selenium.enabled .Values.externalDatabase.enabled }} {{- if or .Values.composer.enabled .Values.selenium.enabled .Values.externalDatabase.enabled .Values.python.enabled }}
# ======================================== # ========================================
# APKパッケージのインストール # APKパッケージのインストール
# ======================================== # ========================================
@@ -57,13 +57,25 @@ spec:
APK_PACKAGES="$APK_PACKAGES msmtp ca-certificates" APK_PACKAGES="$APK_PACKAGES msmtp ca-certificates"
{{- end }} {{- end }}
{{- if .Values.python.enabled }}
# Python本体に必要なパッケージ
APK_PACKAGES="$APK_PACKAGES python3 py3-pip"
{{- end }}
{{- if .Values.composer.additionalApkPackages }} {{- if .Values.composer.additionalApkPackages }}
# ユーザー指定の追加APKパッケージ # ユーザー指定の追加APKパッケージComposer用)
{{- range .Values.composer.additionalApkPackages }} {{- range .Values.composer.additionalApkPackages }}
APK_PACKAGES="$APK_PACKAGES {{ . }}" APK_PACKAGES="$APK_PACKAGES {{ . }}"
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- if .Values.python.additionalApkPackages }}
# ユーザー指定の追加APKパッケージ(Python用)
{{- range .Values.python.additionalApkPackages }}
APK_PACKAGES="$APK_PACKAGES {{ . }}"
{{- end }}
{{- end }}
# PHP拡張(gd / mbstring)の依存パッケージを自動的に追加 # PHP拡張(gd / mbstring)の依存パッケージを自動的に追加
{{- if .Values.composer.additionalPhpExtensions }} {{- if .Values.composer.additionalPhpExtensions }}
for ext in {{ join " " .Values.composer.additionalPhpExtensions }}; do for ext in {{ join " " .Values.composer.additionalPhpExtensions }}; do
@@ -172,6 +184,38 @@ spec:
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- if .Values.python.enabled }}
{{- $pythonDir := .Values.python.venvDir | default "/venv" }}
# ========================================
# Python仮想環境のセットアップ
# ========================================
echo "Setting up Python virtual environment..."
# Python導入先(デフォルトはWebルート外の /venv、Composerと同様の使い捨て領域)
# PHPからの呼び出し方: exec('{{ $pythonDir }}/bin/python3 /path/to/script.py 2>&1', $output, $exitCode);
python3 -m venv {{ $pythonDir }}
{{- if .Values.python.useRequirementsTxt }}
echo "Creating requirements.txt from values..."
cat > /tmp/requirements.txt << 'REQUIREMENTS_TXT_EOF'
{{- .Values.python.requirementsTxt | trim | nindent 14 }}
REQUIREMENTS_TXT_EOF
echo "Installing Python packages from requirements.txt..."
{{ $pythonDir }}/bin/pip install {{ .Values.python.installOptions }} -r /tmp/requirements.txt
rm -f /tmp/requirements.txt
{{- else if .Values.python.packages }}
echo "Installing Python packages..."
{{- range .Values.python.packages }}
{{ $pythonDir }}/bin/pip install {{ $.Values.python.installOptions }} "{{ . }}"
{{- end }}
{{- else }}
echo "No Python package configuration found, virtual environment created without additional packages"
{{- end }}
{{- end }}
{{- if .Values.smtp.enabled }} {{- if .Values.smtp.enabled }}
# ======================================== # ========================================
# SMTP設定(msmtp # SMTP設定(msmtp
+38
View File
@@ -131,6 +131,44 @@ composer:
# - "gd" # - "gd"
# - "zip" # - "zip"
# Python設定(オプション、PHPからPythonスクリプトを呼び出す用途)
python:
# Pythonを使用するかどうか
enabled: false
# Python仮想環境(venv)の導入先ディレクトリ
# デフォルトの /venv はWebルート外かつPVCにマウントされない「使い捨て」領域:
# - Pod再起動のたびにクリーンな環境へ再構築される(Composerと同じ設計)
#
# 【重要】PHPからのPython呼び出し方(execを利用):
# exec('/venv/bin/python3 /path/to/script.py 2>&1', $output, $exitCode);
#
# PVC上に永続化したい場合は /var/www 配下(例: "/var/www/venv")を指定
venvDir: "/venv"
# pipでインストールするパッケージ
# packages配列が空の場合、requirements.txtを使用
packages: []
# - "requests>=2.31.0"
# - "pillow"
# requirements.txtを使用する場合
useRequirementsTxt: false
# requirements.txtの内容(useRequirementsTxt: trueの場合に使用)
requirementsTxt: |
requests>=2.31.0
# pip installのオプション
installOptions: "--no-cache-dir"
# 追加のAPKパッケージ(ネイティブ拡張のビルドに必要な場合、例: numpy等)
additionalApkPackages: []
# - "gcc"
# - "musl-dev"
# - "python3-dev"
# - "jpeg-dev"
# Selenium設定(レガシー互換性維持) # Selenium設定(レガシー互換性維持)
selenium: selenium:
enabled: false enabled: false