snapshot: preserve backup UX, remote target setup, and docs updates
This commit is contained in:
35
scripts/backup_restore.sh
Normal file
35
scripts/backup_restore.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
if [[ $# -lt 2 || "$1" != "--yes-restore" ]]; then
|
||||
echo "Usage: $0 --yes-restore <backup_dir>" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
backup_dir="$2"
|
||||
db_dump_path="$backup_dir/db.dump"
|
||||
media_archive_path="$backup_dir/media.tar.gz"
|
||||
|
||||
if [[ ! -f "$db_dump_path" || ! -f "$media_archive_path" ]]; then
|
||||
echo "Backup files missing in $backup_dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
set -a
|
||||
. ./.env
|
||||
set +a
|
||||
|
||||
docker compose exec -T db sh -lc "PGPASSWORD='$POSTGRES_PASSWORD' psql -U '$POSTGRES_USER' -d postgres -c \"SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$POSTGRES_DB' AND pid <> pg_backend_pid();\""
|
||||
docker compose exec -T db sh -lc "PGPASSWORD='$POSTGRES_PASSWORD' psql -U '$POSTGRES_USER' -d postgres -c \"DROP DATABASE IF EXISTS \\\"$POSTGRES_DB\\\";\""
|
||||
docker compose exec -T db sh -lc "PGPASSWORD='$POSTGRES_PASSWORD' psql -U '$POSTGRES_USER' -d postgres -c \"CREATE DATABASE \\\"$POSTGRES_DB\\\";\""
|
||||
|
||||
docker compose exec -T db sh -lc "PGPASSWORD='$POSTGRES_PASSWORD' pg_restore -U '$POSTGRES_USER' -d '$POSTGRES_DB' --no-owner --no-privileges" < "$db_dump_path"
|
||||
|
||||
rm -rf "$ROOT_DIR/backend/media"
|
||||
mkdir -p "$ROOT_DIR/backend"
|
||||
tar -C "$ROOT_DIR/backend" -xzf "$media_archive_path"
|
||||
|
||||
echo "Restore completed from $backup_dir"
|
||||
Reference in New Issue
Block a user