diff --git a/.secret.example b/.secret.example index 96c7248..3ebcde1 100644 --- a/.secret.example +++ b/.secret.example @@ -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" diff --git a/backup.sh b/backup.sh index e2734a6..4ee8e83 100644 --- a/backup.sh +++ b/backup.sh @@ -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