#!/bin/bash set -e BACKUP_DIR="./backups" TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") FILENAME="backup_${TIMESTAMP}.sql" echo "💾 1. Создаём бэкап базы..." mkdir -p "$BACKUP_DIR" # гарантируем, что db поднята docker compose up -d db # ждём доступности сервиса (не обязательно, но полезно) # docker compose healthcheck можно добавить в compose, но тут просто пауза: sleep 3 # Пытаемся mariadb-dump, если нет — mysqldump. Берём MYSQL_* из окружения контейнера. if ! docker compose exec -T db sh -lc 'command -v mariadb-dump >/dev/null 2>&1 || command -v mysqldump >/dev/null 2>&1'; then echo "⚠️ В контейнере нет mariadb-dump/mysqldump. Пропускаю бэкап." else docker compose exec -T db sh -lc ' DUMP_BIN=$(command -v mariadb-dump || command -v mysqldump); "$DUMP_BIN" \ -h127.0.0.1 \ -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" \ --single-transaction --quick --lock-tables=false ' > "${BACKUP_DIR}/${FILENAME}" || echo "⚠️ Бэкап не получился (возможно, ещё пустая БД). Продолжаю..." fi echo "📥 2. Получаем обновления из git..." git pull echo "🔨 3. Собираем контейнеры..." docker compose build echo "⬆ 4. Применяем миграции..." docker compose up -d django docker compose exec -T django python manage.py makemigrations && docker compose exec -T django python manage.py migrate echo "🔄 5. Перезапускаем сервисы..." docker compose up -d echo "🎉 Деплой завершён успешно!"