#!/bin/bash # Backs up plantdb volumes (SQLite db + media) to NAS via SSH. # Cron: 0 3 * * * /home/stephan/stacks/plantdb/scripts/backup_to_nas.sh >> /var/log/plantdb_backup.log 2>&1 set -euo pipefail NAS_USER="admin" NAS_HOST="nas" NAS_PATH="/share/MD0_DATA/Public/plantdb_backup" SSH_KEY="/home/stephan/.ssh/plantdb_backup" TMP_DIR="/tmp/plantdb_backup_$$" cleanup() { docker run --rm -v "${TMP_DIR}:/dst" alpine sh -c "rm -rf /dst/db /dst/media" rmdir "${TMP_DIR}" } trap cleanup EXIT mkdir -p "${TMP_DIR}/db" "${TMP_DIR}/media" # Extract volume data to tmp dir docker run --rm \ -v plantdb_db:/src/db:ro \ -v plantdb_media:/src/media:ro \ -v "${TMP_DIR}:/dst" \ alpine sh -c "cp -a /src/db/. /dst/db/ && cp -a /src/media/. /dst/media/" # Sync to NAS rsync -av --delete \ -e "ssh -i ${SSH_KEY} -o StrictHostKeyChecking=no" \ "${TMP_DIR}/" "${NAS_USER}@${NAS_HOST}:${NAS_PATH}/" echo "[$(date '+%Y-%m-%d %H:%M:%S')] plantdb backup complete"