chg: pkg: add backup/restore scripts #15
Deploy to Production / deploy (push) Successful in 3m26s

This commit is contained in:
Lang
2026-08-18 17:41:43 +02:00
parent 2be49ebdf1
commit 558c8a3bad
9 changed files with 758 additions and 547 deletions
+65
View File
@@ -0,0 +1,65 @@
#!/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."