#!/bin/bash # Clona NPM master (Pi1) → backup Pi2 + clone dormiente DS920 (NPM3). # Su DS920: extract solo se extrema-npm NON è running (evita SQLite corrotto in B1). # Synology: SFTP spesso chrootato → verso DS920 si usa stream tar via SSH (non scp). set -euo pipefail REMOTE_IP="${REMOTE_IP:-192.168.128.81}" REMOTE_USER="${REMOTE_USER:-daniely}" DS920_IP="${DS920_IP:-192.168.128.100}" DS920_USER="${DS920_USER:-daniely}" DS920_NPM_ROOT="${DS920_NPM_ROOT:-/volume1/extrema/npm}" SOURCE_BASE="${SOURCE_BASE:-/home/daniely/docker/npm}" TEMP_FILE="${TEMP_FILE:-/tmp/npm_full_clone.tar.gz}" log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] sync-npm: $*"; } log "Avvio clonazione NPM (Master → Pi2 + DS920)..." sudo tar --exclude='*.log' -czf "$TEMP_FILE" -C "$SOURCE_BASE" data letsencrypt sudo chown "${USER}:${USER}" "$TEMP_FILE" # --- Pi-2 (hot backup: stop/extract/start) --- log "Invio archivio al Pi-2 ($REMOTE_IP)..." if scp -o ConnectTimeout=10 -o BatchMode=yes "$TEMP_FILE" "${REMOTE_USER}@${REMOTE_IP}:/tmp/npm_full_clone.tar.gz"; then ssh -o ConnectTimeout=15 -o BatchMode=yes "${REMOTE_USER}@${REMOTE_IP}" bash -s <<'EOS' set -e echo " ...Stop NPM..." docker stop npm 2>/dev/null || true echo " ...Estrazione dati..." sudo rm -rf /home/daniely/docker/npm/data/* /home/daniely/docker/npm/letsencrypt/* sudo tar -xzf /tmp/npm_full_clone.tar.gz -C /home/daniely/docker/npm/ sudo chown -R root:root /home/daniely/docker/npm/ echo " ...Start NPM..." docker start npm rm -f /tmp/npm_full_clone.tar.gz EOS log "Pi-2 sincronizzato OK" else log "ERRORE: trasferimento Pi-2 fallito" fi # --- DS920 NPM3 (dormiente) --- log "Stream archivio al DS920 ($DS920_IP)..." if ssh -o ConnectTimeout=15 -o BatchMode=yes "${DS920_USER}@${DS920_IP}" \ "export PATH=/usr/local/bin:\$PATH; docker ps --format '{{.Names}}' 2>/dev/null | grep -qx extrema-npm"; then log "SKIP DS920: extrema-npm running (B1 armato) — sync al prossimo disarm" else if cat "$TEMP_FILE" | ssh -o ConnectTimeout=180 -o BatchMode=yes "${DS920_USER}@${DS920_IP}" \ "export PATH=/usr/local/bin:\$PATH; NPM_ROOT=$(printf %q "$DS920_NPM_ROOT"); mkdir -p \"\$NPM_ROOT/data\" \"\$NPM_ROOT/letsencrypt\"; find \"\$NPM_ROOT/data\" -mindepth 1 -maxdepth 1 -exec rm -rf {} + 2>/dev/null || true; find \"\$NPM_ROOT/letsencrypt\" -mindepth 1 -maxdepth 1 -exec rm -rf {} + 2>/dev/null || true; tar -xzf - -C \"\$NPM_ROOT\"; chmod -R a+rX \"\$NPM_ROOT\" 2>/dev/null || true; echo NPM3_EXTRACT_OK; ls \"\$NPM_ROOT/data/nginx/proxy_host\" 2>/dev/null | head -5"; then log "DS920 NPM3 sincronizzato OK (dormiente)" else log "ERRORE: extract DS920 fallito" fi fi sudo rm -f "$TEMP_FILE" log "Sincronizzazione NPM completata."