Migration Plan: db push → Prisma Migrate
План перехода с push-based на migration-based workflow.
Статус
✅ Завершено — goLoot перешёл на migration-based workflow.
Baseline миграция: 20260216083239_my_change
1. Зачем
Текущие проблемы (были)
- ❌ Нет истории изменений схемы
- ❌ Schema drift между окружениями (dev ≠ prod)
- ❌ Невозможен безопасный rollback
- ❌ Team conflicts при изменении схемы
- ❌ Production риски (db push может потерять данные)
После миграции
- ✅ История в git
- ✅ Безопасный rollback
- ✅ Team sync автоматически
- ✅ Production-ready workflow
2. Безопасный план
Этап 1: Baseline миграция (Dev) ✅
Цель: Создать начальную миграцию из текущей схемы.
cd backend
# 1. Создать baseline миграцию
npx prisma migrate dev --name baseline_schema
# Prisma обнаружит drift и предложит reset
# Подтверждаем — БД пересоздаётся с миграцией
Результат:
- Создана директория
prisma/migrations/ - Файл миграции:
20260216083239_my_change/migration.sql(2719 строк) - БД в sync с миграцией
- Seed выполнен автоматически
Этап 2: Staging ✅
# На staging сервере
cd backend
# Применить baseline
npx prisma migrate deploy
Этап 3: Production ✅
Критически важно
Production требует максимальной осторожности!
- Сделай backup БД перед миграцией
- Проверь что baseline миграция точно соответствует текущей схеме
- Тестируй на staging сначала
# 1. Backup production БД (обязательно!)
# См. deployment/09-backup-migration.md
# 2. Применить baseline
cd backend
bash scripts/db/prisma-sync.sh deploy
# 3. Проверить что всё работает
npx prisma migrate status
# → Database schema is up to date!
3. Workflow после миграции
Development
# Изменил schema.prisma → создать миграцию
npx prisma migrate dev --name add_new_field
# Что происходит:
# 1. Prisma генерирует SQL миграцию
# 2. Применяет к dev БД
# 3. Генерирует Prisma Client
# 4. Запускает seed (опционально)
Staging/Production
# Просто применить миграции из git
bash scripts/db/prisma-sync.sh deploy
# Prisma применит только новые миграции
4. Сравнение команд
| Действие | Push-based (старое) | Migration-based (новое) |
|---|---|---|
| Dev: изменил схему | db push | migrate dev --name X |
| Production: deploy | db push (⚠️) | migrate deploy (✅) |
| Сброс dev БД | db push --force-reset | migrate reset |
| Откат изменений | ❌ Вручную | git revert + migrate deploy |
| Team sync | ❌ Конфликты | ✅ Автоматически через git |
5. Обновить скрипты
prisma-sync.sh ✅
Обновлено: Добавлена команда deploy
# Старое (⚠️):
# bash scripts/db/prisma-sync.sh push
# Новое (✅):
bash scripts/db/prisma-sync.sh deploy
reset-db.sh ✅
Обновлено: Автоматическая детекция workflow
Скрипт сам определяет:
- Если есть
prisma/migrations/→migrate reset - Если нет →
db push --force-reset
Dokploy auto-deploy ✅
После push в main → автоматически применяются миграции из prisma/migrations/.
Настройка: В Dokploy post-deploy hook:
cd backend && npx prisma migrate deploy
6. Rollback миграции
# 1. Откатить последний commit с миграцией
git revert <commit-hash>
# 2. Применить откат
bash scripts/db/prisma-sync.sh deploy
# Prisma автоматически создаст "обратную" миграцию
7. Checklist
- Создана baseline миграция в dev
- Baseline миграция закоммичена в git
- Baseline применена к staging через
migrate deploy - Backup production БД сделан
- Baseline применена к production через
migrate deploy - Обновлён
prisma-sync.sh(добавленdeploy) - Обновлён
reset-db.sh(автодетекция) - Обновлена CI/CD (если есть автоматические деплои)
- Команда проинформирована о новом workflow
8. Troubleshooting
"Migration is already applied"
# Пометить миграцию как применённую вручную
npx prisma migrate resolve --applied "MIGRATION_NAME"
"Database schema is not in sync"
# Просмотреть drift
npx prisma migrate diff \
--from-schema-datamodel prisma/schema.prisma \
--to-schema-datasource prisma/schema.prisma
# Создать миграцию для исправления
npx prisma migrate dev --name fix_drift
Production migration failed
# 1. НЕ ПАНИКОВАТЬ
# 2. Восстановить backup
# См. deployment/09-backup-migration.md
# 3. Исследовать проблему
npx prisma migrate status
# 4. Исправить миграцию
# 5. Попробовать снова
9. Related
- Database Workflow — comprehensive guide по работе с БД
- Prisma Migrate Docs
- Migration Troubleshooting