188 lines
5.0 KiB
Markdown
188 lines
5.0 KiB
Markdown
|
|
# 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
|
|||
|
|
1)旧DBをリストア ✅ OK
|
|||
|
|
2)Git pull で最新コード設置 ✅ OK
|
|||
|
|
3)migrate してDB更新 ❌ 問題: 依存関係エラーで失敗する
|
|||
|
|
4)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依存関係の問題を回避し、安全にデプロイが可能になります。
|