nextcloud-install/docker/restore.sh
2026-06-24 09:23:58 +03:00

34 lines
1.3 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "${SCRIPT_DIR}"
# shellcheck source=../lib/common.sh
source "${SCRIPT_DIR}/../lib/common.sh"
drop_root_if_sudo "${SCRIPT_DIR}/restore.sh" "$@"
ARCH="${1:-}"
[[ -f "${ARCH}" && -f .env ]] || { echo "Использование: ./restore.sh archive.tar.gz"; exit 1; }
# shellcheck disable=SC1091
source .env
check_docker_access || exit 1
read -r -p "Перезаписать данные? (yes/no): " c
[[ "${c}" == yes ]] || exit 0
BACKUP_ROOT="${NEXTCLOUD_BACKUP_DIR:-/var/nextcloud/backups}"
RD="${BACKUP_ROOT}/restore_$$"
ensure_host_dir "${BACKUP_ROOT}"
mkdir -p "${RD}"
tar xzf "${ARCH}" -C "${RD}" --strip-components=1
run_compose stop app cron
ensure_host_dir "${NEXTCLOUD_CONFIG_DIR:?}"
sudo find "${NEXTCLOUD_CONFIG_DIR}" -mindepth 1 -maxdepth 1 -exec rm -rf {} +
sudo cp -a "${RD}/config/." "${NEXTCLOUD_CONFIG_DIR}/"
fix_config_permissions "${NEXTCLOUD_CONFIG_DIR}"
run_docker run --rm -v nextcloud_app_data:/data -v "${RD}:/b:ro" alpine:3.20 \
sh -c "rm -rf /data/* && tar xzf /b/nextcloud_data.tar.gz -C /data"
run_compose exec -T db mariadb -u root -p"${MYSQL_ROOT_PASSWORD}" "${MYSQL_DATABASE}" < "${RD}/database.sql"
run_compose start app cron
rm -rf "${RD}"
echo "[INFO] Восстановление завершено."