#!/bin/bash # ๐Ÿš€ NETGESCON - MIGRAZIONE COMPLETA A VM MASTER # Creato: 19/07/2025 - Migrazione da Windows WSL a VM Linux set -e echo "๐Ÿš€ === NETGESCON - MIGRAZIONE COMPLETA A VM MASTER ===" echo "๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S')" echo "" # === CONFIGURAZIONI === SOURCE_PATH="/home/michele/netgescon" TARGET_SERVER="192.168.0.200" TARGET_USER="michele" TARGET_PATH="/home/michele/netgescon" SSH_TARGET="$TARGET_USER@$TARGET_SERVER" echo "๐Ÿ“‹ Configurazione migrazione:" echo " Origine: $SOURCE_PATH (Windows WSL)" echo " Destinazione: $SSH_TARGET:$TARGET_PATH" echo " Server Master: $TARGET_SERVER" echo "" # === STEP 1: VERIFICA CONNESSIONE === echo "๐Ÿ” STEP 1: Verifica connessione e sistema target..." if ! ssh -o ConnectTimeout=10 "$SSH_TARGET" "echo 'Connessione OK'" >/dev/null 2>&1; then echo "โŒ Impossibile connettersi a $SSH_TARGET" echo " Verifica: rete, SSH, credenziali" exit 1 fi echo " โœ… Connessione SSH OK" # Verifica sistema target ssh "$SSH_TARGET" << 'EOF' echo "๐Ÿ“‹ Informazioni sistema target:" echo " OS: $(lsb_release -d 2>/dev/null | cut -f2 || echo 'Linux')" echo " Kernel: $(uname -r)" echo " Spazio: $(df -h / | tail -1 | awk '{print $4}') disponibili" echo " RAM: $(free -h | grep Mem | awk '{print $7}') libera" EOF # === STEP 2: PREPARAZIONE AMBIENTE TARGET === echo "" echo "๐Ÿ”ง STEP 2: Preparazione ambiente su VM target..." ssh "$SSH_TARGET" << 'EOF' # Aggiorna sistema sudo apt update # Installa strumenti essenziali sudo apt install -y git curl wget rsync build-essential # Installa stack LAMP base sudo apt install -y apache2 mysql-server php8.1 php8.1-mysql php8.1-xml php8.1-mbstring php8.1-zip php8.1-gd php8.1-curl php8.1-cli # Installa Composer if ! command -v composer &> /dev/null; then curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer fi # Installa Node.js e npm if ! command -v node &> /dev/null; then curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs fi # Crea directory di lavoro mkdir -p /home/michele/netgescon mkdir -p /var/www/netgescon mkdir -p /var/git echo "โœ… Ambiente target preparato" EOF echo " โœ… Ambiente VM preparato" # === STEP 3: TRASFERIMENTO COMPLETO === echo "" echo "๐Ÿ“ฆ STEP 3: Trasferimento completo progetto..." # Prima sincronizzazione completa echo " ๐Ÿ”„ Sincronizzazione rsync completa..." rsync -avz --progress \ --exclude='.git/objects' \ --exclude='*.tmp' \ --exclude='__pycache__' \ --exclude='venv' \ --exclude='node_modules' \ --exclude='.env' \ --exclude='storage/logs/*.log' \ "$SOURCE_PATH/" \ "$SSH_TARGET:$TARGET_PATH/" echo " โœ… Trasferimento file completato" # === STEP 4: SETUP GIT SU TARGET === echo "" echo "๐Ÿ”ง STEP 4: Setup Git su VM target..." ssh "$SSH_TARGET" << 'EOF' cd /home/michele/netgescon # Configura Git git config --global user.name "NetGescon Master VM" git config --global user.email "master@netgescon.local" git config --global init.defaultBranch master # Re-inizializza repository se necessario if [ ! -d ".git" ]; then git init git add . git commit -m "๐Ÿš€ NETGESCON - Migrazione completa su VM Master ๐Ÿ“‹ Migrazione da Windows WSL a VM Linux ๐Ÿ”„ Repository ricreato su server master ๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S') ๐ŸŽฏ Sistema pronto per sviluppo Linux nativo" else # Se esiste giร , aggiungi eventuali nuovi file git add . if [ -n "$(git status --porcelain)" ]; then git commit -m "๐Ÿ”„ Sync da Windows WSL $(date '+%Y-%m-%d %H:%M:%S')" fi fi echo "โœ… Git configurato su VM target" EOF # === STEP 5: SETUP SERVER GIT GITEA === echo "" echo "๐Ÿข STEP 5: Setup server Git (Gitea) su VM..." # Trasferisce e esegue script setup Gitea scp "$SOURCE_PATH/docs/03-scripts-automazione/setup-git-server-master.sh" "$SSH_TARGET:/tmp/" ssh "$SSH_TARGET" << 'EOF' chmod +x /tmp/setup-git-server-master.sh # Esegue setup Gitea (richiede sudo) echo "๐Ÿ”ง Installazione Gitea server..." sudo /tmp/setup-git-server-master.sh echo "โœ… Server Git configurato" EOF # === STEP 6: CONFIGURAZIONE LARAVEL === echo "" echo "๐Ÿ”ง STEP 6: Configurazione Laravel su VM..." ssh "$SSH_TARGET" << 'EOF' cd /home/michele/netgescon/netgescon-laravel # Installa dipendenze Composer if [ -f "composer.json" ]; then composer install --no-dev --optimize-autoloader fi # Copia e configura .env if [ ! -f ".env" ] && [ -f ".env.example" ]; then cp .env.example .env php artisan key:generate fi # Configura permessi sudo chown -R www-data:www-data storage bootstrap/cache sudo chmod -R 775 storage bootstrap/cache echo "โœ… Laravel configurato" EOF # === STEP 7: CONFIGURAZIONE APACHE === echo "" echo "๐ŸŒ STEP 7: Configurazione Apache per NetGescon..." ssh "$SSH_TARGET" << 'EOF' # Configurazione VirtualHost Apache sudo tee /etc/apache2/sites-available/netgescon.conf > /dev/null << 'APACHE_CONF' ServerName netgescon.local DocumentRoot /home/michele/netgescon/netgescon-laravel/public AllowOverride All Require all granted ErrorLog ${APACHE_LOG_DIR}/netgescon_error.log CustomLog ${APACHE_LOG_DIR}/netgescon_access.log combined APACHE_CONF # Abilita sito e moduli sudo a2enmod rewrite sudo a2ensite netgescon sudo systemctl reload apache2 echo "โœ… Apache configurato" EOF # === STEP 8: TEST FINALE === echo "" echo "๐Ÿงช STEP 8: Test configurazione finale..." ssh "$SSH_TARGET" << 'EOF' cd /home/michele/netgescon echo "๐Ÿ“Š === RIEPILOGO CONFIGURAZIONE VM ===" echo "โœ… Sistema: $(lsb_release -d 2>/dev/null | cut -f2 || echo 'Linux')" echo "โœ… Git: $(git --version)" echo "โœ… PHP: $(php --version | head -1)" echo "โœ… Composer: $(composer --version | head -1)" echo "โœ… Node.js: $(node --version)" echo "โœ… Apache: $(apache2 -v | head -1)" echo "" echo "๐Ÿ“ Struttura progetto:" ls -la /home/michele/netgescon/ echo "" echo "๐Ÿ”„ Status Git:" git status --short echo "" echo "๐ŸŒ Servizi attivi:" sudo systemctl is-active apache2 mysql gitea-docker-compose --no-pager EOF # === RIEPILOGO FINALE === echo "" echo "๐Ÿ“Š === RIEPILOGO MIGRAZIONE COMPLETA ===" echo "โœ… VM target preparata e configurata" echo "โœ… Progetto NetGescon trasferito completamente" echo "โœ… Git repository configurato su VM" echo "โœ… Server Git (Gitea) installato" echo "โœ… Stack LAMP configurato" echo "โœ… Laravel pronto per sviluppo" echo "" echo "๐ŸŒ Accesso VM:" echo " SSH: ssh $SSH_TARGET" echo " Web: http://$TARGET_SERVER (NetGescon)" echo " Git: http://$TARGET_SERVER:3000 (Gitea)" echo "" echo "๐Ÿ“‹ Prossimi passi:" echo "1. ๐ŸŒ Configurare DNS/hosts per netgescon.local" echo "2. ๐Ÿ”ง Completare setup Gitea via web" echo "3. ๐Ÿš€ Creare primo repository in Gitea" echo "4. ๐Ÿ”„ Push del codice dal VM al Gitea locale" echo "" echo "๐ŸŽฏ Migrazione completata con successo!" echo "๐Ÿ“… $(date '+%Y-%m-%d %H:%M:%S')"