README.md を更新

This commit is contained in:
2025-11-21 07:17:08 +00:00
parent 2474593c4a
commit 04d66b3eb2

117
README.md
View File

@@ -9,8 +9,36 @@
**自動パスワード生成**: 管理者パスワードを指定しない場合は自動生成 **自動パスワード生成**: 管理者パスワードを指定しない場合は自動生成
**アップデート対応**: 既存のDBがある場合は初期化をスキップ **アップデート対応**: 既存のDBがある場合は初期化をスキップ
**ads.txt対応**: values.yamlから ads.txt を配置可能 **ads.txt対応**: values.yamlから ads.txt を配置可能
**セキュアな構成**: WordPress本体は使い捨て、wp-contentのみ永続化
**本番環境対応**: セキュアなSecret管理、HA構成 **本番環境対応**: セキュアなSecret管理、HA構成
## アーキテクチャとセキュリティ
### ストレージ構成
```
/var/www/html/ ← emptyDir使い捨て、Pod再起動で消える
├── index.php ← WordPress本体ファイル
├── wp-admin/ ← 管理画面(使い捨て)
├── wp-includes/ ← WordPressコア使い捨て
├── wp-config.php ← Secretから毎回生成
├── ads.txt ← values.yamlから生成
└── wp-content/ ← シンボリックリンク → PVC
/var/www/html-persistent/ ← PVC永続化
└── wp-content/ ← テーマ、プラグイン、アップロード
├── themes/
├── plugins/
└── uploads/
```
### セキュリティ上の利点
1. **WordPress本体の改ざん防止**: 毎回クリーンな状態から起動
2. **脆弱性への迅速な対応**: イメージ更新のみでコアファイル更新
3. **設定の一元管理**: wp-config.phpはvalues.yamlとSecretから生成
4. **ユーザーデータの保護**: wp-contentのみ永続化で管理が容易
## アーキテクチャ ## アーキテクチャ
- **Nginx**: リバースプロキシおよび静的ファイル配信 - **Nginx**: リバースプロキシおよび静的ファイル配信
@@ -113,10 +141,12 @@ helm install my-wordpress ./wordpress-nginx -f custom-values.yaml
| パラメータ | 説明 | デフォルト値 | | パラメータ | 説明 | デフォルト値 |
|-----------|------|-------------| |-----------|------|-------------|
| `persistence.enabled` | 永続化を有効化 | `true` | | `persistence.enabled` | 永続化を有効化wp-contentのみ | `true` |
| `persistence.storageClass` | StorageClass | `""` | | `persistence.storageClass` | StorageClass | `""` |
| `persistence.accessMode` | アクセスモード | `ReadWriteOnce` | | `persistence.accessMode` | アクセスモード | `ReadWriteOnce` |
| `persistence.size` | ストレージサイズ | `10Gi` | | `persistence.size` | ストレージサイズwp-content用 | `10Gi` |
**注意**: WordPress本体ファイルwp-admin、wp-includesなどはemptyDirに配置され、Pod再起動時に破棄されます。ユーザーデータwp-contentのみがPVCに永続化されます。
## 使用例 ## 使用例
@@ -195,23 +225,51 @@ helm install my-wordpress ./wordpress-nginx \
## 初期化の動作 ## 初期化の動作
### 新規インストール時 ### 新規インストール時
1. WordPressファイルをコピー 1. WordPress本体ファイルをemptyDirにコピー使い捨て領域
2. wp-config.phpを生成セキュアな Salt キー自動生成 2. wp-contentディレクトリをPVCに作成永続化領域
3. データベース接続を確認 3. シンボリックリンクで wp-content を接続
4. テーブルが存在しない場合: 4. wp-config.phpをSecretから生成
5. データベース接続を確認
6. テーブルが存在しない場合:
- WP-CLIを使用してWordPressをインストール - WP-CLIを使用してWordPressをインストール
- 管理者アカウントを作成 - 管理者アカウントを作成
- パスワードが未指定の場合は16文字のランダム生成 - パスワードが未指定の場合は16文字のランダム生成
5. ads.txtが有効な場合は配置 7. ads.txtが有効な場合は配置(使い捨て領域)
### アップデート/再起動時 ### アップデート/再起動時
1. 既存のwp-config.phpを検出 1. WordPress本体ファイルを新しくコピー常にクリーン
2. データベーステーブルの存在を確認 2. 既存のwp-contentPVCをシンボリックリンクで接続
3. テーブルが存在する場合: 3. wp-config.phpを再生成
4. データベーステーブルの存在を確認
5. テーブルが存在する場合:
- 初期化処理をスキップ - 初期化処理をスキップ
- コアバージョンの更新確認 - コアバージョンの更新確認
- 必要に応じてデータベーススキーマをアップデート - 必要に応じてデータベーススキーマをアップデート
4. 既存データを保持したまま起動 6. 既存データwp-contentを保持したまま起動
### セキュリティ更新の適用方法
```bash
# イメージタグを更新して再デプロイするだけ
helm upgrade my-wordpress ./wordpress-nginx \
--set image.wordpress.tag=6.8.4-php8.4-fpm-alpine
# Pod再起動で自動的にクリーンなWordPress本体に置き換わる
kubectl rollout restart deployment/my-wordpress-wordpress-nginx
```
### ファイル構成の確認
```bash
# WordPress本体emptyDir - 使い捨て)
kubectl exec -it <pod-name> -c wordpress -- ls -la /var/www/html/
# wp-contentPVC - 永続化)
kubectl exec -it <pod-name> -c wordpress -- ls -la /var/www/html-persistent/wp-content/
# シンボリックリンクの確認
kubectl exec -it <pod-name> -c wordpress -- ls -la /var/www/html/ | grep wp-content
```
### 管理者パスワードの確認方法 ### 管理者パスワードの確認方法
@@ -271,12 +329,27 @@ kubectl exec -it <pod-name> -c wordpress -- wp db tables
### 再初期化が必要な場合 ### 再初期化が必要な場合
```bash ```bash
# PVCを削除して再作成注意データが消えます # wp-contentのみを保持して再インストール
# (データベースをクリアすれば再初期化される)
kubectl exec -it <pod-name> -c wordpress -- wp db reset --yes
# 完全なクリーンインストールPVCごと削除
kubectl delete pvc <pvc-name> kubectl delete pvc <pvc-name>
helm uninstall my-wordpress helm uninstall my-wordpress
helm install my-wordpress ./wordpress-nginx helm install my-wordpress ./wordpress-nginx
``` ```
### ストレージの確認
```bash
# PVCの確認wp-contentのみ
kubectl get pvc
kubectl exec -it <pod-name> -c wordpress -- du -sh /var/www/html-persistent/wp-content/
# emptyDirの使用量確認
kubectl exec -it <pod-name> -c wordpress -- du -sh /var/www/html/
```
### ads.txt の確認 ### ads.txt の確認
```bash ```bash
@@ -294,5 +367,21 @@ curl http://your-site.com/ads.txt
1. **データベースパスワードの保護**: Kubernetes Secretを使用 1. **データベースパスワードの保護**: Kubernetes Secretを使用
2. **HTTPS の有効化**: cert-manager等でTLS証明書を設定 2. **HTTPS の有効化**: cert-manager等でTLS証明書を設定
3. **リソース制限の設定**: 適切なresources設定 3. **リソース制限の設定**: 適切なresources設定
4. **定期的なバックアップ**: PVCのスナップショット等 4. **定期的なバックアップ**: wp-contentPVCとデータベースのバックアップ
5. **セキュリティアップデート**: イメージの定期的な更新 5. **セキュリティアップデート**:
- WordPress本体: イメージタグ更新 → Pod再起動で自動適用
- プラグイン/テーマ: WordPress管理画面から更新
6. **wp-config.phpのセキュリティ**: Secretに保存され、Pod再起動時に再生成
7. **読み取り専用ファイルシステム**: WordPress本体は毎回クリーン、改ざん不可
### この構成のセキュリティメリット
- ✅ WordPress本体への不正な変更を防止Pod再起動で復元
- ✅ wp-config.phpへの直接アクセス不可Secretから生成
- ✅ 脆弱性対応が容易(イメージ更新のみ)
- ✅ ユーザーデータのみを管理wp-contentのみバックアップ
- ✅ 設定の一元管理values.yaml + Secret
## ライセンス
MIT License