README.md を更新
This commit is contained in:
117
README.md
117
README.md
@@ -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-content(PVC)をシンボリックリンクで接続
|
||||||
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-content(PVC - 永続化)
|
||||||
|
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-content(PVC)とデータベースのバックアップ
|
||||||
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
|
||||||
Reference in New Issue
Block a user