38 lines
1.3 KiB
Bash
Executable File
38 lines
1.3 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
cd "$(dirname "$0")/../.."
|
|
backup_file="${1:-}"
|
|
confirmation="${2:-}"
|
|
project="${COMPOSE_PROJECT_NAME:-mobilityops}"
|
|
compose_files="-f compose.yaml -f compose.unraid.yaml"
|
|
|
|
if [ ! -f "$backup_file" ]; then
|
|
echo "Backup file not found: $backup_file" >&2
|
|
exit 1
|
|
fi
|
|
if [ "$confirmation" != "RESTORE-MOBILITYOPS" ]; then
|
|
echo "Refusing destructive restore; pass RESTORE-MOBILITYOPS as the second argument" >&2
|
|
exit 1
|
|
fi
|
|
|
|
docker compose -p "$project" $compose_files exec -T db pg_restore --list \
|
|
< "$backup_file" > /dev/null
|
|
safety_backup="$(./deploy/unraid/backup-postgres.sh)"
|
|
echo "Pre-restore safety backup: $safety_backup"
|
|
|
|
restart_api() {
|
|
docker compose -p "$project" $compose_files up -d api web > /dev/null
|
|
}
|
|
trap restart_api EXIT INT TERM
|
|
docker compose -p "$project" $compose_files stop api > /dev/null
|
|
docker compose -p "$project" $compose_files exec -T db sh -eu -c \
|
|
'dropdb --force -U "$POSTGRES_USER" "$POSTGRES_DB" && createdb -U "$POSTGRES_USER" "$POSTGRES_DB"'
|
|
docker compose -p "$project" $compose_files exec -T db sh -eu -c \
|
|
'pg_restore --no-owner --no-acl -U "$POSTGRES_USER" -d "$POSTGRES_DB"' \
|
|
< "$backup_file"
|
|
restart_api
|
|
trap - EXIT INT TERM
|
|
docker compose -p "$project" $compose_files exec -T api alembic current
|
|
echo "Restore completed from $backup_file"
|