#!/usr/bin/env bash # Восстановление базы из резервной копии (docs/deployment.md#бэкапы). # ./restore.sh — список копий # ./restore.sh daily/pipu-20261020-033000.dump # Сервисы, пишущие в базу, останавливаются на время восстановления; прежняя база сохраняется рядом. set -euo pipefail cd "$(dirname "$0")" [ -f .env ] || { echo "нет .env — сначала sudo ./install.sh" >&2; exit 1; } DATA="$(sed -n 's/^PIPU_DATA=//p' .env)" DATA="${DATA:-/srv/pipu}" if [ -z "${1:-}" ]; then echo "Копии в $DATA/backups (новые сверху):" (cd "$DATA/backups" && ls -1t daily/*.dump weekly/*.dump 2>/dev/null) || echo " копий нет" exit 0 fi rel="${1#"$DATA/backups/"}" [ -f "$DATA/backups/$rel" ] || { echo "нет файла $DATA/backups/$rel" >&2; exit 1; } echo "→ восстановление из $rel: api, рекомендации и анализ будут остановлены на время восстановления" read -r -p "Продолжить? [y/N] " yes [ "$yes" = y ] || [ "$yes" = Y ] || exit 1 docker compose stop api recommender analyzer storage-agent if docker compose run --rm backup restore "/backups/$rel"; then status=0 else status=1 fi docker compose up -d [ "$status" = 0 ] || { echo "восстановление не удалось — база не изменена" >&2; exit 1; } echo "готово. Поиск переиндексируется при старте api (или вручную: «Администрирование → Библиотека»)."