#!/usr/bin/env bash set -euo pipefail APP_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" BACKUP_ROOT="${BACKUP_ROOT:-$APP_DIR/backups}" DB_NAME="${DB_NAME:-EMI_SOCIAL}" MONGO_IMAGE="${MONGO_BACKUP_IMAGE:-mongo:7}" KEEP_ARCHIVES="${KEEP_ARCHIVES:-12}" timestamp="$(date -u +%Y%m%dT%H%M%SZ)" dump_name="emi_social_${timestamp}" archive_path="$BACKUP_ROOT/${dump_name}.tar.gz" mkdir -p "$BACKUP_ROOT" docker run --rm \ --user "$(id -u):$(id -g)" \ --env-file "$APP_DIR/.env" \ -e DB_NAME="$DB_NAME" \ -e DUMP_NAME="$dump_name" \ -v "$BACKUP_ROOT:/backup" \ "$MONGO_IMAGE" \ bash -lc ' set -euo pipefail : "${MONGO_URL:?MONGO_URL is missing}" uri="$MONGO_URL" uri="${uri/\/myFirstDatabase?/\/${DB_NAME}?}" uri="${uri/\/myFirstDatabase$/\/${DB_NAME}}" mongodump --uri "$uri" --db "$DB_NAME" --out "/backup/$DUMP_NAME" ' tar -czf "$archive_path" -C "$BACKUP_ROOT" "$dump_name" rm -rf "$BACKUP_ROOT/$dump_name" find "$BACKUP_ROOT" -maxdepth 1 -name 'emi_social_*.tar.gz' -type f \ -printf '%T@ %p\n' \ | sort -rn \ | awk -v keep="$KEEP_ARCHIVES" 'NR > keep { print $2 }' \ | xargs -r rm -f echo "Created MongoDB backup: $archive_path"