add retention and remote file transfer

This commit is contained in:
fpicone
2025-12-11 16:54:46 +01:00
parent 9a163b3bf2
commit 2613e684c1
2 changed files with 87 additions and 1 deletions

View File

@@ -9,3 +9,12 @@ DB_PASS=password_mysql
# Gotify
GOTIFY_URL="https://alert.qwince.com/message"
GOTIFY_TOKEN="ABnq7pJSSPrFRjx"
# Retention (numero di giorni di conservazione backup)
RETENTION_DAYS=7
# Trasferimento remoto via rsync/scp
REMOTE_HOST="nas.qwince.com"
REMOTE_USER="fpicone"
REMOTE_PASS="C3llul4r3@22"
REMOTE_PATH="/volume2/CloudpanelBackup"

View File

@@ -54,6 +54,65 @@ send_gotify_notification() {
fi
}
# Funzione per gestire la retention dei backup remoti
cleanup_old_backups() {
local retention_days="${RETENTION_DAYS:-7}"
if [ -z "$REMOTE_HOST" ] || [ -z "$REMOTE_USER" ] || [ -z "$REMOTE_PASS" ] || [ -z "$REMOTE_PATH" ]; then
return 0
fi
echo "Pulizia backup remoti più vecchi di $retention_days giorni..."
# Rimuovi i backup più vecchi sul server remoto
sshpass -p "$REMOTE_PASS" ssh -o StrictHostKeyChecking=no "$REMOTE_USER@$REMOTE_HOST" "find $REMOTE_PATH/$DOMAIN -name 'backup_${DOMAIN}_*.zip' -type f -mtime +$retention_days -delete" 2>/dev/null
if [ $? -eq 0 ]; then
echo "Retention applicata con successo sul server remoto"
fi
}
# Funzione per trasferire il backup su server remoto
transfer_to_remote() {
local file="$1"
if [ -z "$REMOTE_HOST" ] || [ -z "$REMOTE_USER" ] || [ -z "$REMOTE_PASS" ] || [ -z "$REMOTE_PATH" ]; then
echo "Attenzione: Configurazione remota incompleta, trasferimento saltato"
return 0
fi
echo "Trasferimento backup su server remoto..."
# Verifica se sshpass è installato
if ! command -v sshpass &> /dev/null; then
echo "Errore: sshpass non è installato. Installare con: apt-get install sshpass"
send_gotify_notification "⚠️ Backup Parziale" "Backup di $DOMAIN completato ma trasferimento remoto fallito: sshpass non installato" 6
return 1
fi
# Crea la cartella del dominio sul server remoto se non esiste
echo "Creazione cartella remota se necessaria..."
sshpass -p "$REMOTE_PASS" ssh -o StrictHostKeyChecking=no "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_PATH/$DOMAIN" 2>/dev/null
if [ $? -ne 0 ]; then
echo "Errore durante la creazione della cartella remota"
send_gotify_notification "⚠️ Backup Parziale" "Backup di $DOMAIN completato ma creazione cartella remota fallita" 6
return 1
fi
# Trasferisci il file via rsync
sshpass -p "$REMOTE_PASS" rsync -avz -e "ssh -o StrictHostKeyChecking=no" "$file" "$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/$DOMAIN/"
if [ $? -ne 0 ]; then
echo "Errore durante il trasferimento del backup"
send_gotify_notification "⚠️ Backup Parziale" "Backup di $DOMAIN completato ma trasferimento remoto fallito" 6
return 1
fi
echo "Backup trasferito con successo su $REMOTE_HOST"
return 0
}
# Configurazione
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
BACKUP_DIR="$SCRIPT_DIR/backup_${DOMAIN}_$TIMESTAMP"
@@ -124,5 +183,23 @@ echo "File: $ZIP_FILE"
echo "Dimensione: $BACKUP_SIZE"
echo "=========================================="
# Trasferisci il backup su server remoto
transfer_to_remote "$ZIP_FILE"
TRANSFER_STATUS=$?
# Se il trasferimento è riuscito, rimuovi il file locale
if [ $TRANSFER_STATUS -eq 0 ]; then
echo "Rimozione file locale..."
rm -f "$ZIP_FILE"
echo "File zip rimosso dal locale, disponibile solo su $REMOTE_HOST"
# Gestisci la retention dei backup sul server remoto
cleanup_old_backups
fi
# Invia notifica di successo
send_gotify_notification "✅ Backup Completato" "Backup di $DOMAIN completato con successo\nFile: backup_${DOMAIN}_$TIMESTAMP.zip\nDimensione: $BACKUP_SIZE" 5
if [ $TRANSFER_STATUS -eq 0 ]; then
send_gotify_notification "✅ Backup Completato" "Backup di $DOMAIN completato con successo\nFile: backup_${DOMAIN}_$TIMESTAMP.zip\nDimensione: $BACKUP_SIZE\nLocation: $REMOTE_HOST:$REMOTE_PATH/$DOMAIN/" 5
else
send_gotify_notification "⚠️ Backup Parziale" "Backup di $DOMAIN completato localmente\nFile: $ZIP_FILE\nDimensione: $BACKUP_SIZE\nTrasferimento remoto fallito - File mantenuto in locale" 6
fi