В реальном проекте миграции — это неотъемлемая часть работы с базой данных. Но если проект уже развернут на сервере через Docker и CI/CD (например, GitLab), важно действовать аккуратно, чтобы не сломать всё. В этой статье расскажу, как безопасно применять миграции в таких условиях.
Шаг 1: Подготовка миграций локально
Создаём миграции: Локально, на вашей машине, выполните команду:
python manage.py makemigrations
Убедитесь, что миграции корректно сгенерировались и покрывают только те изменения, которые вы внесли.
Тестируем миграции: Примените их локально:
python manage.py migrate
Проверьте, что таблицы обновились как надо, и данные в порядке.
Заливаем в репозиторий: Добавьте файлы миграций в Git:
git add app_name/migrations/
git commit -m "Add migration for app_name"
git push
Шаг 2: Настройка автоматического применения миграций
В GitLab CI/CD автоматизация миграций — хорошая практика. Добавьте команду применения миграций в ваш .gitlab-ci.yml:
stages:
- deploy
deploy:
stage: deploy
script:
- docker-compose -f docker-compose.yml run web python manage.py migrate
only:
- main
Здесь:
-
docker-compose.yml — ваш Docker Compose файл.
-
web — название контейнера с приложением Django.
Эта команда выполнит миграции автоматически при деплое в main-ветку.
Шаг 3: Ручное применение миграций на сервере
Если автоматизация не настроена или вы хотите применить миграции вручную, выполните следующие шаги:
Подключитесь к серверу: Зайдите на сервер, где развёрнут проект:
ssh user@your-server-ip
Зайдите в контейнер Django: Найдите имя контейнера с Django:
docker ps
Затем подключитесь к нему:
docker exec -it your_django_container_name bash
Выполните миграции: Внутри контейнера выполните:
python manage.py migrate
Проверка: Убедитесь, что миграции применились корректно:
python manage.py showmigrations
Шаг 4: Рекомендации по безопасности
Резервные копии: Перед миграциями всегда делайте бэкап базы данных, особенно на продакшене. Например, для PostgreSQL:
pg_dump -U username -h localhost dbname > backup.sql
Миграции без даунтайма: Если изменения большие, используйте стратегии миграции без даунтайма (например, добавление новых колонок без удаления старых).
Мониторинг: После миграций убедитесь, что проект работает корректно, а логи не содержат ошибок.
Заключение
Применение миграций на действующем проекте в Docker и GitLab CI/CD — это вопрос дисциплины и автоматизации. Настройка правильного pipeline'а в GitLab избавит вас от необходимости делать всё вручную. А если приходится применять миграции вручную, помните о бэкапах и тестировании.
Держите миграции под контролем, и ваш проект будет развиваться без неожиданных сюрпризов! 🚀
Написать комментарий