Files
rogaining_srv/DEPLOYMENT_MIGRATION_GUIDE.md

188 lines
5.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Deploy先でのMigration手順ガイド
## 推奨手順(安全なアプローチ)
### パターンA: 新規クリーンDeployment推奨
```bash
# 1. 旧DBのバックアップ作成
pg_dump rogaining_db > backup_$(date +%Y%m%d_%H%M%S).sql
# 2. Git pullで最新コード取得
git pull origin main
# 3. migration_simple_reset.pyで一括リセット推奨
docker compose exec app python migration_simple_reset.py --full
# 4. 必要に応じてデータ復元スクリプト実行
# (既存データがある場合)
```
### パターンB: 段階的Migration修正
```bash
# 1. 旧DBのバックアップ作成
pg_dump rogaining_db > backup_$(date +%Y%m%d_%H%M%S).sql
# 2. Git pullで最新コード取得
git pull origin main
# 3. 問題のあるmigrationファイルを一時的に削除
rm rog/migrations/0011_auto_20250827_1459.py
# 4. 正常なmigrationまで適用
docker compose exec app python manage.py migrate
# 5. migration_simple_reset.pyでクリーンアップ
docker compose exec app python migration_simple_reset.py --reset-only
docker compose exec app python migration_simple_reset.py --apply-only
```
## ⚠️ 元の提案手順の問題点
```bash
旧DBをリストア ✅ OK
Git pull で最新コード設置 ✅ OK
migrate してDB更新 ❌ 問題: 依存関係エラーで失敗する
migration_simple_reset.py実行 ✅ OK
```
**問題**: ステップ3で`NodeNotFoundError`が発生し、migrationが失敗します。
## 具体的なDeployment手順本番推奨
### 事前準備
```bash
# 本番環境への接続確認
docker compose ps
# 現在のmigration状態確認
docker compose exec app python manage.py showmigrations
```
### 実行手順
#### Step 1: バックアップ作成
```bash
# データベースバックアップ
docker compose exec postgres-db pg_dump -U admin rogaining_db > deploy_backup_$(date +%Y%m%d_%H%M%S).sql
# 現在のmigrationファイルバックアップ
cp -r rog/migrations rog/migrations_backup_deploy_$(date +%Y%m%d_%H%M%S)
```
#### Step 2: コード更新
```bash
# 最新コード取得
git pull origin main
# migration_simple_reset.pyが存在することを確認
ls -la migration_simple_reset.py
```
#### Step 3: Migration リセット実行
```bash
# 全体的なリセット(推奨)
docker compose exec app python migration_simple_reset.py --full
```
または段階的実行:
```bash
# バックアップのみ
docker compose exec app python migration_simple_reset.py --backup-only
# リセットのみ
docker compose exec app python migration_simple_reset.py --reset-only
# 適用のみ
docker compose exec app python migration_simple_reset.py --apply-only
```
#### Step 4: 結果確認
```bash
# Migration状態確認
docker compose exec app python manage.py showmigrations
# アプリケーション動作確認
docker compose exec app python manage.py check
```
#### Step 5: サービス再起動
```bash
# アプリケーション再起動
docker compose restart app
# 全サービス再起動(必要に応じて)
docker compose restart
```
## トラブルシューティング
### Migration失敗時の対処
```bash
# 1. migration_simple_reset.pyでクリーンアップ
docker compose exec app python migration_simple_reset.py --reset-only
# 2. 手動でmigration状態確認
docker compose exec app python manage.py showmigrations
# 3. 必要に応じて個別migration適用
docker compose exec app python manage.py migrate rog 0001 --fake
```
### バックアップからの復元
```bash
# データベース復元
docker compose exec postgres-db psql -U admin -d rogaining_db < backup_file.sql
# migrationファイル復元
rm -rf rog/migrations
cp -r rog/migrations_backup_deploy_YYYYMMDD_HHMMSS rog/migrations
```
## 重要な注意事項
### ✅ 実行前チェックリスト
- [ ] データベースバックアップ作成済み
- [ ] migrationファイルバックアップ作成済み
- [ ] migration_simple_reset.pyが最新版
- [ ] Docker環境が正常動作中
- [ ] 十分なディスク容量確保
### ⚠️ 避けるべき操作
- `python manage.py migrate`を最初に実行(依存関係エラーの原因)
- バックアップなしでの作業
- 本番環境での実験的操作
### 🔄 ロールバック計画
```bash
# 問題発生時の緊急復元
docker compose down
docker compose exec postgres-db psql -U admin -d rogaining_db < backup_file.sql
cp -r rog/migrations_backup_deploy_YYYYMMDD_HHMMSS rog/migrations
docker compose up -d
```
## 結論
**推奨される最終手順:**
```bash
# 1. バックアップ作成
pg_dump rogaining_db > backup_$(date +%Y%m%d_%H%M%S).sql
# 2. 最新コード取得
git pull origin main
# 3. Migration一括リセット問題を回避
docker compose exec app python migration_simple_reset.py --full
# 4. 動作確認
docker compose exec app python manage.py check
docker compose restart app
```
この手順により、Migration依存関係の問題を回避し、安全にデプロイが可能になります。