11986be197524b3037161374a9d9326ac2f5cf12
WordPress with Nginx Helm Chart
このHelmチャートは、Nginx + WordPress (PHP-FPM) 構成をKubernetes上にデプロイします。 bitnami/wordpressのように、デプロイ後すぐに使用可能な状態で起動します。
主な機能
✅ 自動インストール: 初回デプロイ時にWordPressを自動セットアップ ✅ 自動パスワード生成: 管理者パスワードを指定しない場合は自動生成 ✅ アップデート対応: 既存のDBがある場合は初期化をスキップ ✅ ads.txt対応: values.yamlから ads.txt を配置可能 ✅ 本番環境対応: セキュアなSecret管理、HA構成
アーキテクチャ
- Nginx: リバースプロキシおよび静的ファイル配信
- WordPress (PHP-FPM): WordPressアプリケーション実行
- 共有ボリューム: Nginx と WordPress 間でファイルを共有
前提条件
- Kubernetes 1.19+
- Helm 3.0+
- PersistentVolume プロビジョナー(永続化を有効にする場合)
- MySQL/MariaDB データベース(別途デプロイが必要)
インストール方法
1. チャートの準備
# チャートディレクトリの作成
mkdir -p wordpress-nginx/templates
# 必要なファイルをコピー
# Chart.yaml, values.yaml, templates/*
2. MySQLのデプロイ(必要な場合)
# Helm を使用して MySQL をデプロイ
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install mysql bitnami/mysql \
--set auth.rootPassword=rootpassword \
--set auth.database=wordpress \
--set auth.username=wordpress \
--set auth.password=changeme
3. WordPressのデプロイ
# デフォルト値でインストール
helm install my-wordpress ./wordpress-nginx
# カスタム値でインストール
helm install my-wordpress ./wordpress-nginx \
--set wordpress.dbPassword=your-secure-password \
--set service.type=LoadBalancer
# values.yaml を使用
helm install my-wordpress ./wordpress-nginx -f custom-values.yaml
設定パラメータ
基本設定
| パラメータ | 説明 | デフォルト値 |
|---|---|---|
replicaCount |
レプリカ数 | 2 |
image.nginx.registry |
Nginxイメージレジストリ | docker.io |
image.nginx.repository |
Nginxイメージリポジトリ | nginx |
image.nginx.tag |
Nginxイメージタグ | 1.29.3-alpine-perl |
image.wordpress.registry |
WordPressイメージレジストリ | docker.io |
image.wordpress.repository |
WordPressイメージリポジトリ | wordpress |
image.wordpress.tag |
WordPressイメージタグ | 6.8.3-php8.4-fpm-alpine |
WordPress設定
| パラメータ | 説明 | デフォルト値 |
|---|---|---|
wordpress.dbHost |
データベースホスト | mysql-service |
wordpress.dbName |
データベース名 | wordpress |
wordpress.dbUser |
データベースユーザー | wordpress |
wordpress.dbPassword |
データベースパスワード | changeme |
wordpress.tablePrefix |
テーブルプレフィックス | wp_ |
wordpress.siteTitle |
サイトタイトル | My WordPress Site |
wordpress.siteUrl |
サイトURL | http://localhost |
wordpress.adminUser |
管理者ユーザー名 | admin |
wordpress.adminPassword |
管理者パスワード(空=自動生成) | "" |
wordpress.adminEmail |
管理者メール | admin@example.com |
wordpress.adsTxt.enabled |
ads.txtを有効化 | false |
wordpress.adsTxt.content |
ads.txtの内容 | "" |
Service設定
| パラメータ | 説明 | デフォルト値 |
|---|---|---|
service.type |
Serviceタイプ | LoadBalancer |
service.port |
Serviceポート | 80 |
Ingress設定
| パラメータ | 説明 | デフォルト値 |
|---|---|---|
ingress.enabled |
Ingressを有効化 | false |
ingress.className |
IngressClass名 | nginx |
ingress.hosts |
ホスト設定 | wordpress.example.com |
永続化設定
| パラメータ | 説明 | デフォルト値 |
|---|---|---|
persistence.enabled |
永続化を有効化 | true |
persistence.storageClass |
StorageClass | "" |
persistence.accessMode |
アクセスモード | ReadWriteOnce |
persistence.size |
ストレージサイズ | 10Gi |
使用例
基本的なインストール(パスワード自動生成)
helm install my-wordpress ./wordpress-nginx \
--set wordpress.dbPassword=SecurePassword123 \
--set wordpress.siteUrl=http://my-wordpress.example.com \
--set wordpress.siteTitle="My Blog" \
--set wordpress.adminEmail=admin@example.com
# パスワードの取得
kubectl get secret my-wordpress-wordpress-nginx-secret \
-o jsonpath='{.data.admin-password}' | base64 -d
echo
パスワードを指定してインストール
helm install my-wordpress ./wordpress-nginx \
--set wordpress.dbPassword=SecurePassword123 \
--set wordpress.adminPassword=AdminPass456 \
--set wordpress.siteUrl=https://blog.example.com \
--set wordpress.adminUser=myadmin
ads.txt を配置
helm install my-wordpress ./wordpress-nginx \
--set wordpress.dbPassword=SecurePassword123 \
--set wordpress.adsTxt.enabled=true \
--set-string wordpress.adsTxt.content="google.com, pub-1234567890, DIRECT, f08c47fec0942fa0"
または values.yaml に記述:
wordpress:
adsTxt:
enabled: true
content: |
google.com, pub-1234567890, DIRECT, f08c47fec0942fa0
adserver.com, 9876, RESELLER
LoadBalancerでの公開
helm install my-wordpress ./wordpress-nginx \
--set service.type=LoadBalancer \
--set wordpress.dbPassword=SecurePassword123
Ingressでの公開
helm install my-wordpress ./wordpress-nginx \
--set ingress.enabled=true \
--set ingress.hosts[0].host=wordpress.example.com \
--set ingress.hosts[0].paths[0].path=/ \
--set ingress.hosts[0].paths[0].pathType=Prefix \
--set service.type=ClusterIP
リソース制限のカスタマイズ
helm install my-wordpress ./wordpress-nginx \
--set resources.nginx.limits.memory=1Gi \
--set resources.wordpress.limits.memory=2Gi
初期化の動作
新規インストール時
- WordPressファイルをコピー
- wp-config.phpを生成(セキュアな Salt キー自動生成)
- データベース接続を確認
- テーブルが存在しない場合:
- WP-CLIを使用してWordPressをインストール
- 管理者アカウントを作成
- パスワードが未指定の場合は16文字のランダム生成
- ads.txtが有効な場合は配置
アップデート/再起動時
- 既存のwp-config.phpを検出
- データベーステーブルの存在を確認
- テーブルが存在する場合:
- 初期化処理をスキップ
- コアバージョンの更新確認
- 必要に応じてデータベーススキーマをアップデート
- 既存データを保持したまま起動
管理者パスワードの確認方法
# Secretから取得
kubectl get secret <release-name>-wordpress-nginx-secret \
-o jsonpath='{.data.admin-password}' | base64 -d
# または initContainer のログから確認(初回のみ)
kubectl logs <pod-name> -c wordpress-init
# 設定を変更してアップグレード
helm upgrade my-wordpress ./wordpress-nginx \
--set wordpress.dbPassword=NewPassword
# values.yamlを使用してアップグレード
helm upgrade my-wordpress ./wordpress-nginx -f custom-values.yaml
アンインストール
helm uninstall my-wordpress
トラブルシューティング
初期化ログの確認
# initContainer のログを確認
kubectl logs <pod-name> -c wordpress-init
# メインコンテナのログ
kubectl logs <pod-name> -c nginx
kubectl logs <pod-name> -c wordpress
管理者パスワードの再確認
# Secretから取得
kubectl get secret my-wordpress-wordpress-nginx-secret \
-o jsonpath='{.data.admin-password}' | base64 -d && echo
データベース接続の確認
# WordPress コンテナで WP-CLI を実行
kubectl exec -it <pod-name> -c wordpress -- wp db check
kubectl exec -it <pod-name> -c wordpress -- wp db tables
再初期化が必要な場合
# PVCを削除して再作成(注意:データが消えます)
kubectl delete pvc <pvc-name>
helm uninstall my-wordpress
helm install my-wordpress ./wordpress-nginx
ads.txt の確認
# Pod内でファイルを確認
kubectl exec -it <pod-name> -c nginx -- cat /var/www/html/ads.txt
# ブラウザまたはcurlでアクセス
curl http://your-site.com/ads.txt
セキュリティ考慮事項
本番環境では以下を必ず実施してください:
- データベースパスワードの保護: Kubernetes Secretを使用
- HTTPS の有効化: cert-manager等でTLS証明書を設定
- リソース制限の設定: 適切なresources設定
- 定期的なバックアップ: PVCのスナップショット等
- セキュリティアップデート: イメージの定期的な更新
Description
Languages
Smarty
100%