Add monthly MongoDB backup script
This commit is contained in:
@@ -8,6 +8,7 @@ lerna-debug.log*
|
|||||||
|
|
||||||
# Dumps
|
# Dumps
|
||||||
dump
|
dump
|
||||||
|
backups/
|
||||||
|
|
||||||
|
|
||||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
|||||||
Executable
+43
@@ -0,0 +1,43 @@
|
|||||||
|
#!/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"
|
||||||
Reference in New Issue
Block a user