166 lines
5.3 KiB
Bash
166 lines
5.3 KiB
Bash
#!/bin/bash
|
||
# backup-netgescon.sh - Script backup completo NetGescon
|
||
|
||
set -e
|
||
|
||
# Configurazione
|
||
BACKUP_DIR="/var/backups/netgescon"
|
||
PROJECT_DIR="/var/www/netgescon"
|
||
DB_NAME="netgescon"
|
||
DB_USER="netgescon_user"
|
||
DB_PASS="NetGescon2024!"
|
||
DATE=$(date +%Y%m%d_%H%M%S)
|
||
RETENTION_DAYS=7
|
||
|
||
# Colori per output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||
log_step() { echo -e "${BLUE}[STEP]${NC} $1"; }
|
||
|
||
echo "💾 NetGescon Backup Script"
|
||
echo "=========================="
|
||
echo "Data: $(date)"
|
||
echo "Backup ID: $DATE"
|
||
echo ""
|
||
|
||
# Verifica privilegi
|
||
if [[ $EUID -eq 0 ]]; then
|
||
log_warn "Eseguito come root - OK per backup completo"
|
||
else
|
||
log_info "Eseguito come utente normale"
|
||
fi
|
||
|
||
log_step "1/6 Creazione directory backup..."
|
||
sudo mkdir -p $BACKUP_DIR
|
||
log_info "Directory backup: $BACKUP_DIR"
|
||
|
||
log_step "2/6 Backup database MySQL..."
|
||
if mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/netgescon_db_$DATE.sql 2>/dev/null; then
|
||
DB_SIZE=$(du -h $BACKUP_DIR/netgescon_db_$DATE.sql | cut -f1)
|
||
log_info "Database backup completato: $DB_SIZE"
|
||
else
|
||
log_error "Errore nel backup database"
|
||
exit 1
|
||
fi
|
||
|
||
log_step "3/6 Backup file applicazione..."
|
||
if sudo tar -czf $BACKUP_DIR/netgescon_files_$DATE.tar.gz -C $PROJECT_DIR . 2>/dev/null; then
|
||
FILES_SIZE=$(du -h $BACKUP_DIR/netgescon_files_$DATE.tar.gz | cut -f1)
|
||
log_info "File backup completato: $FILES_SIZE"
|
||
else
|
||
log_error "Errore nel backup file"
|
||
exit 1
|
||
fi
|
||
|
||
log_step "4/6 Backup configurazioni sistema..."
|
||
sudo tar -czf $BACKUP_DIR/netgescon_config_$DATE.tar.gz \
|
||
/etc/nginx/sites-available/netgescon \
|
||
/etc/php/8.2/fpm/pool.d/www.conf \
|
||
/etc/mysql/mysql.conf.d/mysqld.cnf \
|
||
~/netgescon-setup-info.txt 2>/dev/null || true
|
||
|
||
CONFIG_SIZE=$(du -h $BACKUP_DIR/netgescon_config_$DATE.tar.gz | cut -f1)
|
||
log_info "Configurazioni backup completate: $CONFIG_SIZE"
|
||
|
||
log_step "5/6 Creazione manifest backup..."
|
||
cat > $BACKUP_DIR/netgescon_manifest_$DATE.txt <<EOF
|
||
NetGescon Backup Manifest
|
||
========================
|
||
|
||
Backup ID: $DATE
|
||
Data: $(date)
|
||
Sistema: $(lsb_release -d | cut -f2)
|
||
Hostname: $(hostname)
|
||
IP: $(hostname -I | awk '{print $1}')
|
||
|
||
File inclusi:
|
||
- Database: netgescon_db_$DATE.sql ($DB_SIZE)
|
||
- Applicazione: netgescon_files_$DATE.tar.gz ($FILES_SIZE)
|
||
- Configurazioni: netgescon_config_$DATE.tar.gz ($CONFIG_SIZE)
|
||
|
||
Directory sorgente: $PROJECT_DIR
|
||
Database: $DB_NAME
|
||
Utente DB: $DB_USER
|
||
|
||
Versioni:
|
||
- Laravel: $(cd $PROJECT_DIR/netgescon-laravel && php artisan --version 2>/dev/null || echo "N/A")
|
||
- PHP: $(php -v | head -1)
|
||
- MySQL: $(mysql --version)
|
||
- Nginx: $(nginx -v 2>&1)
|
||
|
||
Note:
|
||
Per ripristinare:
|
||
1. Estrarre netgescon_files_$DATE.tar.gz in $PROJECT_DIR
|
||
2. Importare netgescon_db_$DATE.sql in MySQL
|
||
3. Ripristinare configurazioni da netgescon_config_$DATE.tar.gz
|
||
4. Riavviare servizi: nginx, php8.2-fpm, mysql
|
||
|
||
Creato da: $(whoami)@$(hostname)
|
||
EOF
|
||
|
||
log_info "Manifest creato: netgescon_manifest_$DATE.txt"
|
||
|
||
log_step "6/6 Pulizia backup vecchi (>$RETENTION_DAYS giorni)..."
|
||
DELETED_COUNT=0
|
||
|
||
# Rimozione file vecchi
|
||
for pattern in "netgescon_db_*.sql" "netgescon_files_*.tar.gz" "netgescon_config_*.tar.gz" "netgescon_manifest_*.txt"; do
|
||
DELETED=$(find $BACKUP_DIR -name "$pattern" -mtime +$RETENTION_DAYS -delete -print | wc -l)
|
||
DELETED_COUNT=$((DELETED_COUNT + DELETED))
|
||
done
|
||
|
||
if [ $DELETED_COUNT -gt 0 ]; then
|
||
log_info "Rimossi $DELETED_COUNT file backup vecchi"
|
||
else
|
||
log_info "Nessun file backup vecchio da rimuovere"
|
||
fi
|
||
|
||
# Calcolo dimensione totale backup
|
||
TOTAL_SIZE=$(du -sh $BACKUP_DIR | cut -f1)
|
||
|
||
echo ""
|
||
echo "═══════════════════════════════════════════════════════"
|
||
echo "✅ BACKUP COMPLETATO!"
|
||
echo "═══════════════════════════════════════════════════════"
|
||
echo ""
|
||
echo "📁 DIRECTORY BACKUP: $BACKUP_DIR"
|
||
echo "📦 DIMENSIONE TOTALE: $TOTAL_SIZE"
|
||
echo "🗓️ ID BACKUP: $DATE"
|
||
echo ""
|
||
echo "📄 FILE CREATI:"
|
||
echo " - netgescon_db_$DATE.sql ($DB_SIZE)"
|
||
echo " - netgescon_files_$DATE.tar.gz ($FILES_SIZE)"
|
||
echo " - netgescon_config_$DATE.tar.gz ($CONFIG_SIZE)"
|
||
echo " - netgescon_manifest_$DATE.txt"
|
||
echo ""
|
||
echo "🧹 FILE RIMOSSI: $DELETED_COUNT (>$RETENTION_DAYS giorni)"
|
||
echo ""
|
||
echo "═══════════════════════════════════════════════════════"
|
||
echo ""
|
||
echo "🔄 RIPRISTINO BACKUP:"
|
||
echo ""
|
||
echo "1️⃣ DATABASE:"
|
||
echo " mysql -u $DB_USER -p $DB_NAME < $BACKUP_DIR/netgescon_db_$DATE.sql"
|
||
echo ""
|
||
echo "2️⃣ FILE APPLICAZIONE:"
|
||
echo " cd $PROJECT_DIR && sudo tar -xzf $BACKUP_DIR/netgescon_files_$DATE.tar.gz"
|
||
echo ""
|
||
echo "3️⃣ CONFIGURAZIONI:"
|
||
echo " sudo tar -xzf $BACKUP_DIR/netgescon_config_$DATE.tar.gz -C /"
|
||
echo ""
|
||
echo "4️⃣ RIAVVIO SERVIZI:"
|
||
echo " sudo systemctl restart nginx php8.2-fpm mysql"
|
||
echo ""
|
||
|
||
# Log backup nel file di sistema
|
||
echo "$(date): Backup NetGescon completato - ID: $DATE" >> /var/log/netgescon-backup.log
|
||
|
||
log_info "Backup registrato in: /var/log/netgescon-backup.log"
|