Files
wordpress/README.md
2025-11-21 01:43:49 +00:00

9.2 KiB
Raw Blame History

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

初期化の動作

新規インストール時

  1. WordPressファイルをコピー
  2. wp-config.phpを生成セキュアな Salt キー自動生成)
  3. データベース接続を確認
  4. テーブルが存在しない場合:
    • WP-CLIを使用してWordPressをインストール
    • 管理者アカウントを作成
    • パスワードが未指定の場合は16文字のランダム生成
  5. ads.txtが有効な場合は配置

アップデート/再起動時

  1. 既存のwp-config.phpを検出
  2. データベーステーブルの存在を確認
  3. テーブルが存在する場合:
    • 初期化処理をスキップ
    • コアバージョンの更新確認
    • 必要に応じてデータベーススキーマをアップデート
  4. 既存データを保持したまま起動

管理者パスワードの確認方法

# 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

セキュリティ考慮事項

本番環境では以下を必ず実施してください:

  1. データベースパスワードの保護: Kubernetes Secretを使用
  2. HTTPS の有効化: cert-manager等でTLS証明書を設定
  3. リソース制限の設定: 適切なresources設定
  4. 定期的なバックアップ: PVCのスナップショット等
  5. セキュリティアップデート: イメージの定期的な更新

ライセンス

MIT License