From 1ef121eefaf96b3f8c51c453bd571be1db9879be Mon Sep 17 00:00:00 2001 From: pieter Date: Fri, 21 Nov 2025 01:43:49 +0000 Subject: [PATCH] =?UTF-8?q?README.md=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 302 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 302 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..0f83aa4 --- /dev/null +++ b/README.md @@ -0,0 +1,302 @@ +# 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. チャートの準備 + +```bash +# チャートディレクトリの作成 +mkdir -p wordpress-nginx/templates + +# 必要なファイルをコピー +# Chart.yaml, values.yaml, templates/* +``` + +### 2. MySQLのデプロイ(必要な場合) + +```bash +# 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のデプロイ + +```bash +# デフォルト値でインストール +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` | + +## 使用例 + +### 基本的なインストール(パスワード自動生成) + +```bash +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 +``` + +### パスワードを指定してインストール + +```bash +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 を配置 + +```bash +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 に記述: + +```yaml +wordpress: + adsTxt: + enabled: true + content: | + google.com, pub-1234567890, DIRECT, f08c47fec0942fa0 + adserver.com, 9876, RESELLER +``` + +### LoadBalancerでの公開 + +```bash +helm install my-wordpress ./wordpress-nginx \ + --set service.type=LoadBalancer \ + --set wordpress.dbPassword=SecurePassword123 +``` + +### Ingressでの公開 + +```bash +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 +``` + +### リソース制限のカスタマイズ + +```bash +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. 既存データを保持したまま起動 + +### 管理者パスワードの確認方法 + +```bash +# Secretから取得 +kubectl get secret -wordpress-nginx-secret \ + -o jsonpath='{.data.admin-password}' | base64 -d + +# または initContainer のログから確認(初回のみ) +kubectl logs -c wordpress-init +``` + +```bash +# 設定を変更してアップグレード +helm upgrade my-wordpress ./wordpress-nginx \ + --set wordpress.dbPassword=NewPassword + +# values.yamlを使用してアップグレード +helm upgrade my-wordpress ./wordpress-nginx -f custom-values.yaml +``` + +## アンインストール + +```bash +helm uninstall my-wordpress +``` + +## トラブルシューティング + +### 初期化ログの確認 + +```bash +# initContainer のログを確認 +kubectl logs -c wordpress-init + +# メインコンテナのログ +kubectl logs -c nginx +kubectl logs -c wordpress +``` + +### 管理者パスワードの再確認 + +```bash +# Secretから取得 +kubectl get secret my-wordpress-wordpress-nginx-secret \ + -o jsonpath='{.data.admin-password}' | base64 -d && echo +``` + +### データベース接続の確認 + +```bash +# WordPress コンテナで WP-CLI を実行 +kubectl exec -it -c wordpress -- wp db check +kubectl exec -it -c wordpress -- wp db tables +``` + +### 再初期化が必要な場合 + +```bash +# PVCを削除して再作成(注意:データが消えます) +kubectl delete pvc +helm uninstall my-wordpress +helm install my-wordpress ./wordpress-nginx +``` + +### ads.txt の確認 + +```bash +# Pod内でファイルを確認 +kubectl exec -it -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 \ No newline at end of file