#!/bin/sh # Restores a backup made by backup.sh into a running QM Docker deployment # whose deployment folder and CLI state came from the same archive. # Usage: restore.sh BACKUP.tar [org] set -eu archive="$1" org="${2:-team}" work="$(mktemp -d)" trap 'rm -rf "$work"' EXIT tar -C "$work" -xf "$archive" tool_image="$(docker inspect -f '{{.Config.Image}}' "qm-$org-pg")" apps="qm-$org-core qm-$org-portal qm-$org-web-ui" docker stop $apps >/dev/null sandboxes="$(docker ps -aq --filter name='^qm-sbx-')" [ -z "$sandboxes" ] || docker rm -f $sandboxes >/dev/null docker exec "qm-$org-pg" dropdb -U postgres --force qm docker exec "qm-$org-pg" createdb -U postgres qm docker exec -i "qm-$org-pg" pg_restore -U postgres -d qm --exit-on-error < "$work/qm.dump" for file in "$work"/volumes/*.tgz; do vol="$(basename "$file" .tgz)" docker volume create "$vol" >/dev/null docker run --rm -i --network none -v "$vol:/v" --entrypoint sh "$tool_image" \ -c 'find /v -mindepth 1 -delete && tar -C /v -xzf -' < "$file" done docker start $apps >/dev/null echo "restored $archive"