netgescon-master/netgescon-scripts/netgescon-sync.sh
Pikappa2 480e7eafbd 🎯 NETGESCON - Setup iniziale repository completo
📋 Commit iniziale con:
-  Documentazione unificata in docs/
-  Codice Laravel in netgescon-laravel/
-  Script automazione in scripts/
-  Configurazione sync rsync
-  Struttura organizzata e pulita

🔄 Versione: 2025.07.19-1644
🎯 Sistema pronto per Git distribuito
2025-07-19 16:44:47 +02:00

231 lines
5.9 KiB
Bash

#!/bin/bash
# =============================================================================
# Script di Sincronizzazione NetGescon - Windows WSL → Linux Remote
# =============================================================================
# Descrizione: Sincronizza files, migrations e updates tra macchina locale e remota
# Autore: Sistema NetGescon
# Data: $(date +%Y-%m-%d)
# =============================================================================
# Configurazione
LOCAL_PROJECT_PATH="/mnt/u/home/michele/netgescon/netgescon-laravel"
REMOTE_HOST="192.168.0.43"
REMOTE_USER="michele"
REMOTE_PATH="/var/www/netgescon"
LOG_FILE="/tmp/netgescon_sync_$(date +%Y%m%d_%H%M%S).log"
# Colori per output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Logging function
log() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1" | tee -a "$LOG_FILE"
}
error() {
echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"
}
warning() {
echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE"
}
info() {
echo -e "${BLUE}[INFO]${NC} $1" | tee -a "$LOG_FILE"
}
# Verifica connessione SSH
check_ssh_connection() {
info "Verifico connessione SSH a $REMOTE_HOST..."
if ssh -o ConnectTimeout=5 -o BatchMode=yes "$REMOTE_USER@$REMOTE_HOST" exit 2>/dev/null; then
log "✅ Connessione SSH OK"
return 0
else
error "❌ Connessione SSH fallita"
return 1
fi
}
# Backup remoto
create_remote_backup() {
info "Creo backup remoto..."
ssh "$REMOTE_USER@$REMOTE_HOST" "
cd $REMOTE_PATH
tar -czf /tmp/netgescon_backup_$(date +%Y%m%d_%H%M%S).tar.gz \
database/migrations/ \
database/seeders/ \
app/ \
config/ \
.env
"
log "✅ Backup remoto creato"
}
# Sincronizza migrations
sync_migrations() {
info "Sincronizzando migrations..."
rsync -avz --delete \
"$LOCAL_PROJECT_PATH/database/migrations/" \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/database/migrations/"
if [ $? -eq 0 ]; then
log "✅ Migrations sincronizzate"
return 0
else
error "❌ Errore sincronizzazione migrations"
return 1
fi
}
# Sincronizza seeders
sync_seeders() {
info "Sincronizzando seeders..."
rsync -avz --delete \
"$LOCAL_PROJECT_PATH/database/seeders/" \
"$REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH/database/seeders/"
if [ $? -eq 0 ]; then
log "✅ Seeders sincronizzati"
return 0
else
error "❌ Errore sincronizzazione seeders"
return 1
fi
}
# Esegui migrations remote
run_remote_migrations() {
info "Eseguo migrations remote..."
ssh "$REMOTE_USER@$REMOTE_HOST" "
cd $REMOTE_PATH
php artisan migrate --force
"
if [ $? -eq 0 ]; then
log "✅ Migrations remote eseguite"
return 0
else
error "❌ Errore esecuzione migrations remote"
return 1
fi
}
# Esegui seeding remoto
run_remote_seeding() {
info "Eseguo seeding remoto..."
ssh "$REMOTE_USER@$REMOTE_HOST" "
cd $REMOTE_PATH
php artisan db:seed --force
"
if [ $? -eq 0 ]; then
log "✅ Seeding remoto eseguito"
return 0
else
warning "⚠️ Seeding remoto con errori (potrebbero essere normali)"
return 0
fi
}
# Restart services
restart_remote_services() {
info "Riavvio servizi remoti..."
ssh "$REMOTE_USER@$REMOTE_HOST" "
sudo systemctl restart nginx
sudo systemctl restart php8.2-fpm
"
log "✅ Servizi riavviati"
}
# Menu principale
show_menu() {
echo -e "\n${BLUE}=== NetGescon Sync Tool ===${NC}"
echo "1. Sincronizza solo migrations"
echo "2. Sincronizza migrations + seeders"
echo "3. Sincronizza + esegui migrations"
echo "4. Sincronizza + esegui migrations + seeding"
echo "5. Full sync + restart services"
echo "6. Solo backup remoto"
echo "7. Verifica connessione"
echo "0. Esci"
echo -n "Scegli un'opzione: "
}
# Main script
main() {
log "🚀 Avvio NetGescon Sync Tool"
while true; do
show_menu
read -r choice
case $choice in
1)
if check_ssh_connection; then
create_remote_backup
sync_migrations
fi
;;
2)
if check_ssh_connection; then
create_remote_backup
sync_migrations
sync_seeders
fi
;;
3)
if check_ssh_connection; then
create_remote_backup
sync_migrations
run_remote_migrations
fi
;;
4)
if check_ssh_connection; then
create_remote_backup
sync_migrations
sync_seeders
run_remote_migrations
run_remote_seeding
fi
;;
5)
if check_ssh_connection; then
create_remote_backup
sync_migrations
sync_seeders
run_remote_migrations
run_remote_seeding
restart_remote_services
fi
;;
6)
if check_ssh_connection; then
create_remote_backup
fi
;;
7)
check_ssh_connection
;;
0)
log "👋 Arrivederci!"
exit 0
;;
*)
error "Opzione non valida"
;;
esac
echo -e "\n${YELLOW}Premi ENTER per continuare...${NC}"
read -r
done
}
# Esegui main
main "$@"