44 lines
1.2 KiB
Bash
Executable File
44 lines
1.2 KiB
Bash
Executable File
#!/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"
|