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

50 lines
2.1 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}/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}"