#!/usr/bin/env bash # Nightly backup of the VM's databases and volumes into ~/backups/, # keeping 14 days. From https://exe.dev/deploy/migrate-railway set -euo pipefail cd ~/app dir=~/backups/$(date -u +%F) mkdir -p -m 700 "$dir" while IFS=$'\t' read -r name slug kind mount _ <&3; do case $kind in postgres) docker compose exec -T "$slug" sh -c 'pg_dump -h localhost -U "$PGUSER" --format=custom "$PGDATABASE"' > "$dir/$slug.pgdump" ;; redis) docker compose exec -T "$slug" sh -c 'redis-cli -a "$REDIS_PASSWORD" --no-auth-warning --rdb /tmp/backup.rdb >/dev/null 2>&1 && cat /tmp/backup.rdb' > "$dir/$slug.rdb" ;; *) [ "$mount" = - ] || sudo tar --numeric-owner -C "volumes/$slug" -cf - . > "$dir/$slug.tar" ;; esac done 3< <(~/railway/import list) chmod 600 "$dir"/* find ~/backups -mindepth 1 -maxdepth 1 -type d -mtime +14 -exec rm -r {} + du -sh "$dir"