Private
Public Access
66 lines
1.7 KiB
Bash
Executable File
66 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
PROJECT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
cd "$PROJECT_DIR"
|
|
|
|
if [ "$#" -ne 1 ]; then
|
|
echo "Usage: $0 <backup-file>"
|
|
echo "Example: $0 backups/mineseeker-postgres.2026-08-18.120000.dump"
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_FILE=$1
|
|
if [ ! -f "$BACKUP_FILE" ]; then
|
|
echo "Error: Backup file not found: $BACKUP_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
CONTAINER_ID=$(docker compose ps -q db)
|
|
if [ -z "$CONTAINER_ID" ]; then
|
|
echo "Error: The MineSeeker PostgreSQL service is not running."
|
|
exit 1
|
|
fi
|
|
|
|
DB_USER=$(docker inspect "$CONTAINER_ID" --format '{{range .Config.Env}}{{println .}}{{end}}' | sed -n 's/^POSTGRES_USER=//p')
|
|
if [ -z "$DB_USER" ]; then
|
|
echo "Error: Could not read POSTGRES_USER from the db service."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Verifying PostgreSQL archive..."
|
|
docker exec -i "$CONTAINER_ID" pg_restore --list < "$BACKUP_FILE" > /dev/null
|
|
echo "Archive OK."
|
|
|
|
printf 'WARNING: This replaces the current MineSeeker database. Type yes to continue: '
|
|
read -r CONFIRM
|
|
if [ "$CONFIRM" != 'yes' ]; then
|
|
echo "Aborted."
|
|
exit 1
|
|
fi
|
|
|
|
APP_WAS_RUNNING=0
|
|
SCHEDULER_WAS_RUNNING=0
|
|
[ -n "$(docker compose ps -q app)" ] && APP_WAS_RUNNING=1
|
|
[ -n "$(docker compose ps -q scheduler)" ] && SCHEDULER_WAS_RUNNING=1
|
|
|
|
restart_services() {
|
|
[ "$APP_WAS_RUNNING" -eq 1 ] && docker compose start app || true
|
|
[ "$SCHEDULER_WAS_RUNNING" -eq 1 ] && docker compose start scheduler || true
|
|
}
|
|
trap restart_services EXIT
|
|
|
|
echo "Stopping MineSeeker services that use PostgreSQL..."
|
|
docker compose stop app scheduler
|
|
|
|
echo "Restoring PostgreSQL backup: $BACKUP_FILE"
|
|
docker exec -i "$CONTAINER_ID" pg_restore \
|
|
--username="$DB_USER" \
|
|
--dbname=postgres \
|
|
--clean \
|
|
--create \
|
|
--if-exists \
|
|
--exit-on-error < "$BACKUP_FILE"
|
|
|
|
echo "Restore complete."
|