44 lines
1.7 KiB
Bash
Executable File
44 lines
1.7 KiB
Bash
Executable File
#!/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 "🎉 Деплой завершён успешно!"
|