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

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

  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

#!/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:

  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