#!/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 </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"