netgescon-master/docs/archived/GUIDA-MIGRAZIONE-LINUX-COMPLETA.md
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

831 lines
20 KiB
Markdown

# 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`