32 lines
1.4 KiB
Bash
Executable File
32 lines
1.4 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
if [ "$#" -ne 1 ] || [ "${CONFIRM_RESTORE:-}" != "rf4-spotter" ]; then
|
|
echo "Usage: CONFIRM_RESTORE=rf4-spotter $0 ABSOLUTE_BACKUP_DIRECTORY/TIMESTAMP" >&2
|
|
exit 2
|
|
fi
|
|
|
|
case "$1" in
|
|
/*) ;;
|
|
*) echo "Backup directory must be an absolute path" >&2; exit 2 ;;
|
|
esac
|
|
|
|
source_dir=${1%/}
|
|
test -f "$source_dir/postgres.dump"
|
|
test -f "$source_dir/minio.tar.gz"
|
|
(cd "$source_dir" && sha256sum -c SHA256SUMS)
|
|
backup_root=$(dirname "$source_dir")
|
|
export BACKUP_DIRECTORY="$backup_root"
|
|
restore_tmp=$(mktemp -d "$backup_root/.rf4-restore.XXXXXX")
|
|
trap 'rm -rf "$restore_tmp"' EXIT INT TERM
|
|
tar -xzf "$source_dir/minio.tar.gz" -C "$restore_tmp"
|
|
restore_name=$(basename "$restore_tmp")
|
|
|
|
env_file=${COMPOSE_ENV_FILE:-.env.production}
|
|
compose="docker compose --env-file $env_file -f compose.production.yaml"
|
|
$compose stop api web
|
|
$compose exec -T db sh -c 'pg_restore --clean --if-exists --exit-on-error --no-owner --no-acl -U "$POSTGRES_USER" -d "$POSTGRES_DB"' < "$source_dir/postgres.dump"
|
|
$compose run --rm --entrypoint /bin/sh storage-tool -c 'mc alias set local http://minio:9000 "$S3_ACCESS_KEY" "$S3_SECRET_KEY" >/dev/null && mc stat "local/$S3_BUCKET" >/dev/null && mc rm --recursive --force "local/$S3_BUCKET" >/dev/null 2>&1 && mc mirror --overwrite "/backup/'"$restore_name"'/minio" "local/$S3_BUCKET"'
|
|
$compose up -d ${RESTORE_START_SERVICES:-minio api web proxy}
|
|
echo "Restore completed from: $source_dir"
|