netgescon-day0/prevent-data-loss.sh

253 lines
7.2 KiB
Bash
Executable File

#!/bin/bash
# Script di Prevenzione Perdita Modifiche NetGescon
# Uso: ./prevent-data-loss.sh
echo "🛡️ NETGESCON - Sistema Prevenzione Perdita Dati"
echo "=============================================="
# Configurazione
PROJECT_ROOT="/var/www/netgescon"
BACKUP_ROOT="/var/www/netgescon/SAFE_BACKUPS"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="$BACKUP_ROOT/auto_backup_$TIMESTAMP"
# Crea directory backup se non esiste
mkdir -p "$BACKUP_DIR"
echo "📁 Backup Directory: $BACKUP_DIR"
# 1. BACKUP VIEWS CRITICHE
echo ""
echo "🔒 1. BACKUP VIEWS CRITICHE"
echo "=============================="
CRITICAL_VIEWS=(
"resources/views/admin/layouts/netgescon.blade.php"
"resources/views/components/menu/sidebar-netgescon.blade.php"
"resources/views/admin/stabili/show.blade.php"
"resources/views/admin/stabili/tabs/palazzine.blade.php"
"resources/views/admin/stabili/tabs/tabelle-millesimali.blade.php"
"resources/views/admin/stabili/tabs/gestioni.blade.php"
"resources/views/admin/soggetti/show.blade.php"
"resources/views/admin/rubrica/index.blade.php"
)
for view in "${CRITICAL_VIEWS[@]}"; do
if [ -f "$PROJECT_ROOT/$view" ]; then
mkdir -p "$BACKUP_DIR/$(dirname "$view")"
cp "$PROJECT_ROOT/$view" "$BACKUP_DIR/$view"
echo "$view"
else
echo "❌ MANCANTE: $view"
fi
done
# 2. BACKUP CONTROLLERS CRITICI
echo ""
echo "🎮 2. BACKUP CONTROLLERS CRITICI"
echo "=================================="
CRITICAL_CONTROLLERS=(
"app/Http/Controllers/Admin/StabileController.php"
"app/Http/Controllers/Admin/RubricaController.php"
"app/Http/Controllers/Admin/SoggettoController.php"
"app/Http/Controllers/Admin/CategoryDashboardController.php"
)
for controller in "${CRITICAL_CONTROLLERS[@]}"; do
if [ -f "$PROJECT_ROOT/$controller" ]; then
mkdir -p "$BACKUP_DIR/$(dirname "$controller")"
cp "$PROJECT_ROOT/$controller" "$BACKUP_DIR/$controller"
echo "$controller"
else
echo "❌ MANCANTE: $controller"
fi
done
# 3. BACKUP MODELS CRITICI
echo ""
echo "🏗️ 3. BACKUP MODELS CRITICI"
echo "============================"
CRITICAL_MODELS=(
"app/Models/Soggetto.php"
"app/Models/UnitaImmobiliare.php"
"app/Models/Proprieta.php"
"app/Models/Stabile.php"
)
for model in "${CRITICAL_MODELS[@]}"; do
if [ -f "$PROJECT_ROOT/$model" ]; then
mkdir -p "$BACKUP_DIR/$(dirname "$model")"
cp "$PROJECT_ROOT/$model" "$BACKUP_DIR/$model"
echo "$model"
else
echo "❌ MANCANTE: $model"
fi
done
# 4. BACKUP CONFIGURAZIONI
echo ""
echo "⚙️ 4. BACKUP CONFIGURAZIONI"
echo "============================"
CONFIG_FILES=(
".env"
"routes/web.php"
"routes/admin.php"
"config/app.php"
"tailwind.config.js"
"package.json"
)
for config in "${CONFIG_FILES[@]}"; do
if [ -f "$PROJECT_ROOT/$config" ]; then
mkdir -p "$BACKUP_DIR/$(dirname "$config")"
cp "$PROJECT_ROOT/$config" "$BACKUP_DIR/$config"
echo "$config"
else
echo "❌ MANCANTE: $config"
fi
done
# 5. CREA SCRIPT DI RIPRISTINO
echo ""
echo "🔄 5. CREAZIONE SCRIPT RIPRISTINO"
echo "=================================="
cat > "$BACKUP_DIR/RESTORE.sh" << 'EOF'
#!/bin/bash
# Script di Ripristino Automatico NetGescon
echo "🔄 RIPRISTINO BACKUP NETGESCON"
echo "=============================="
BACKUP_SOURCE=$(dirname "$0")
PROJECT_ROOT="/var/www/netgescon"
echo "📂 Ripristino da: $BACKUP_SOURCE"
echo "📁 Destinazione: $PROJECT_ROOT"
# Conferma dall'utente
read -p "⚠️ ATTENZIONE: Questo sovrascriverà i file esistenti. Continuare? (s/N): " confirm
if [[ ! $confirm =~ ^[Ss]$ ]]; then
echo "❌ Ripristino annullato"
exit 0
fi
# Backup dello stato attuale prima del ripristino
CURRENT_BACKUP="$PROJECT_ROOT/_BACKUP_BEFORE_RESTORE_$(date +%Y%m%d_%H%M%S)"
mkdir -p "$CURRENT_BACKUP"
echo "📦 Backup stato attuale in: $CURRENT_BACKUP"
# Copia tutto il backup nella destinazione
echo "🔄 Ripristino in corso..."
cp -r "$BACKUP_SOURCE"/* "$PROJECT_ROOT"/ 2>/dev/null || echo "⚠️ Alcuni file potrebbero non essere stati copiati"
# Pulisci cache Laravel
cd "$PROJECT_ROOT"
php artisan cache:clear
php artisan view:clear
php artisan config:clear
echo "✅ RIPRISTINO COMPLETATO!"
echo "🔍 Verifica il funzionamento del sistema"
EOF
chmod +x "$BACKUP_DIR/RESTORE.sh"
echo "✅ Script ripristino creato: $BACKUP_DIR/RESTORE.sh"
# 6. CREA DOCUMENTAZIONE BACKUP
echo ""
echo "📋 6. DOCUMENTAZIONE BACKUP"
echo "============================"
cat > "$BACKUP_DIR/README.md" << EOF
# BACKUP NETGESCON - $TIMESTAMP
## 📅 Informazioni Backup
- **Data/Ora**: $(date)
- **Sistema**: $(uname -a)
- **Directory Source**: $PROJECT_ROOT
- **Directory Backup**: $BACKUP_DIR
## 🗂️ Contenuto Backup
### Views Critiche
$(for view in "${CRITICAL_VIEWS[@]}"; do echo "- $view"; done)
### Controllers Critici
$(for controller in "${CRITICAL_CONTROLLERS[@]}"; do echo "- $controller"; done)
### Models Critici
$(for model in "${CRITICAL_MODELS[@]}"; do echo "- $model"; done)
### Configurazioni
$(for config in "${CONFIG_FILES[@]}"; do echo "- $config"; done)
## 🔄 Come Ripristinare
\`\`\`bash
cd $BACKUP_DIR
./RESTORE.sh
\`\`\`
## ⚠️ Note Importanti
1. Questo backup include solo i file critici modificati
2. Prima di ripristinare, verifica la compatibilità
3. Il ripristino sovrascriverà i file esistenti
4. Viene creato un backup dello stato corrente prima del ripristino
## 🛡️ File Critici Monitorati
- Layout Two-Column Palazzine (SX Stabili, DX Appartamenti)
- Layout Two-Column Tabelle Millesimali (SX Tabelle, DX Voci)
- Tab Gestioni negli Stabili
- Rubrica nel Sidebar
- Header con info Condominio
- Models con relazioni corrette
- Views per collegamento Soggetti
## 🚀 Stato Sistema al Backup
- Laravel Cache: Pulita
- Views Cache: Pulita
- Asset URL: Configurato per rete (192.168.0.200)
- Database Relations: Corrette (senza colonne inesistenti)
- Two-Column Layouts: Attivi e funzionanti
EOF
echo "✅ Documentazione creata: $BACKUP_DIR/README.md"
# 7. RIEPILOGO FINALE
echo ""
echo "🎯 RIEPILOGO BACKUP"
echo "==================="
echo "📁 Backup salvato in: $BACKUP_DIR"
echo "📄 File backup creati: $(find "$BACKUP_DIR" -type f | wc -l)"
echo "💾 Dimensione backup: $(du -sh "$BACKUP_DIR" | cut -f1)"
echo ""
echo "🔧 COMANDI UTILI:"
echo "Ripristino: cd $BACKUP_DIR && ./RESTORE.sh"
echo "Verifica: ls -la $BACKUP_DIR"
echo "Documentazione: cat $BACKUP_DIR/README.md"
echo ""
echo "✅ BACKUP COMPLETATO CON SUCCESSO!"
# 8. PULIZIA BACKUP VECCHI (conserva ultimi 10)
echo ""
echo "🧹 PULIZIA BACKUP VECCHI"
echo "========================"
BACKUP_COUNT=$(ls -1 "$BACKUP_ROOT" | grep "auto_backup_" | wc -l)
if [ "$BACKUP_COUNT" -gt 10 ]; then
echo "🗑️ Rimozione backup più vecchi (mantengo ultimi 10)..."
ls -1t "$BACKUP_ROOT" | grep "auto_backup_" | tail -n +11 | while read old_backup; do
rm -rf "$BACKUP_ROOT/$old_backup"
echo "❌ Rimosso: $old_backup"
done
else
echo "📦 Backup count: $BACKUP_COUNT/10 (nessuna pulizia necessaria)"
fi
echo ""
echo "🛡️ Sistema di prevenzione perdita dati attivo!"
echo "💡 Esegui questo script prima di modifiche importanti"