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