#!/bin/bash # restore.sh — восстановление из бэкапа # Использование: docker compose run --rm backup /opt/restore.sh [дата] set -euo pipefail BACKUP_DATE="${1:-latest}" BACKUP_DIR="/backups/$BACKUP_DATE" if [ ! -d "$BACKUP_DIR" ]; then echo "Ошибка: бэкап $BACKUP_DIR не найден" echo "Доступные бэкапы:" ls -d /backups/2* 2>/dev/null || echo " (нет бэкапов)" exit 1 fi echo "=== Restore from $BACKUP_DIR ===" # Восстановить БД if [ -d "$BACKUP_DIR/db" ]; then for dump in "$BACKUP_DIR/db"/*.dump; do [ -f "$dump" ] || continue db=$(basename "$dump" | sed 's/-.*//') echo "→ Restoring database: $db" PGPASSWORD="$DB_PASSWORD" pg_restore -h "$DB_HOST" -p "${DB_PORT:-5432}" \ -U "$DB_USER" -d "$db" --clean --if-exists "$dump" || \ echo " ⚠ Restore of $db had warnings (non-fatal)" done fi # Распаковать файлы if [ -d "$BACKUP_DIR/files" ]; then for archive in "$BACKUP_DIR/files"/*.tar.gz; do [ -f "$archive" ] || continue name=$(basename "$archive" | sed 's/-.*//') target="/data/$name" echo "→ Extracting $name to $target" mkdir -p "$target" tar -xzf "$archive" -C "$target" || true done fi echo "=== Restore completed ===" echo "При необходимости перезапусти сервисы: docker compose restart"