# GUIDA COMPLETA MIGRAZIONE NETGESCON SU LINUX ## FASE 1: PREPARAZIONE AMBIENTE LINUX ### 1.1 Download Ubuntu Server 22.04 LTS ```bash # Scaricare da: https://ubuntu.com/download/server # File: ubuntu-22.04.3-live-server-amd64.iso ``` ### 1.2 Creazione VM (VirtualBox) ```bash # Impostazioni VM consigliate: - Nome: NetGescon-Ubuntu - Tipo: Linux - Versione: Ubuntu (64-bit) - RAM: 4096 MB (minimo) / 8192 MB (consigliato) - Storage: 80 GB dinamico VDI - Network: Bridge Adapter (o NAT con port forwarding) - CPU: 2-4 core ``` ### 1.3 Installazione Ubuntu Server ```bash # Durante l'installazione: 1. Lingua: English (per compatibilità) 2. Layout tastiera: Italian 3. Network: Configurazione automatica DHCP 4. Storage: Use entire disk (guided) 5. Profile setup: - Nome server: netgescon-server - Username: netgescon - Password: [sicura] 6. SSH: Installa OpenSSH server ✓ 7. Snap packages: Nessuno per ora ``` ## FASE 2: CONFIGURAZIONE AMBIENTE SVILUPPO ### 2.1 Aggiornamento sistema ```bash sudo apt update && sudo apt upgrade -y sudo reboot ``` ### 2.2 Installazione pacchetti base ```bash # Pacchetti essenziali sudo apt install -y curl wget git unzip vim htop tree # Utilità di rete sudo apt install -y net-tools openssh-server ufw # Configurazione firewall sudo ufw enable sudo ufw allow ssh sudo ufw allow 80 sudo ufw allow 443 sudo ufw allow 8000 ``` ### 2.3 Installazione PHP 8.2 ```bash # Repository PHP sudo apt install -y software-properties-common sudo add-apt-repository ppa:ondrej/php -y sudo apt update # PHP 8.2 e estensioni Laravel sudo apt install -y php8.2 php8.2-fpm php8.2-cli php8.2-common php8.2-mysql \ php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml php8.2-bcmath \ php8.2-intl php8.2-sqlite3 php8.2-redis php8.2-imagick # Verifica installazione php -v ``` ### 2.4 Installazione Composer ```bash # Download e installazione Composer cd /tmp curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer # Verifica composer --version ``` ### 2.5 Installazione Node.js (per asset frontend) ```bash # NodeJS via NodeSource curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs # Verifica node --version npm --version ``` ### 2.6 Installazione Database MySQL ```bash # Installazione MySQL Server sudo apt install -y mysql-server # Configurazione sicura sudo mysql_secure_installation # Risposte consigliate: # - Remove anonymous users: Y # - Disallow root login remotely: Y # - Remove test database: Y # - Reload privilege tables: Y # Configurazione utente database sudo mysql -u root -p ``` ```sql -- Creazione database e utente per NetGescon CREATE DATABASE netgescon CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'netgescon_user'@'localhost' IDENTIFIED BY 'NetGescon2024!'; GRANT ALL PRIVILEGES ON netgescon.* TO 'netgescon_user'@'localhost'; FLUSH PRIVILEGES; EXIT; ``` ### 2.7 Installazione e configurazione Nginx ```bash # Installazione Nginx sudo apt install -y nginx # Avvio e abilitazione sudo systemctl start nginx sudo systemctl enable nginx # Test curl localhost ``` ## FASE 3: TRASFERIMENTO PROGETTO ### 3.1 Preparazione directory ```bash # Creazione struttura directory sudo mkdir -p /var/www/netgescon sudo chown -R $USER:www-data /var/www/netgescon sudo chmod -R 755 /var/www/netgescon # Directory di lavoro cd /var/www/netgescon ``` ### 3.2 Opzioni di trasferimento #### OPZIONE A: Trasferimento via SCP/SFTP ```bash # Da Windows (PowerShell/cmd), copiare il progetto: scp -r "u:\home\michele\netgescon\netgescon-laravel" netgescon@[IP_VM]:/var/www/netgescon/ # Oppure usare WinSCP, FileZilla, o strumenti grafici ``` #### OPZIONE B: Backup e ripristino via Git ```bash # Su Windows: creare repository Git locale cd "u:\home\michele\netgescon\netgescon-laravel" git init git add . git commit -m "Backup completo progetto NetGescon" # Su Linux: clonare da repository remoto o trasferire .git ``` #### OPZIONE C: Trasferimento via archivio ```bash # Su Windows: creare archivio ZIP del progetto # Su Linux: estrarre archivio cd /var/www/netgescon unzip netgescon-laravel.zip ``` ### 3.3 Configurazione permessi ```bash cd /var/www/netgescon/netgescon-laravel # Permessi directory Laravel sudo chown -R $USER:www-data . sudo chmod -R 755 . sudo chmod -R 775 storage bootstrap/cache sudo chmod 644 .env ``` ## FASE 4: CONFIGURAZIONE LARAVEL ### 4.1 Installazione dipendenze ```bash cd /var/www/netgescon/netgescon-laravel # Installazione dipendenze PHP composer install --optimize-autoloader --no-dev # Installazione dipendenze Node.js npm install # Build asset produzione npm run build ``` ### 4.2 Configurazione ambiente ```bash # Copia e modifica file .env cp .env.example .env vim .env ``` ```env # Configurazione .env per Linux APP_NAME="NetGescon" APP_ENV=production APP_KEY= APP_DEBUG=false APP_URL=http://localhost:8000 LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=netgescon DB_USERNAME=netgescon_user DB_PASSWORD=NetGescon2024! BROADCAST_DRIVER=log CACHE_DRIVER=file FILESYSTEM_DISK=local QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=mailpit MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" ``` ### 4.3 Generazione chiave e cache ```bash # Generazione chiave applicazione php artisan key:generate # Ottimizzazione cache php artisan config:cache php artisan route:cache php artisan view:cache # Link storage php artisan storage:link ``` ### 4.4 Migrazione database ```bash # Esecuzione migrazioni php artisan migrate --force # Seeder (se necessario) php artisan db:seed --force ``` ## FASE 5: CONFIGURAZIONE NGINX ### 5.1 Configurazione virtual host ```bash sudo vim /etc/nginx/sites-available/netgescon ``` ```nginx server { listen 80; listen [::]:80; server_name localhost netgescon.local; root /var/www/netgescon/netgescon-laravel/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } ``` ### 5.2 Attivazione configurazione ```bash # Abilita sito sudo ln -s /etc/nginx/sites-available/netgescon /etc/nginx/sites-enabled/ # Disabilita sito default sudo unlink /etc/nginx/sites-enabled/default # Test configurazione sudo nginx -t # Riavvio Nginx sudo systemctl restart nginx sudo systemctl restart php8.2-fpm ``` ## FASE 6: TESTING E VERIFICA ### 6.1 Test applicazione ```bash # Test via artisan serve (sviluppo) cd /var/www/netgescon/netgescon-laravel php artisan serve --host=0.0.0.0 --port=8000 # Test via browser: # http://[IP_VM]:8000 ``` ### 6.2 Test database ```bash # Verifica connessione database php artisan tinker # >>> \DB::connection()->getPdo(); # >>> User::count(); ``` ### 6.3 Log monitoring ```bash # Monitoraggio log Laravel tail -f storage/logs/laravel.log # Monitoraggio log Nginx sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/nginx/access.log ``` ## FASE 7: CONFIGURAZIONE API LEGACY ### 7.1 Creazione controller API bridge ```bash php artisan make:controller Api/LegacyBridgeController ``` ### 7.2 Configurazione route API ```php // routes/api.php Route::prefix('legacy')->group(function () { Route::post('/import-stabili', [LegacyBridgeController::class, 'importStabili']); Route::post('/import-condomini', [LegacyBridgeController::class, 'importCondomini']); Route::post('/sync-data', [LegacyBridgeController::class, 'syncData']); }); ``` ### 7.3 Documentazione API ```bash # Installazione Swagger/OpenAPI composer require darkaonline/l5-swagger php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider" ``` ## FASE 8: SICUREZZA E BACKUP ### 8.1 Configurazione SSL (opzionale) ```bash # Installazione Certbot per Let's Encrypt sudo apt install -y certbot python3-certbot-nginx # Certificato SSL (se dominio pubblico) sudo certbot --nginx -d netgescon.yourdomain.com ``` ### 8.2 Script backup automatico ```bash # Script backup database e file sudo vim /usr/local/bin/netgescon-backup.sh ``` ```bash #!/bin/bash BACKUP_DIR="/var/backups/netgescon" DATE=$(date +%Y%m%d_%H%M%S) mkdir -p $BACKUP_DIR # Backup database mysqldump -u netgescon_user -p'NetGescon2024!' netgescon > $BACKUP_DIR/netgescon_db_$DATE.sql # Backup file applicazione tar -czf $BACKUP_DIR/netgescon_files_$DATE.tar.gz -C /var/www/netgescon . # Rimozione backup vecchi (>7 giorni) find $BACKUP_DIR -name "*.sql" -mtime +7 -delete find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete ``` ```bash # Permessi script sudo chmod +x /usr/local/bin/netgescon-backup.sh # Crontab per backup automatico sudo crontab -e # Aggiungere: 0 2 * * * /usr/local/bin/netgescon-backup.sh ``` ## FASE 9: MONITORAGGIO E MANUTENZIONE ### 9.1 Script di monitoraggio ```bash # Script controllo servizi sudo vim /usr/local/bin/netgescon-health.sh ``` ```bash #!/bin/bash echo "=== NetGescon Health Check ===" echo "Date: $(date)" echo # Check services systemctl is-active nginx || echo "❌ Nginx down" systemctl is-active mysql || echo "❌ MySQL down" systemctl is-active php8.2-fpm || echo "❌ PHP-FPM down" # Check disk space df -h /var/www/netgescon | tail -1 | awk '{print "Disk usage: " $5}' # Check database connection cd /var/www/netgescon/netgescon-laravel php artisan tinker --execute="echo \DB::connection()->getPdo() ? '✅ DB OK' : '❌ DB Failed';" ``` ### 9.2 Log rotation ```bash sudo vim /etc/logrotate.d/netgescon ``` ``` /var/www/netgescon/netgescon-laravel/storage/logs/*.log { daily missingok rotate 14 compress delaycompress notifempty sharedscripts postrotate systemctl reload php8.2-fpm endscript } ``` ## TROUBLESHOOTING COMUNE ### Errori Permission Denied ```bash sudo chown -R $USER:www-data /var/www/netgescon sudo chmod -R 755 /var/www/netgescon sudo chmod -R 775 /var/www/netgescon/netgescon-laravel/storage ``` ### Errori Database Connection ```bash # Verifica stato MySQL sudo systemctl status mysql # Test connessione mysql -u netgescon_user -p netgescon ``` ### Errori 500 Internal Server ```bash # Verifica log tail -f /var/www/netgescon/netgescon-laravel/storage/logs/laravel.log sudo tail -f /var/log/nginx/error.log ``` ### Performance Tuning ```bash # Ottimizzazione PHP-FPM sudo vim /etc/php/8.2/fpm/pool.d/www.conf # pm.max_children = 50 # pm.start_servers = 20 # pm.min_spare_servers = 10 # pm.max_spare_servers = 30 # Ottimizzazione MySQL sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf # innodb_buffer_pool_size = 1G # query_cache_size = 128M ``` --- ## NEXT STEPS 1. **Seguire questa guida step-by-step** 2. **Testare ogni fase prima di procedere** 3. **Configurare API bridge per connessione legacy** 4. **Implementare monitoraggio e backup** 5. **Ottimizzare performance** Vuoi che iniziamo con la creazione della VM? --- ## SCRIPT INSTALLAZIONE AUTOMATICA ### Script setup-netgescon.sh ```bash #!/bin/bash set -e echo "🚀 NetGescon Linux Setup Script" echo "=================================" # Colori per output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' 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"; } # Verifica se eseguito come utente normale if [[ $EUID -eq 0 ]]; then log_error "Non eseguire questo script come root. Usa il tuo utente normale." exit 1 fi log_info "Aggiornamento sistema..." sudo apt update && sudo apt upgrade -y log_info "Installazione pacchetti base..." sudo apt install -y curl wget git unzip vim htop tree net-tools openssh-server ufw log_info "Configurazione firewall..." sudo ufw --force enable sudo ufw allow ssh sudo ufw allow 80 sudo ufw allow 443 sudo ufw allow 8000 log_info "Installazione PHP 8.2..." sudo apt install -y software-properties-common sudo add-apt-repository ppa:ondrej/php -y sudo apt update sudo apt install -y php8.2 php8.2-fpm php8.2-cli php8.2-common php8.2-mysql \ php8.2-zip php8.2-gd php8.2-mbstring php8.2-curl php8.2-xml php8.2-bcmath \ php8.2-intl php8.2-sqlite3 php8.2-redis php8.2-imagick log_info "Installazione Composer..." cd /tmp curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer sudo chmod +x /usr/local/bin/composer log_info "Installazione Node.js..." curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs log_info "Installazione MySQL..." sudo apt install -y mysql-server log_info "Installazione Nginx..." sudo apt install -y nginx sudo systemctl start nginx sudo systemctl enable nginx log_info "Creazione directory progetto..." sudo mkdir -p /var/www/netgescon sudo chown -R $USER:www-data /var/www/netgescon sudo chmod -R 755 /var/www/netgescon log_info "Configurazione MySQL..." echo "IMPORTANTE: Configura MySQL manualmente con:" echo "sudo mysql_secure_installation" echo "" echo "Poi esegui questi comandi SQL:" echo "CREATE DATABASE netgescon CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" echo "CREATE USER 'netgescon_user'@'localhost' IDENTIFIED BY 'NetGescon2024!';" echo "GRANT ALL PRIVILEGES ON netgescon.* TO 'netgescon_user'@'localhost';" echo "FLUSH PRIVILEGES;" log_info "Setup completato! 🎉" echo "" echo "NEXT STEPS:" echo "1. Configura MySQL (vedi comandi sopra)" echo "2. Trasferisci il progetto Laravel in /var/www/netgescon/" echo "3. Configura Nginx virtual host" echo "4. Esegui setup Laravel (composer install, migrations, etc.)" # Salva log installazione echo "$(date): NetGescon setup completato" >> ~/netgescon-setup.log ``` ### Script post-installazione ```bash #!/bin/bash # setup-laravel.sh - Da eseguire dopo aver trasferito il progetto set -e cd /var/www/netgescon/netgescon-laravel echo "🔧 Setup Laravel NetGescon" echo "===========================" # Verifica directory if [ ! -f "artisan" ]; then echo "❌ File artisan non trovato. Assicurati di essere nella directory corretta." exit 1 fi # Installazione dipendenze echo "📦 Installazione dipendenze PHP..." composer install --optimize-autoloader --no-dev echo "📦 Installazione dipendenze Node.js..." npm install echo "🏗️ Build asset produzione..." npm run build # Configurazione permessi echo "🔐 Configurazione permessi..." sudo chown -R $USER:www-data . sudo chmod -R 755 . sudo chmod -R 775 storage bootstrap/cache # Setup .env se non esiste if [ ! -f ".env" ]; then echo "⚙️ Configurazione .env..." cp .env.example .env echo "✋ IMPORTANTE: Modifica il file .env con i dati del database!" echo " Database: netgescon" echo " Username: netgescon_user" echo " Password: NetGescon2024!" fi # Generazione chiave echo "🔑 Generazione chiave applicazione..." php artisan key:generate # Cache ottimizzazione echo "⚡ Ottimizzazione cache..." php artisan config:cache php artisan route:cache php artisan view:cache # Storage link echo "🔗 Creazione storage link..." php artisan storage:link echo "" echo "✅ Setup Laravel completato!" echo "" echo "NEXT STEPS:" echo "1. Verifica configurazione .env" echo "2. Esegui: php artisan migrate --force" echo "3. Esegui: php artisan db:seed --force" echo "4. Configura Nginx virtual host" ``` ## CHECKLIST DI VERIFICA ### ✅ Pre-migrazione (Windows) - [ ] Backup completo progetto NetGescon - [ ] Export database (se esistente) - [ ] Verifica file .env e configurazioni - [ ] Test funzionalità correnti - [ ] Documentazione personalizzazioni ### ✅ Setup VM Linux - [ ] Ubuntu Server 22.04 LTS installato - [ ] Configurazione rete (IP statico o DHCP) - [ ] SSH server attivo e accessibile - [ ] Utente netgescon creato - [ ] Firewall UFW configurato ### ✅ Ambiente sviluppo - [ ] PHP 8.2 installato e configurato - [ ] Composer funzionante - [ ] Node.js e npm installati - [ ] MySQL server installato - [ ] Nginx installato e attivo ### ✅ Database - [ ] Database 'netgescon' creato - [ ] Utente 'netgescon_user' configurato - [ ] Privilegi assegnati correttamente - [ ] Test connessione database OK ### ✅ Trasferimento progetto - [ ] Codice Laravel trasferito in /var/www/netgescon/ - [ ] Permessi file corretti (755/775) - [ ] Dipendenze Composer installate - [ ] Asset frontend compilati - [ ] File .env configurato ### ✅ Configurazione Laravel - [ ] APP_KEY generata - [ ] Cache configurazione creata - [ ] Migrazioni database eseguite - [ ] Seeder eseguiti (se necessario) - [ ] Storage link creato ### ✅ Configurazione web server - [ ] Virtual host Nginx configurato - [ ] PHP-FPM funzionante - [ ] Test sintassi nginx OK - [ ] Servizi riavviati ### ✅ Testing funzionalità - [ ] Homepage NetGescon carica - [ ] Login utenti funziona - [ ] Dashboard accessibile - [ ] Menu sidebar funzionano - [ ] AJAX navigation OK - [ ] Upload file funziona - [ ] Database queries OK ### ✅ Sicurezza e manutenzione - [ ] Script backup configurato - [ ] Crontab backup attivo - [ ] Log rotation configurato - [ ] Monitoraggio servizi OK - [ ] SSL configurato (se necessario) ### ✅ API Legacy (se necessario) - [ ] Controller API bridge creato - [ ] Route API configurate - [ ] Test connessione legacy system - [ ] Documentazione API completa ## COMANDI RAPIDI EMERGENZA ### Riavvio servizi ```bash sudo systemctl restart nginx sudo systemctl restart php8.2-fpm sudo systemctl restart mysql ``` ### Check status servizi ```bash sudo systemctl status nginx php8.2-fpm mysql ``` ### Monitoring real-time ```bash # Log Laravel tail -f /var/www/netgescon/netgescon-laravel/storage/logs/laravel.log # Log Nginx errori sudo tail -f /var/log/nginx/error.log # Log accessi Nginx sudo tail -f /var/log/nginx/access.log # Monitoraggio sistema htop ``` ### Reset cache Laravel ```bash cd /var/www/netgescon/netgescon-laravel php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear ``` ### Backup emergenza ```bash # Database mysqldump -u netgescon_user -p netgescon > backup-emergency-$(date +%Y%m%d_%H%M%S).sql # File progetto tar -czf backup-netgescon-$(date +%Y%m%d_%H%M%S).tar.gz /var/www/netgescon/ ``` --- ## SUPPORTO E CONTATTI Per problemi durante la migrazione: 1. Controllare i log (Laravel, Nginx, MySQL) 2. Verificare permessi file e directory 3. Testare connessione database 4. Controllare configurazione Nginx 5. Verificare stato servizi Linux **File di log principali:** - Laravel: `/var/www/netgescon/netgescon-laravel/storage/logs/laravel.log` - Nginx: `/var/log/nginx/error.log` - MySQL: `/var/log/mysql/error.log` - Sistema: `/var/log/syslog`