Files
phpfpm/values.yaml
T

368 lines
16 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
replicaCount: 1
image:
nginx:
registry: docker.io
repository: nginx
tag: "1.31.8-alpine-perl"
pullPolicy: IfNotPresent
php:
registry: docker.io
repository: php
tag: "8.5.12-fpm-alpine3.24"
pullPolicy: IfNotPresent
selenium:
registry: docker.io
repository: selenium/standalone-chromium
tag: "155.0-chromedriver-155.0"
pullPolicy: IfNotPresent
service:
type: ClusterIP
# type: LoadBalancer
port: 80
# アップロード可能な最大サイズ
# 以下3箇所に同じ値を反映する(どれか一つでも小さいと、そこで上限に達して失敗するため):
# - nginx(Podコンテナ内)の client_max_body_size
# - PHPの upload_max_filesize / post_max_size
# - ingress.enabled: true の場合、ingress-nginxの nginx.ingress.kubernetes.io/proxy-body-size
# 単位はnginx/PHP共通でk/m/g(大文字小文字問わず)が使用可能(例: "100m", "1g")
uploadMaxSize: "100m"
ingress:
enabled: false
className: ""
# nginx.ingress.kubernetes.io/proxy-body-size は uploadMaxSize の値が自動的に付与されるため
# 明示的に指定する必要はない(Ingress側の上限もnginx/PHPと揃う)
# 別の値にしたい場合や別コントローラーを使う場合は、ここに明示指定すれば上書きされる
annotations:
{
acme.cert-manager.io/http01-ingress-class: "nginx",
cert-manager.io/cluster-issuer: "letsencrypt-issuer",
nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
}
hosts:
- host: &appDomain example.tld
paths:
- path: /
pathType: Prefix
# secretNameは省略可能。省略した場合、そのエントリの最初のhostの"."を"-"に
# 置換し"-tls"を付与した値が自動生成される(例: example.tld → example-tld-tls)。
# appDomainの変更だけでhostとsecretNameが揃うため、通常は明示指定しなくてよい。
# 別の証明書Secret名にしたい場合のみ secretName: "your-secret-name" を追加する。
tls:
[
{
hosts: [*appDomain]
}
]
persistence:
enabled: true
accessMode: ReadWriteOnce
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: |-
# リアルIP転送設定(ベアメタル/LoadBalancer環境向け)
forwardRealIP:
# リアルIP取得機能を有効化
enabled: true
# リアルIPを取得するヘッダー名
# LoadBalancer/Ingressによって異なる
# - X-Real-IP: シンプルな1段プロキシ
# - X-Forwarded-For: 多段プロキシ対応(推奨)
header: "X-Forwarded-For"
# 再帰的にリアルIPを検索(多段プロキシ環境で推奨)
recursive: true
# 信頼するプロキシのネットワーク範囲
# ベアメタルクラスターでは、PodネットワークとServiceネットワークを指定
trustedProxies:
- "10.0.0.0/8" # プライベートネットワーク
- "172.16.0.0/12" # プライベートネットワーク
- "192.168.0.0/16" # プライベートネットワーク
# 追加で信頼するプロキシ(環境に応じてカスタマイズ)
additionalTrustedProxies: []
# - "203.0.113.0/24" # 外部LoadBalancerなど
# Composer設定
composer:
# Composerを使用するかどうか
enabled: false
# Composerの導入先ディレクトリ(composer.json / vendor の配置先)
# デフォルトの /composer はWebルート外かつPVCにマウントされない「使い捨て」領域:
# - vendor/ や composer.json がWeb経由で公開されない
# - Pod再起動のたびにクリーンな環境へ再構築されるため、
# 不正アクセスでマルウェアを書き込まれても再起動で消える
#
# 【重要】PHPコードからの autoload.php の読み込み方:
# require_once '/composer/vendor/autoload.php';
#
# PVC上に永続化したい場合は /var/www 配下(例: "/var/www/composer")を指定
# 旧来の動作(Webルート直下に導入)へ戻す場合は "/var/www/html" を指定
workingDir: "/composer"
# Composerでインストールするパッケージ
# packages配列が空の場合、composer.jsonを使用
packages: []
# - "monolog/monolog:^2.0"
# - "guzzlehttp/guzzle:^7.0"
# composer.jsonファイルを使用する場合
useComposerJson: false
# composer.jsonの内容(useComposerJson: trueの場合に使用)
composerJson: |
{
"require": {
"monolog/monolog": "^2.0"
}
}
# composer.lockファイルの内容(オプション、再現性を保証)
composerLock: ""
# Composerのインストールオプション
installOptions: "--no-dev --optimize-autoloader"
# 追加のAPKパッケージ(Composer依存関係のビルドに必要な場合)
additionalApkPackages: []
# - "libpng-dev"
# - "libjpeg-turbo-dev"
# 追加のPHP拡張(docker-php-ext-installで導入)
additionalPhpExtensions: []
# - "gd"
# - "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設定
# v8.5.10-b以降、Selenium(有効時)はnginx/php-fpmと同一Podのサイドカーではなく、
# 独立したDeployment/Service(<release>-phpfpm-selenium)として起動する。
# 理由: サイドカー方式だとSelenium単体の不調(起動失敗・OOM等)でPod全体がReady=false
# になり、Seleniumを使わない静的ページ配信まで巻き込まれてサービス全体が止まっていた。
# php-fpmコンテナのSELENIUM_URL環境変数は、enabled:true時に自動でこのServiceを指す
# (phpEnvで独自に設定しても、こちらの値が優先される)。
selenium:
enabled: false
# Selenium Deployment自体のレプリカ数
replicaCount: 1
# Chromiumはメモリを多く使う。ノードのメモリ枯渇によるOOM Killを防ぐため、
# 実運用では必ずrequests/limitsを設定することを推奨する(下記resourcesセクション参照)。
resources: {}
# trueにすると、SeleniumコンテナにもPVCのhtmlサブパスを/var/www/htmlとしてマウントする
# (ブラウザのダウンロード先を公開ディレクトリに置きたい場合など)。別Podからの同時マウント
# になるため、有効にする場合はpersistence.accessModeをReadWriteMany
# (NFSバックエンドのStorageClassなら対応可能)にする必要がある。
# 通常のスクレイピング用途(スクリーンショット等をstorage/等の非公開領域に保存する場合)
# では不要なため、既定はfalse。
mountHtml: false
# 定期実行タスク(Kubernetes CronJob)
# php-fpmと同じPHPイメージ(image.php)を使い、指定したスケジュールで
# 1回限りのコマンドを実行するCronJobを作成する。複数ジョブを配列で定義できる。
# jobsが空の場合、CronJobは1つも作成されない。
#
# 【マウント/環境変数】/var/wwwにPVCルートをマウントし、externalDatabase/phpEnv/
# extraEnv/extraEnvFrom/SELENIUM_URLはphp-fpmコンテナと同じ内容が渡される。
# html/ 配下の公開コード、または /var/www/<非公開フォルダ> 配下の
# 非公開スクリプト・出力先のどちらも利用できる。
#
# 【Composer/Pythonとの併用について】
# composer.workingDir / python.venvDir が既定の /composer, /venv
# (PVC非マウントの使い捨て領域)のままの場合、CronJobのPodには存在しない
# (php-fpmの長時間稼働Pod内だけに存在する)ため利用できない。
# CronJobからComposer/Pythonの成果物を使いたい場合は、
# composer.workingDir: "/var/www/composer" のように/var/www配下へ変更し、
# PVC上に永続化すること(本体Deployment側で一度セットアップされていれば、
# CronJob側は改めてインストールし直す必要はない)。
#
# 【SMTPとの併用】smtp.enabled: true の場合、CronJobのPodでもmsmtpの導入・
# msmtprc配置・sendmail_path設定を自動で行うため、PHPのmail()関数がそのまま使える。
cron:
jobs: []
# - name: daily-report # 必須。CronJob名の一部に使用(英数字とハイフンのみ、小文字推奨)
# schedule: "0 18 * * *" # 必須。標準cron形式(timeZone省略時はUTC基準)
# command: "php /var/www/html/cron/daily-report.php"
# timeZone: "Asia/Tokyo" # 省略時はUTC(Kubernetes 1.27+で安定サポート)
# concurrencyPolicy: "Forbid" # Allow / Forbid / Replace(既定: Forbid。前回実行の長期化による多重起動を防止)
# restartPolicy: "OnFailure" # OnFailure / Never(既定: OnFailure)
# successfulJobsHistoryLimit: 3
# failedJobsHistoryLimit: 1
# activeDeadlineSeconds: 3600 # 実行タイムアウト(秒)。省略可
# suspend: false # trueにするとコード変更なしでこのジョブだけ一時停止できる
# resources: {} # 未指定時は resources.phpfpm を流用
externalDatabase:
enabled: false
host: mariadb-hostname
port: 3306
database: dbname
username: user
password: pass
# SMTP設定(PHPのメール送信用)
smtp:
enabled: false
# SMTPサーバー設定
host: "smtp.example.com"
# プロトコルとポート設定
# - auto: 自動判定(推奨)
# - starttls: STARTTLS(ポート587)
# - tls: SSL/TLS(ポート465)
protocol: "auto"
# ポート番号(通常は自動判定されるため手動設定は不要)
# protocol: auto の場合は以下の値を参考に
# - 25: SMTP (非暗号化)
# - 587: SMTP + STARTTLS (暗号化)
# - 465: SMTP + SSL/TLS (暗号化)
port: 587
# 認証設定
auth:
enabled: true
username: "smtp-user@example.com"
# password はSecretで管理する
# values-secret.yaml などで以下のように指定:
# smtp:
# auth:
# password: "your-smtp-password"
password: ""
# 【外部Secret連携】チャートで msmtprc を生成しつつ、パスワードファイルだけ
# 既存 Secret から取りたい場合に指定する。
# 例: secret-manager チャートが配布する cred-<プロバイダ> の SMTP_PASSWORD キー
# existingSecret: "cred-gmail"
# existingSecretKey: "SMTP_PASSWORD"
# 指定時は smtp.auth.password と自作の -smtp Secret は使われない。
existingSecret: ""
existingSecretKey: "password"
# 送信元アドレス(固定値)
# PHPプログラムで mail() 関数の $additional_parameters で上書き可能
# 例: mail($to, $subject, $body, $headers, "-f user@example.com")
from: "noreply@example.com"
# TLS/SSL設定
tls:
# 証明書検証を有効化(本番環境では true を推奨)
verify: true
# 自己署名証明書を許可する場合(テスト環境のみ)
allowSelfSigned: false
# 【外部Secret連携】完成済みの msmtprc がまるごと入っている既存 Secret を使う。
# 指定するとチャート内の msmtprc 生成(configmap-smtp)は行わず、
# host / port / protocol / auth.* / tls.* は無視される(from だけ PHP の
# sendmail_from 用に使用)。
# secret-manager チャートが cred-<プロバイダ> に生成する msmtprc キーを
# そのまま利用できる:
# existingMsmtprcSecret: "cred-gmail"
# existingMsmtprcSecretKey: "msmtprc"
existingMsmtprcSecret: ""
existingMsmtprcSecretKey: "msmtprc"
# nginx / php-fpm コンテナの CPU/メモリ requests・limits。
# v8.5.10-b より前は本キーがテンプレート側で参照されておらず(死んだ設定)、
# 何を指定してもコンテナには一切反映されない不具合があった(既存デプロイは
# 全コンテナが requests/limits なしの QoS Class: BestEffort になっていた)。
# BestEffortはノードのメモリ逼迫時にOOM Killの対象になりやすいため、
# 本番運用では requests/limits の設定を推奨する。例:
# resources:
# nginx:
# requests: { cpu: "50m", memory: "64Mi" }
# limits: { memory: "128Mi" }
# phpfpm:
# requests: { cpu: "100m", memory: "256Mi" }
# limits: { memory: "512Mi" }
# (selenium用は selenium.resources を参照。Chromiumは256Mi等では確実に不足する)
resources:
nginx: {}
phpfpm: {}
# PHP-FPM コンテナに渡す任意の環境変数
# DB接続情報(externalDatabase)と同様に、values.yamlで設定した値がPHPに環境変数として渡される
# PHPからは $_ENV['KEY'] または getenv('KEY') で取得可能
phpEnv: {}
# API_KEY: "your-api-key"
# STRIPE_SECRET: "sk_live_xxxxxxxxxxxxxxxx"
# REDIS_URL: "redis://localhost:6379"
# SOME_SERVICE_URL: "https://api.example.com"
# 既存の Secret / ConfigMap をまるごと環境変数として PHP-FPM コンテナへ注入する(envFrom)。
# 別リポジトリの secret-manager チャートが各ネームスペースへ配布する
# cred-<名前> Secret(API キー等)をそのまま読み込む用途を想定。
# 変更は secret-manager 側を更新するだけで全プロジェクトに反映できる。
extraEnvFrom: []
# - secretRef:
# name: cred-gemini
# - secretRef:
# name: cred-openai
# - configMapRef:
# name: some-shared-config
# 個別の環境変数を追加する(生の env エントリ配列。value / valueFrom(secretKeyRef 等) 使用可)。
extraEnv: []
# - name: OPENAI_API_KEY
# valueFrom:
# secretKeyRef:
# name: cred-openai
# key: OPENAI_API_KEY