📋 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
20 KiB
20 KiB
GUIDA COMPLETA MIGRAZIONE NETGESCON SU LINUX
FASE 1: PREPARAZIONE AMBIENTE LINUX
1.1 Download Ubuntu Server 22.04 LTS
# Scaricare da: https://ubuntu.com/download/server
# File: ubuntu-22.04.3-live-server-amd64.iso
1.2 Creazione VM (VirtualBox)
# 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
# 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
sudo apt update && sudo apt upgrade -y
sudo reboot
2.2 Installazione pacchetti base
# 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
# 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
# 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)
# 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
# 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
-- 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
# 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
# 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
# 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
# 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
# Su Windows: creare archivio ZIP del progetto
# Su Linux: estrarre archivio
cd /var/www/netgescon
unzip netgescon-laravel.zip
3.3 Configurazione permessi
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
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
# Copia e modifica file .env
cp .env.example .env
vim .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
# 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
# Esecuzione migrazioni
php artisan migrate --force
# Seeder (se necessario)
php artisan db:seed --force
FASE 5: CONFIGURAZIONE NGINX
5.1 Configurazione virtual host
sudo vim /etc/nginx/sites-available/netgescon
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
# 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
# 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
# Verifica connessione database
php artisan tinker
# >>> \DB::connection()->getPdo();
# >>> User::count();
6.3 Log monitoring
# 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
php artisan make:controller Api/LegacyBridgeController
7.2 Configurazione route API
// 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
# 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)
# 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
# Script backup database e file
sudo vim /usr/local/bin/netgescon-backup.sh
#!/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
# 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
# Script controllo servizi
sudo vim /usr/local/bin/netgescon-health.sh
#!/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
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
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
# Verifica stato MySQL
sudo systemctl status mysql
# Test connessione
mysql -u netgescon_user -p netgescon
Errori 500 Internal Server
# Verifica log
tail -f /var/www/netgescon/netgescon-laravel/storage/logs/laravel.log
sudo tail -f /var/log/nginx/error.log
Performance Tuning
# 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
- Seguire questa guida step-by-step
- Testare ogni fase prima di procedere
- Configurare API bridge per connessione legacy
- Implementare monitoraggio e backup
- Ottimizzare performance
Vuoi che iniziamo con la creazione della VM?
SCRIPT INSTALLAZIONE AUTOMATICA
Script setup-netgescon.sh
#!/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
#!/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
sudo systemctl restart nginx
sudo systemctl restart php8.2-fpm
sudo systemctl restart mysql
Check status servizi
sudo systemctl status nginx php8.2-fpm mysql
Monitoring real-time
# 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
cd /var/www/netgescon/netgescon-laravel
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
Backup emergenza
# 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:
- Controllare i log (Laravel, Nginx, MySQL)
- Verificare permessi file e directory
- Testare connessione database
- Controllare configurazione Nginx
- 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