#!/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}/backup.sh" "$@" [[ -f .env ]] || exit 1 # shellcheck disable=SC1091 source .env check_docker_access || exit 1 BACKUP_ROOT="${NEXTCLOUD_BACKUP_DIR:-/var/nextcloud/backups}" ensure_host_dir "${BACKUP_ROOT}" sudo chown "$(id -u):$(id -g)" "${BACKUP_ROOT}" 2>/dev/null || true sudo chmod 0775 "${BACKUP_ROOT}" 2>/dev/null || true TS="$(date +%Y-%m-%d_%H-%M-%S)" BD="${BACKUP_ROOT}/backup_${TS}" ARCH="${BACKUP_ROOT}/nextcloud_docker_${TS}.tar.gz" mkdir -p "${BD}" run_compose exec -T app php occ maintenance:mode --on 2>/dev/null || true run_compose exec -T db mariadb-dump -u root -p"${MYSQL_ROOT_PASSWORD}" \ --single-transaction "${MYSQL_DATABASE}" > "${BD}/database.sql" if [[ -d "${NEXTCLOUD_CONFIG_DIR:-}" ]]; then cp -a "${NEXTCLOUD_CONFIG_DIR}" "${BD}/config" 2>/dev/null || sudo cp -a "${NEXTCLOUD_CONFIG_DIR}" "${BD}/config" fi if [[ -d "${NEXTCLOUD_APPDATA:-}" ]]; then tar czf "${BD}/host_appdata.tar.gz" -C "${NEXTCLOUD_APPDATA}" . 2>/dev/null || \ sudo tar czf "${BD}/host_appdata.tar.gz" -C "${NEXTCLOUD_APPDATA}" . fi if [[ -d "${NEXTCLOUD_CUSTOM_APPS:-}" ]]; then tar czf "${BD}/host_custom_apps.tar.gz" -C "${NEXTCLOUD_CUSTOM_APPS}" . 2>/dev/null || \ sudo tar czf "${BD}/host_custom_apps.tar.gz" -C "${NEXTCLOUD_CUSTOM_APPS}" . fi if [[ -d "${NEXTCLOUD_DATADIR:-}" ]]; then tar czf "${BD}/host_userdata.tar.gz" -C "${NEXTCLOUD_DATADIR}" \ --exclude='appdata_*' --exclude='nextcloud.log' . 2>/dev/null || \ sudo tar czf "${BD}/host_userdata.tar.gz" -C "${NEXTCLOUD_DATADIR}" \ --exclude='appdata_*' --exclude='nextcloud.log' . fi run_docker run --rm -v nextcloud_app_data:/data:ro -v "${BD}:/backup" alpine:3.20 \ tar czf /backup/nextcloud_data.tar.gz -C /data . run_compose exec -T app php occ maintenance:mode --off 2>/dev/null || true tar czf "${ARCH}" -C "${BACKUP_ROOT}" "backup_${TS}" rm -rf "${BD}" echo "[INFO] Бэкап: ${ARCH}"