Private
Public Access
42 lines
1.2 KiB
Bash
Executable File
42 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
PROJECT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
cd "$PROJECT_DIR"
|
|
|
|
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')
|
|
DB_NAME=$(docker inspect "$CONTAINER_ID" --format '{{range .Config.Env}}{{println .}}{{end}}' | sed -n 's/^POSTGRES_DB=//p')
|
|
|
|
if [ -z "$DB_USER" ] || [ -z "$DB_NAME" ]; then
|
|
echo "Error: Could not read PostgreSQL credentials from the db service."
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_DIR=${1:-"$PROJECT_DIR/backups"}
|
|
mkdir -p "$BACKUP_DIR"
|
|
BACKUP_DIR=$(CDPATH= cd -- "$BACKUP_DIR" && pwd)
|
|
TIMESTAMP=$(date +%Y-%m-%d.%H%M%S)
|
|
BACKUP_FILE="mineseeker-postgres.${TIMESTAMP}.dump"
|
|
BACKUP_PATH="$BACKUP_DIR/$BACKUP_FILE"
|
|
TEMP_PATH="$BACKUP_PATH.tmp"
|
|
|
|
umask 077
|
|
trap 'rm -f "$TEMP_PATH"' EXIT
|
|
|
|
echo "Creating PostgreSQL backup: $BACKUP_PATH"
|
|
docker exec "$CONTAINER_ID" pg_dump \
|
|
--username="$DB_USER" \
|
|
--format=custom \
|
|
--create \
|
|
"$DB_NAME" > "$TEMP_PATH"
|
|
|
|
mv "$TEMP_PATH" "$BACKUP_PATH"
|
|
trap - EXIT
|
|
echo "Backup complete: $BACKUP_PATH"
|