Backup & Restore

PostgreSQLpostgres-data
Blob Store/opt/megarepo/data

docker compose exec db pg_dump -U megarepo megarepo \
  | gzip > megarepo-db-$(date +%Y%m%d-%H%M%S).sql.gz

Blob Store

docker run --rm \
  -v app-megarepo_megarepo-data:/data:ro \
  -v "$(pwd)":/backup \
  alpine tar czf /backup/blobs-backup.tar.gz -C /data .

# Default: /var/backups/megarepo, 14-day retention
./tools/backup.sh

# Custom directory and 7-day retention
./tools/backup.sh -d /mnt/nfs/backups/megarepo -r 7

docker compose down

docker compose up db -d
until docker compose exec db pg_isready -U megarepo; do sleep 1; done

docker compose exec db psql -U megarepo -c "DROP SCHEMA public CASCADE; CREATE SCHEMA public;"

gunzip -c megarepo-db-*.sql.gz \
  | docker compose exec -T db psql -U megarepo -d megarepo

docker volume rm app-megarepo_megarepo-data 2>/dev/null || true
docker volume create app-megarepo_megarepo-data

docker run --rm \
  -v app-megarepo_megarepo-data:/opt/megarepo/data \
  -v "$(pwd)":/backup \
  alpine tar xzf /backup/blobs-backup.tar.gz -C /opt/megarepo/data

docker compose up -d
curl -f http://localhost:8080/actuator/health