- service.externalTrafficPolicy: Local を追加し、kube-proxyのSNATによる 実IPアドレス消失を解消(ベアメタル/MetalLB構成向け) - wp-config.php内の危険な二重REMOTE_ADDR上書き処理を削除 (Nginx real_ipモジュールの信頼境界を迂回できるIP詐称の余地があった) - smtp.* 設定を追加し、msmtp経由の外部SMTPリレー送信に対応 (helmchart/phpfpm と同一の実装パターンを踏襲) - README.md / CLAUDE.md を更新
This commit is contained in:
@@ -126,12 +126,73 @@ helm install my-wordpress ./wordpress-nginx -f custom-values.yaml
|
||||
| `wordpress.adsTxt.enabled` | ads.txtを有効化 | `false` |
|
||||
| `wordpress.adsTxt.content` | ads.txtの内容 | `""` |
|
||||
|
||||
### SMTP設定(メール送信)
|
||||
|
||||
WordPressコンテナ内にはメール送信を行うMTA(sendmail相当のプログラム)が存在しないため、デフォルトのままではパスワードリセットメールやコメント通知などの `wp_mail()` によるメール送信ができません。外部SMTPリレー(Gmail、SendGrid、自前のメールサーバー等)経由で送信する場合は以下を設定してください。
|
||||
|
||||
| パラメータ | 説明 | デフォルト値 |
|
||||
|-----------|------|-------------|
|
||||
| `smtp.enabled` | SMTP機能有効化 | `false` |
|
||||
| `smtp.host` | SMTPサーバーホスト名 | `smtp.example.com` |
|
||||
| `smtp.protocol` | プロトコル(auto/starttls/tls) | `auto` |
|
||||
| `smtp.port` | ポート番号 | `587` |
|
||||
| `smtp.auth.enabled` | 認証有効化 | `true` |
|
||||
| `smtp.auth.username` | SMTPユーザー名 | `smtp-user@example.com` |
|
||||
| `smtp.auth.password` | SMTPパスワード | `""`(Secretで指定) |
|
||||
| `smtp.from` | 送信元メールアドレス(固定) | `noreply@example.com` |
|
||||
| `smtp.tls.verify` | TLS証明書検証 | `true` |
|
||||
| `smtp.tls.allowSelfSigned` | 自己署名証明書を許可 | `false` |
|
||||
|
||||
有効化すると、WordPressコンテナ起動時に `msmtp` を導入し、PHPの `sendmail_path` を `msmtp` 経由に設定します。`wp_mail()` はコード変更なしにそのままSMTP経由で送信されるようになります。
|
||||
|
||||
**設定例**:
|
||||
|
||||
```yaml
|
||||
smtp:
|
||||
enabled: true
|
||||
host: "smtp.gmail.com"
|
||||
protocol: "starttls"
|
||||
port: 587
|
||||
auth:
|
||||
enabled: true
|
||||
username: "your-email@gmail.com"
|
||||
password: "" # --set smtp.auth.password='your-app-password' で指定
|
||||
from: "noreply@your-domain.com"
|
||||
```
|
||||
|
||||
```bash
|
||||
helm upgrade --install my-wordpress . \
|
||||
-f values.yaml \
|
||||
--set smtp.auth.password='your-app-password'
|
||||
```
|
||||
|
||||
**よくある設定**:
|
||||
|
||||
| プロバイダ | ホスト | ポート | プロトコル |
|
||||
|-----------|-------|--------|----------|
|
||||
| Gmail | smtp.gmail.com | 587 | starttls |
|
||||
| Office365 | smtp.office365.com | 587 | starttls |
|
||||
| Sendgrid | smtp.sendgrid.net | 587 | starttls |
|
||||
| Amazon SES | email-smtp.region.amazonaws.com | 587 | starttls |
|
||||
|
||||
**注意**: `smtp.enabled: true` の場合、msmtpのインストール(`apk add`)のためWordPressコンテナはrootとして起動し、セットアップ完了後に `php-fpm` へexecします。PHP-FPMのワーカープロセス自体はイメージ標準の設定により引き続き `www-data`(非root)で動作するため、実際のPHPコード実行権限は変わりません。`smtp.enabled: false`(デフォルト)の場合は従来どおり非rootユーザー(uid82)でコンテナが起動します。
|
||||
|
||||
### Service設定
|
||||
|
||||
| パラメータ | 説明 | デフォルト値 |
|
||||
|-----------|------|-------------|
|
||||
| `service.type` | Serviceタイプ | `LoadBalancer` |
|
||||
| `service.port` | Serviceポート | `80` |
|
||||
| `service.externalTrafficPolicy` | 外部トラフィックポリシー(`LoadBalancer`/`NodePort`のみ有効) | `Local` |
|
||||
|
||||
**実クライアントIPの取得について(ベアメタル/MetalLB構成)**:
|
||||
|
||||
このチャートのデフォルト構成(ルーター → MetalLB等のLoadBalancer Service → Pod)では、`service.externalTrafficPolicy` が `Cluster`(Kubernetesのデフォルト)だと、kube-proxyが送信元IPをノードの内部IPにSNATしてしまい、Nginx/WordPressが実際の訪問者IPを取得できません。本チャートではデフォルトで `externalTrafficPolicy: Local` を設定し、SNATを回避することで `$remote_addr` に実IPがそのまま渡るようにしています。
|
||||
|
||||
- **注意**: `Local` にすると、リクエストを受けたノードにPodが存在しない場合はそのノードでの接続が失敗します。MetalLB L2モードなど、Podが存在するノードにのみトラフィックが向く構成と組み合わせて使用してください(複数ノードにPodを分散させることを推奨)。
|
||||
- `service.type: ClusterIP` の場合、`externalTrafficPolicy` は無視されます(Kubernetes仕様上ClusterIPには適用不可のため)。
|
||||
|
||||
`nginx.forwardRealIP` は、Ingress ControllerやCDN(Cloudflareなど)、外部LBのように **X-Forwarded-For ヘッダーを付与するリバースプロキシを前段に置く場合にのみ**有効にしてください。本チャートのデフォルト構成(Service直下にPodがぶら下がる構成)ではX-Forwarded-Forを付与する層が存在しないため、`forwardRealIP` を有効にしても効果はなく、`service.externalTrafficPolicy: Local` のみで実IPが取得できます。
|
||||
|
||||
### Ingress設定
|
||||
|
||||
|
||||
Reference in New Issue
Block a user