Compare commits

...

3 Commits

Author SHA1 Message Date
francesco
6ac3f069f0 ++ 2026-04-28 14:38:38 +02:00
francesco
2b51d7882c ++ Aggiunta funzione di backup e aggiornamento README.md 2026-04-21 13:24:54 +02:00
francesco
255260c979 ++ Fix Semplificazione progetto, centralizzazione Gotify + Upload 2026-04-21 13:06:46 +02:00
6 changed files with 349 additions and 203 deletions

12
.gitignore vendored Normal file
View File

@@ -0,0 +1,12 @@
### Windows
# Windows thumbnail cache files
Thumbs.db
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows shortcuts
*.lnk

View File

@@ -1,14 +1,9 @@
# File di configurazione per le credenziali del database MySQL # File di configurazione per il backup
# Rinominare questo file in .secret e inserire le credenziali reali # Rinominare questo file in .secret.UTENTE e inserire i dati reali
DOMAIN=dominio.com
DB_HOST=localhost DB_HOST=localhost
DB_NAME=nome_database DB_NAME=nome_database
DB_USER=utente_mysql DB_USER=utente_mysql
DB_PASS=password_mysql DB_PASS=password_mysql
# Gotify
GOTIFY_URL="https://alert.qwince.com/message"
GOTIFY_TOKEN="ABnq7pJSSPrFRjx"
# Upload HTTP endpoint
UPLOAD_URL="http://192.168.0.10:8080/upload"

View File

@@ -17,6 +17,7 @@ Script bash per eseguire il backup automatico di un database MySQL e della carte
2. Lo script ti chiederà: 2. Lo script ti chiederà:
- Nome utente - Nome utente
- Dominio del sito (es. esempio.com)
- Host del database (default: localhost) - Host del database (default: localhost)
- Nome del database - Nome del database
- Utente del database (default: nome del database) - Utente del database (default: nome del database)
@@ -24,26 +25,21 @@ Script bash per eseguire il backup automatico di un database MySQL e della carte
3. Il file `.secret.UTENTE` verrà creato automaticamente con le credenziali fornite. 3. Il file `.secret.UTENTE` verrà creato automaticamente con le credenziali fornite.
4. (Opzionale) Modifica il file per configurare Gotify e upload remoto: 4. Rendi eseguibile lo script di backup:
```bash ```bash
nano .secret.UTENTE chmod +x core.sh
```
5. Rendi eseguibile lo script di backup:
```bash
chmod +x backup.sh
``` ```
## Utilizzo ## Utilizzo
Esegui lo script specificando utente e dominio: Esegui lo script specificando utente e dominio:
```bash ```bash
./backup.sh utente dominio ./core.sh utente dominio
``` ```
Esempio: Esempio:
```bash ```bash
./backup.sh myuser esempio.com ./core.sh myuser esempio.com
``` ```
## Configurazione su Webmin/Cron ## Configurazione su Webmin/Cron
@@ -59,12 +55,17 @@ Esempio:
```bash ```bash
chmod +x init.sh chmod +x init.sh
./init.sh ./init.sh
chmod +x backup.sh chmod +x core.sh
``` ```
3. Su cron manager inserisci: 3. Su cron manager inserisci:
```bash ```bash
/home/UTENTE/cloudpanel-backup/backup.sh UTENTE dominio.com /home/UTENTE/cloudpanel-backup/backup.sh
```
Oppure per un singolo sito:
```bash
/home/UTENTE/cloudpanel-backup/core.sh UTENTE dominio.com
``` ```
## Funzionalità ## Funzionalità
@@ -72,11 +73,35 @@ Esempio:
1. Esegue il dump del database MySQL specificato 1. Esegue il dump del database MySQL specificato
2. Copia la cartella `/home/UTENTE/htdocs/DOMINIO` 2. Copia la cartella `/home/UTENTE/htdocs/DOMINIO`
3. Crea un archivio ZIP contenente database e file del sito 3. Crea un archivio ZIP contenente database e file del sito
4. (Opzionale) Trasferisce il backup su server remoto 4. (Opzionale) Trasferisce il backup su server remoto via HTTP
5. (Opzionale) Invia notifiche via Gotify 5. (Opzionale) Invia notifiche via Gotify
6. Pulisce i file temporanei 6. Pulisce i file temporanei
7. Il file ZIP ha il formato: `backup_DOMINIO_YYYYMMDD_HHMMSS.zip` 7. Il file ZIP ha il formato: `backup_DOMINIO_YYYYMMDD_HHMMSS.zip`
## Configurazione Gotify e Upload remoto
Le impostazioni di Gotify e dell'endpoint di upload sono centralizzate nel file `core.sh` e non nei file `.secret.*`.
Per modificarle, edita direttamente `core.sh`:
```bash
# Gotify
GOTIFY_URL="https://alert.qwince.com/message"
GOTIFY_TOKEN="il_tuo_token"
# Upload HTTP endpoint
UPLOAD_URL="http://192.168.0.10:8080/upload"
```
## Backup multiplo
Per eseguire il backup di tutti i siti configurati:
```bash
chmod +x backup.sh
./backup.sh
```
Lo script scopre automaticamente i siti dai file `.secret.*` presenti nella directory.
Ogni file `.secret.UTENTE` contiene il `DOMAIN` associato, quindi non serve mantenere elenchi manuali.
## Note di sicurezza ## Note di sicurezza
- Il file `.secret.UTENTE` contiene credenziali sensibili - Il file `.secret.UTENTE` contiene credenziali sensibili

242
backup.sh
View File

@@ -1,195 +1,73 @@
#!/bin/bash #!/bin/bash
# Script di backup per database MySQL e cartella htdocs
# Le credenziali del database devono essere nel file .secret
# Uso: ./backup.sh user dominio
# Verifica parametri user e dominio
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Errore: Specificare user e dominio come parametri"
echo "Uso: $0 user dominio"
echo "Esempio: $0 utente esempio.com"
exit 1
fi
USER="$1"
DOMAIN="$2"
# Ottieni la directory dello script # Ottieni la directory dello script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SECRET_FILE="$SCRIPT_DIR/.secret.$USER"
# Verifica che il file .secret esista LOG_DIR="/tmp/cloudpanel-backup-log"
if [ ! -f "$SECRET_FILE" ]; then LOG_FILE="$LOG_DIR/backup_siti.log"
echo "Errore: File .secret non trovato in $SCRIPT_DIR" BACKUP_SCRIPT="$SCRIPT_DIR/core.sh"
echo "Creare il file .secret con le seguenti variabili:"
echo "DB_HOST=localhost"
echo "DB_NAME=nome_database"
echo "DB_USER=utente"
echo "DB_PASS=password"
exit 1
fi
# Carica le credenziali dal file .secret # Crea la directory dei log se non esiste
source "$SECRET_FILE" mkdir -p "$LOG_DIR"
# Verifica che le variabili necessarie siano definite # Cancella il log precedente
if [ -z "$DB_HOST" ] || [ -z "$DB_NAME" ] || [ -z "$DB_USER" ] || [ -z "$DB_PASS" ]; then : > "$LOG_FILE"
echo "Errore: Una o più variabili mancanti nel file .secret"
echo "Variabili richieste: DB_HOST, DB_NAME, DB_USER, DB_PASS"
exit 1
fi
# Funzione per inviare notifica a Gotify exec > >(tee -a "$LOG_FILE") 2>&1
send_gotify_notification() {
local title="$1"
local message="$2"
local priority="${3:-5}"
if [ -n "$GOTIFY_URL" ] && [ -n "$GOTIFY_TOKEN" ]; then
curl -X POST "$GOTIFY_URL" \
-H "Content-Type: application/json" \
-d "{\"title\":\"$title\",\"message\":\"$message\",\"priority\":$priority}" \
-H "X-Gotify-Key: $GOTIFY_TOKEN" \
-s > /dev/null 2>&1
fi
}
# Funzione per trasferire il backup su server remoto via HTTP
transfer_to_remote() {
local file="$1"
if [ -z "$UPLOAD_URL" ]; then
echo "Attenzione: URL di upload non configurato, trasferimento saltato"
return 0
fi
# Verifica disponibilità del server
echo "Verifica disponibilità server remoto..."
SERVER_CHECK=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 "$UPLOAD_URL" 2>/dev/null)
if [ $? -ne 0 ] || [ -z "$SERVER_CHECK" ]; then
echo "⚠️ Server remoto non raggiungibile"
send_gotify_notification "⚠️ [ $DOMAIN ] Backup Locale" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato\nServer remoto non disponibile\nFile mantenuto in locale: backup_${DOMAIN}_$TIMESTAMP.zip" 6
return 2
fi
echo "Server disponibile (HTTP $SERVER_CHECK)"
echo "Trasferimento backup su server remoto via HTTP..."
echo ""
# Upload del file via curl con barra di progresso
RESPONSE=$(curl -X POST "$UPLOAD_URL" -F "file=@$file" -#)
echo ""
if [ $? -ne 0 ]; then
echo "Errore durante il trasferimento del backup"
send_gotify_notification "⚠️ [ $DOMAIN ] Backup Parziale" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato ma trasferimento remoto fallito" 6
return 1
fi
# Verifica la risposta
if echo "$RESPONSE" | grep -q '"status":"ok"'; then
echo "Backup trasferito con successo"
echo "Risposta server: $RESPONSE"
return 0
else
echo "Errore: Risposta server non valida"
echo "Risposta: $RESPONSE"
send_gotify_notification "⚠️ [ $DOMAIN ] Backup Parziale" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato ma upload fallito" 6
return 1
fi
}
# Configurazione
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
DATE_FORMAT=$(date +"%d/%m/%Y")
BACKUP_DIR="$SCRIPT_DIR/backup_${DOMAIN}_$TIMESTAMP"
SITE_DIR="/home/${USER}/htdocs/${DOMAIN}"
DB_DUMP_FILE="$BACKUP_DIR/database_$TIMESTAMP.sql"
ZIP_FILE="$SCRIPT_DIR/backup_${DOMAIN}_$TIMESTAMP.zip"
# Crea directory di backup temporanea
echo "Creazione directory di backup..."
mkdir -p "$BACKUP_DIR"
# Esegui dump del database
echo "Esecuzione dump del database $DB_NAME per il dominio $DOMAIN..."
mysqldump --no-tablespaces -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$DB_DUMP_FILE"
if [ $? -ne 0 ]; then
echo "Errore durante il dump del database"
send_gotify_notification "❌ [ $DOMAIN ] Backup Fallito" "Data: $DATE_FORMAT\nErrore durante il dump del database $DB_NAME per $DOMAIN" 8
rm -rf "$BACKUP_DIR"
exit 1
fi
echo "Dump del database completato: $DB_DUMP_FILE"
# Verifica che la cartella del sito esista
if [ ! -d "$SITE_DIR" ]; then
echo "Attenzione: La cartella $SITE_DIR non esiste"
echo "Continuando solo con il backup del database..."
else
# Copia la cartella del sito
echo "Copia della cartella del sito..."
cp -r "$SITE_DIR" "$BACKUP_DIR/htdocs"
if [ $? -ne 0 ]; then
echo "Errore durante la copia della cartella del sito"
send_gotify_notification "❌ [ $DOMAIN ] Backup Fallito" "Data: $DATE_FORMAT\nErrore durante la copia della cartella $SITE_DIR" 8
rm -rf "$BACKUP_DIR"
exit 1
fi
echo "Cartella del sito copiata con successo"
fi
# Crea archivio zip
echo "Creazione archivio zip..."
cd "$SCRIPT_DIR"
zip -r "$ZIP_FILE" "backup_${DOMAIN}_$TIMESTAMP"
if [ $? -ne 0 ]; then
echo "Errore durante la creazione dell'archivio zip"
send_gotify_notification "❌ [ $DOMAIN ] Backup Fallito" "Data: $DATE_FORMAT\nErrore durante la creazione dell'archivio zip per $DOMAIN" 8
rm -rf "$BACKUP_DIR"
exit 1
fi
echo "Archivio zip creato: $ZIP_FILE"
# Rimuovi la directory temporanea
echo "Pulizia file temporanei..."
rm -rf "$BACKUP_DIR"
BACKUP_SIZE=$(du -h "$ZIP_FILE" | cut -f1)
echo "=========================================="
echo "Backup Siti"
echo "Data: $(date '+%d-%m-%Y %H:%M:%S')"
echo "=========================================="
echo "" echo ""
echo "=========================================="
echo "Backup completato con successo!"
echo "File: $ZIP_FILE"
echo "Dimensione: $BACKUP_SIZE"
echo "=========================================="
# Trasferisci il backup su server remoto # Scopri automaticamente i siti dai file .secret.*
transfer_to_remote "$ZIP_FILE" TOTAL=0
TRANSFER_STATUS=$? SUCCESS=0
FAILED=0
# Se il trasferimento è riuscito, rimuovi il file locale for SECRET_FILE in "$SCRIPT_DIR"/.secret.*; do
if [ $TRANSFER_STATUS -eq 0 ]; then # Ignora il file example
echo "Rimozione file locale..." [ "$(basename "$SECRET_FILE")" = ".secret.example" ] && continue
rm -f "$ZIP_FILE" [ ! -f "$SECRET_FILE" ] && continue
echo "File zip rimosso dal locale, disponibile solo sul server remoto"
send_gotify_notification "✅ [ $DOMAIN ] Backup Completato" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato con successo\nFile: backup_${DOMAIN}_$TIMESTAMP.zip\nDimensione: $BACKUP_SIZE\nCaricato sul server remoto" 5 # Estrai lo username dal nome del file (.secret.USERNAME)
elif [ $TRANSFER_STATUS -eq 2 ]; then USER=$(basename "$SECRET_FILE" | sed 's/^\.secret\.//')
# Server non disponibile - mantieni solo l'ultima copia locale
echo "Pulizia backup precedenti..." # Leggi il DOMAIN dal file
find "$SCRIPT_DIR" -name "backup_${DOMAIN}_*.zip" -type f ! -name "backup_${DOMAIN}_$TIMESTAMP.zip" -delete DOMAIN=$(grep -m1 '^DOMAIN=' "$SECRET_FILE" | cut -d'=' -f2-)
echo "Mantenuta solo l'ultima copia locale"
else if [ -z "$DOMAIN" ]; then
# Errore durante il trasferimento - mantieni solo l'ultima copia locale echo "⚠️ DOMAIN mancante in $SECRET_FILE, saltato"
echo "Pulizia backup precedenti..." FAILED=$((FAILED + 1))
find "$SCRIPT_DIR" -name "backup_${DOMAIN}_*.zip" -type f ! -name "backup_${DOMAIN}_$TIMESTAMP.zip" -delete TOTAL=$((TOTAL + 1))
send_gotify_notification "⚠️ Backup Parziale" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato localmente\nFile: backup_${DOMAIN}_$TIMESTAMP.zip\nDimensione: $BACKUP_SIZE\nTrasferimento remoto fallito - File mantenuto in locale" 6 echo ""
continue
fi
TOTAL=$((TOTAL + 1))
echo "→ Backup $DOMAIN (utente: $USER)"
"$BACKUP_SCRIPT" "$USER" "$DOMAIN"
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo "❌ ERRORE backup $DOMAIN (exit code $EXIT_CODE)"
FAILED=$((FAILED + 1))
else
echo "✅ Backup completato $DOMAIN"
SUCCESS=$((SUCCESS + 1))
fi
echo ""
done
if [ $TOTAL -eq 0 ]; then
echo "Nessun file .secret.* trovato in $SCRIPT_DIR"
echo "Esegui ./init.sh per configurare un sito"
fi fi
echo "=========================================="
echo "Backup terminato"
echo "Totale: $TOTAL | Riusciti: $SUCCESS | Falliti: $FAILED"
echo "=========================================="

226
core.sh Normal file
View File

@@ -0,0 +1,226 @@
#!/bin/bash
# Script di backup per database MySQL e cartella htdocs
# Le credenziali del database devono essere nel file .secret
# Uso: ./backup.sh user dominio
# Verifica parametri user e dominio
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Errore: Specificare user e dominio come parametri"
echo "Uso: $0 user dominio"
echo "Esempio: $0 utente esempio.com"
exit 1
fi
USER="$1"
DOMAIN="$2"
# Gotify
GOTIFY_URL="https://alert.qwince.com/message"
GOTIFY_TOKEN="ABnq7pJSSPrFRjx"
# Upload HTTP endpoint
UPLOAD_URL="http://192.168.0.10:8080/upload"
# Numero di copie locali da mantenere (0 = elimina dopo upload riuscito)
LOCAL_RETENTION=0
# Ottieni la directory dello script
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SECRET_FILE="$SCRIPT_DIR/.secret.$USER"
# Verifica che il file .secret esista
if [ ! -f "$SECRET_FILE" ]; then
echo "Errore: File .secret non trovato in $SCRIPT_DIR"
echo "Creare il file .secret con le seguenti variabili:"
echo "DB_HOST=localhost"
echo "DB_NAME=nome_database"
echo "DB_USER=utente"
echo "DB_PASS=password"
exit 1
fi
# Carica le credenziali dal file .secret
source "$SECRET_FILE"
# Verifica che le variabili necessarie siano definite
if [ -z "$DB_HOST" ] || [ -z "$DB_NAME" ] || [ -z "$DB_USER" ] || [ -z "$DB_PASS" ]; then
echo "Errore: Una o più variabili mancanti nel file .secret"
echo "Variabili richieste: DB_HOST, DB_NAME, DB_USER, DB_PASS"
exit 1
fi
# Funzione per inviare notifica a Gotify
send_gotify_notification() {
local title="$1"
local message="$2"
local priority="${3:-5}"
if [ -n "$GOTIFY_URL" ] && [ -n "$GOTIFY_TOKEN" ]; then
curl -X POST "$GOTIFY_URL" \
-H "Content-Type: application/json" \
-d "{\"title\":\"$title\",\"message\":\"$message\",\"priority\":$priority}" \
-H "X-Gotify-Key: $GOTIFY_TOKEN" \
-s > /dev/null 2>&1
fi
}
# Funzione per trasferire il backup su server remoto via HTTP
transfer_to_remote() {
local file="$1"
if [ -z "$UPLOAD_URL" ]; then
echo "Attenzione: URL di upload non configurato, trasferimento saltato"
return 0
fi
# Verifica disponibilità del server
echo "Verifica disponibilità server remoto..."
SERVER_CHECK=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 --max-time 10 "$UPLOAD_URL" 2>/dev/null)
if [ $? -ne 0 ] || [ -z "$SERVER_CHECK" ]; then
echo "⚠️ Server remoto non raggiungibile"
send_gotify_notification "⚠️ [ $DOMAIN ] Backup Locale" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato\nServer remoto non disponibile\nFile mantenuto in locale: backup_${DOMAIN}_$TIMESTAMP.zip" 6
return 2
fi
echo "Server disponibile (HTTP $SERVER_CHECK)"
echo "Trasferimento backup su server remoto via HTTP..."
echo ""
# Upload del file via curl con barra di progresso
RESPONSE=$(curl -X POST "$UPLOAD_URL" -F "file=@$file" -#)
echo ""
if [ $? -ne 0 ]; then
echo "Errore durante il trasferimento del backup"
send_gotify_notification "⚠️ [ $DOMAIN ] Backup Parziale" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato ma trasferimento remoto fallito" 6
return 1
fi
# Verifica la risposta
if echo "$RESPONSE" | grep -q '"status":"ok"'; then
echo "Backup trasferito con successo"
echo "Risposta server: $RESPONSE"
return 0
else
echo "Errore: Risposta server non valida"
echo "Risposta: $RESPONSE"
send_gotify_notification "⚠️ [ $DOMAIN ] Backup Parziale" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato ma upload fallito" 6
return 1
fi
}
# Configurazione
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
DATE_FORMAT=$(date +"%d/%m/%Y")
BACKUP_DIR="$SCRIPT_DIR/backup_${DOMAIN}_$TIMESTAMP"
SITE_DIR="/home/${USER}/htdocs/${DOMAIN}"
DB_DUMP_FILE="$BACKUP_DIR/database_$TIMESTAMP.sql"
ZIP_FILE="$SCRIPT_DIR/backup_${DOMAIN}_$TIMESTAMP.zip"
# Crea directory di backup temporanea
echo "Creazione directory di backup..."
mkdir -p "$BACKUP_DIR"
# Esegui dump del database
echo "Esecuzione dump del database $DB_NAME per il dominio $DOMAIN..."
mysqldump --no-tablespaces -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$DB_DUMP_FILE"
if [ $? -ne 0 ]; then
echo "Errore durante il dump del database"
send_gotify_notification "❌ [ $DOMAIN ] Backup Fallito" "Data: $DATE_FORMAT\nErrore durante il dump del database $DB_NAME per $DOMAIN" 8
rm -rf "$BACKUP_DIR"
exit 1
fi
echo "Dump del database completato: $DB_DUMP_FILE"
# Verifica che la cartella del sito esista
if [ ! -d "$SITE_DIR" ]; then
echo "Attenzione: La cartella $SITE_DIR non esiste"
echo "Continuando solo con il backup del database..."
else
# Copia la cartella del sito
echo "Copia della cartella del sito..."
cp -r "$SITE_DIR" "$BACKUP_DIR/htdocs"
if [ $? -ne 0 ]; then
echo "Errore durante la copia della cartella del sito"
send_gotify_notification "❌ [ $DOMAIN ] Backup Fallito" "Data: $DATE_FORMAT\nErrore durante la copia della cartella $SITE_DIR" 8
rm -rf "$BACKUP_DIR"
exit 1
fi
echo "Cartella del sito copiata con successo"
fi
# Crea archivio zip
echo "Creazione archivio zip..."
cd "$SCRIPT_DIR"
zip -r "$ZIP_FILE" "backup_${DOMAIN}_$TIMESTAMP"
if [ $? -ne 0 ]; then
echo "Errore durante la creazione dell'archivio zip"
send_gotify_notification "❌ [ $DOMAIN ] Backup Fallito" "Data: $DATE_FORMAT\nErrore durante la creazione dell'archivio zip per $DOMAIN" 8
rm -rf "$BACKUP_DIR"
exit 1
fi
echo "Archivio zip creato: $ZIP_FILE"
# Rimuovi la directory temporanea
echo "Pulizia file temporanei..."
rm -rf "$BACKUP_DIR"
BACKUP_SIZE=$(du -h "$ZIP_FILE" | cut -f1)
echo ""
echo "=========================================="
echo "Backup completato con successo!"
echo "File: $ZIP_FILE"
echo "Dimensione: $BACKUP_SIZE"
echo "=========================================="
# Funzione per mantenere solo le ultime N copie locali
cleanup_local_backups() {
local keep=$1
if [ "$keep" -le 0 ]; then
# Rimuovi tutti i backup locali di questo dominio
find "$SCRIPT_DIR" -name "backup_${DOMAIN}_*.zip" -type f -delete
else
# Mantieni solo le ultime N copie
local count
count=$(find "$SCRIPT_DIR" -name "backup_${DOMAIN}_*.zip" -type f | wc -l)
if [ "$count" -gt "$keep" ]; then
find "$SCRIPT_DIR" -name "backup_${DOMAIN}_*.zip" -type f | sort | head -n -"$keep" | xargs rm -f
fi
fi
}
# Trasferisci il backup su server remoto
transfer_to_remote "$ZIP_FILE"
TRANSFER_STATUS=$?
# Gestione copie locali in base a LOCAL_RETENTION
if [ $TRANSFER_STATUS -eq 0 ]; then
if [ "$LOCAL_RETENTION" -le 0 ]; then
echo "Rimozione file locale..."
rm -f "$ZIP_FILE"
echo "File zip rimosso dal locale, disponibile solo sul server remoto"
else
echo "Mantenimento ultime $LOCAL_RETENTION copie locali..."
cleanup_local_backups "$LOCAL_RETENTION"
fi
send_gotify_notification "✅ [ $DOMAIN ] Backup Completato" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato con successo\nFile: backup_${DOMAIN}_$TIMESTAMP.zip\nDimensione: $BACKUP_SIZE\nCaricato sul server remoto" 5
elif [ $TRANSFER_STATUS -eq 2 ]; then
# Server non disponibile - mantieni copie locali
echo "Pulizia backup precedenti..."
cleanup_local_backups "$(( LOCAL_RETENTION > 0 ? LOCAL_RETENTION : 1 ))"
echo "Mantenute copie locali (server remoto non disponibile)"
else
# Errore durante il trasferimento - mantieni copie locali
echo "Pulizia backup precedenti..."
cleanup_local_backups "$(( LOCAL_RETENTION > 0 ? LOCAL_RETENTION : 1 ))"
send_gotify_notification "⚠️ Backup Parziale" "Data: $DATE_FORMAT\nBackup di $DOMAIN completato localmente\nFile: backup_${DOMAIN}_$TIMESTAMP.zip\nDimensione: $BACKUP_SIZE\nTrasferimento remoto fallito - File mantenuto in locale" 6
fi

10
init.sh
View File

@@ -15,6 +15,14 @@ if [ -z "$USERNAME" ]; then
exit 1 exit 1
fi fi
# Richiedi dominio
read -p "Inserisci il dominio (es. esempio.com): " DOMAIN
if [ -z "$DOMAIN" ]; then
echo "Errore: Dominio non può essere vuoto"
exit 1
fi
echo "" echo ""
echo "Configurazione database:" echo "Configurazione database:"
echo "------------------------" echo "------------------------"
@@ -67,6 +75,7 @@ fi
cp "$EXAMPLE_FILE" "$SECRET_FILE" cp "$EXAMPLE_FILE" "$SECRET_FILE"
# Sostituisci i valori nel file # Sostituisci i valori nel file
sed -i "s/^DOMAIN=.*/DOMAIN=$DOMAIN/" "$SECRET_FILE"
sed -i "s/^DB_HOST=.*/DB_HOST=$DB_HOST/" "$SECRET_FILE" sed -i "s/^DB_HOST=.*/DB_HOST=$DB_HOST/" "$SECRET_FILE"
sed -i "s/^DB_NAME=.*/DB_NAME=$DB_NAME/" "$SECRET_FILE" sed -i "s/^DB_NAME=.*/DB_NAME=$DB_NAME/" "$SECRET_FILE"
sed -i "s/^DB_USER=.*/DB_USER=$DB_USER/" "$SECRET_FILE" sed -i "s/^DB_USER=.*/DB_USER=$DB_USER/" "$SECRET_FILE"
@@ -78,6 +87,7 @@ echo "File $SECRET_FILE creato con successo!"
echo "==========================================" echo "=========================================="
echo "" echo ""
echo "Configurazione salvata:" echo "Configurazione salvata:"
echo " - Dominio: $DOMAIN"
echo " - Host: $DB_HOST" echo " - Host: $DB_HOST"
echo " - Database: $DB_NAME" echo " - Database: $DB_NAME"
echo " - Utente: $DB_USER" echo " - Utente: $DB_USER"