#!/bin/bash set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" INFRA_DIR="$(dirname "$SCRIPT_DIR")" BACKUP_DIR="${INFRA_DIR}/backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_PATH="${BACKUP_DIR}/${TIMESTAMP}" mkdir -p "${BACKUP_PATH}" echo "=== EifelDC Backup ===" echo "Backup directory: ${BACKUP_PATH}" echo "" if command -v docker &>/dev/null && docker compose -f "${INFRA_DIR}/docker-compose.yml" ps &>/dev/null 2>&1; then echo "[Docker Mode]" echo "[1/4] Backing up PostgreSQL..." docker compose -f "${INFRA_DIR}/docker-compose.yml" exec -T postgres \ pg_dump -U synapse synapse > "${BACKUP_PATH}/synapse_db.sql" echo "[2/4] Backing up Synapse media..." docker cp eifeldc-synapse:/data/media_store "${BACKUP_PATH}/media_store" 2>/dev/null || true echo "[3/4] Backing up Synapse config..." docker cp eifeldc-synapse:/data/homeserver.yaml "${BACKUP_PATH}/homeserver.yaml" 2>/dev/null || true docker cp eifeldc-synapse:/data/signing.key "${BACKUP_PATH}/signing.key" 2>/dev/null || true echo "[4/4] Backing up environment config..." cp "${INFRA_DIR}/.env" "${BACKUP_PATH}/.env" 2>/dev/null || true else echo "[Native Mode]" echo "[1/3] Backing up PostgreSQL..." sudo -u postgres pg_dump synapse > "${BACKUP_PATH}/synapse_db.sql" 2>/dev/null || echo "Warning: Could not dump database" echo "[2/3] Backing up Synapse data..." SYNAPSE_DIR="${SYNAPSE_DIR:-/opt/eifeldc/synapse-data}" cp -r "${SYNAPSE_DIR}/homeserver.yaml" "${BACKUP_PATH}/" 2>/dev/null || true cp -r "${SYNAPSE_DIR}/signing.key" "${BACKUP_PATH}/" 2>/dev/null || true cp -r "${SYNAPSE_DIR}/media_store" "${BACKUP_PATH}/" 2>/dev/null || true echo "[3/3] Backing up environment config..." cp "${INFRA_DIR}/.env" "${BACKUP_PATH}/.env" 2>/dev/null || true fi COMPRESSED="${BACKUP_DIR}/eifeldc_backup_${TIMESTAMP}.tar.gz" tar -czf "${COMPRESSED}" -C "${BACKUP_DIR}" "${TIMESTAMP}" rm -rf "${BACKUP_PATH}" echo "" echo "Backup saved: ${COMPRESSED}" echo "" KEEP_COUNT=7 ls -t "${BACKUP_DIR}"/eifeldc_backup_*.tar.gz 2>/dev/null | tail -n +$((KEEP_COUNT + 1)) | xargs -r rm -- echo "Old backups cleaned (keeping latest ${KEEP_COUNT})" echo "Done!"