#!/usr/bin/env bash set -euo pipefail echo "StellaOps Compose Backup" echo "This will create a tar.gz of PostgreSQL, RustFS (object-store), and Valkey data volumes." read -rp "Proceed? [y/N] " ans [[ ${ans:-N} =~ ^[Yy]$ ]] || { echo "Aborted."; exit 1; } TS=$(date -u +%Y%m%dT%H%M%SZ) OUT_DIR=${BACKUP_DIR:-backups} mkdir -p "$OUT_DIR" docker compose ps >/dev/null echo "Pausing worker containers for consistency..." docker compose pause scanner-worker scheduler-worker taskrunner-worker || true echo "Backing up volumes..." docker run --rm \ -v stellaops-postgres:/data/postgres:ro \ -v stellaops-rustfs:/data/rustfs:ro \ -v stellaops-valkey:/data/valkey:ro \ -v "$PWD/$OUT_DIR":/out \ alpine sh -c "cd / && tar czf /out/stellaops-backup-$TS.tar.gz data" docker compose unpause scanner-worker scheduler-worker taskrunner-worker || true echo "Backup written to $OUT_DIR/stellaops-backup-$TS.tar.gz"