Files
WhatIDo/scripts/restore.sh
T
dev ddd49707ae feat(storage): S3-совместимое хранилище файлов (SeaweedFS/MinIO) и миграция uploads
- storage.js: абстракция хранилища с драйверами local и s3 (AWS SDK v3),
  ключи объектов совпадают с текущими путями /uploads/<файл>, поэтому схема БД
  и URL не меняются
- docker-compose.yml: сервис s3 (SeaweedFS, том s3-data, API только на loopback),
  переменные S3_*/STORAGE_*, restart unless-stopped для app и db
- docker-compose.minio.yml: оверрайд S3-сервиса на MinIO (образ из своего зеркала)
- server.js/worker.js: чтение и запись файлов только через storage (отдача
  /uploads/*, миниатюры, share-файлы, zip-отчёты, enhance/apply/rollback,
  photo-worker), автосоздание бакета, глобальная персистенция загрузок multer
- бэкап/восстановление и scripts/backup.sh, restore.sh — через scripts/storage-sync.js
- scripts/migrate-to-s3.js: идемпотентная миграция uploads/ в бакет
  (--dry-run, --verify-only, --delete-local)
- админка: блок «Хранилище» в системной информации
- .env.example, README.md, AGENTS.md: описание драйверов, переменных и перехода на S3
2026-09-26 11:08:53 +03:00

46 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# Восстанавливает данные из архива переноса на новом устройстве.
# Порядок: скопировать папку проекта + архив, затем ./scripts/restore.sh <архив>
set -euo pipefail
cd "$(dirname "$0")/.."
BK="${1:?Использование: $0 <backup.tar.gz>}"
[ -f "$BK" ] || { echo "Файл не найден: $BK"; exit 1; }
echo ">> Сборка и запуск стека"
docker compose up -d --build
echo ">> Ожидание БД"
for _ in $(seq 1 60); do
docker compose exec -T db pg_isready -U app -d whereldo >/dev/null 2>&1 && break
sleep 1
done
TMP=$(mktemp -d)
trap 'rm -rf "$TMP"' EXIT
echo ">> Распаковка архива"
tar -xzf "$BK" -C "$TMP"
echo ">> Остановка приложения"
docker compose stop app
echo ">> Восстановление БД (чистая схема)"
docker compose exec -T db psql -U app -d whereldo -c 'DROP SCHEMA public CASCADE; CREATE SCHEMA public;' >/dev/null
gzip -dc "$TMP/db.sql.gz" | docker compose exec -T db psql -U app -d whereldo
echo ">> Загрузка файлов в хранилище"
docker compose start app
for _ in $(seq 1 30); do
docker compose exec -T app true >/dev/null 2>&1 && break
sleep 1
done
docker compose exec -T app rm -rf /tmp/whatido-import
docker compose exec -T app mkdir -p /tmp/whatido-import
docker cp "$TMP/_uploads/." "whatido-app-1:/tmp/whatido-import/"
docker compose exec -T app node scripts/storage-sync.js import /tmp/whatido-import
docker compose exec -T app rm -rf /tmp/whatido-import
echo ">> Запуск приложения"
docker compose start app
echo "Готово. Проверка: https://localhost:3443 (админка /dashboard.html, пароль из .env)"