netgescon-master/scripts/backup-netgescon.sh

166 lines
5.3 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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