# NETGESCON - GUIDA DEPLOYMENT

## 🚀 DEPLOYMENT COMPLETO

### 📋 PREREQUISITI

#### Sistema Operativo
- **OS**: Ubuntu 24.04 LTS (Raccomandato)
- **RAM**: Minimo 4GB, Raccomandato 8GB+
- **Storage**: Minimo 50GB SSD
- **Network**: Connessione internet stabile

#### Software Base
```bash
# Aggiornamento sistema
sudo apt update && sudo apt upgrade -y

# Pacchetti essenziali
sudo apt install -y curl wget git unzip software-properties-common
```

---

## 🐘 INSTALLAZIONE PHP

### PHP 8.1+ e Estensioni
```bash
# Repository PHP
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Installazione PHP
sudo apt install -y php8.1 php8.1-cli php8.1-fpm php8.1-mysql \
    php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip \
    php8.1-bcmath php8.1-json php8.1-gd php8.1-intl

# Verifica installazione
php --version
```

### Configurazione PHP
```bash
# File configurazione
sudo nano /etc/php/8.1/fpm/php.ini

# Parametri raccomandati
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 3000
```

---

## 🗄️ INSTALLAZIONE MySQL

### Installazione
```bash
# Installazione MySQL 8.0
sudo apt install -y mysql-server mysql-client

# Configurazione sicurezza
sudo mysql_secure_installation
```

### Configurazione Database
```bash
# Accesso MySQL
sudo mysql -u root -p

# Creazione database e utente
CREATE DATABASE netgescon;
CREATE USER 'netgescon_user'@'localhost' IDENTIFIED BY 'password_sicura';
GRANT ALL PRIVILEGES ON netgescon.* TO 'netgescon_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

### Ottimizzazioni MySQL
```bash
# File configurazione
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# Aggiungi sezione [mysqld]
[mysqld]
innodb_buffer_pool_size = 2G
innodb_log_file_size = 256M
max_connections = 200
query_cache_type = 1
query_cache_size = 64M
```

---

## 🌐 INSTALLAZIONE SERVER WEB

### Apache2 (Opzione A)
```bash
# Installazione
sudo apt install -y apache2

# Moduli necessari
sudo a2enmod rewrite ssl headers deflate

# Virtual Host
sudo nano /etc/apache2/sites-available/netgescon.conf
```

**Configurazione Virtual Host:**
```apache
<VirtualHost *:80>
    ServerName netgescon.local
    DocumentRoot /var/www/netgescon/public
    
    <Directory /var/www/netgescon/public>
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/netgescon_error.log
    CustomLog ${APACHE_LOG_DIR}/netgescon_access.log combined
</VirtualHost>
```

```bash
# Attivazione sito
sudo a2ensite netgescon.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2
```

### Nginx (Opzione B)
```bash
# Installazione
sudo apt install -y nginx

# Configurazione sito
sudo nano /etc/nginx/sites-available/netgescon
```

**Configurazione Nginx:**
```nginx
server {
    listen 80;
    server_name netgescon.local;
    root /var/www/netgescon/public;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\. {
        deny all;
    }
}
```

```bash
# Attivazione
sudo ln -s /etc/nginx/sites-available/netgescon /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo systemctl reload nginx
```

---

## 🎼 INSTALLAZIONE COMPOSER

```bash
# Download e installazione
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
```

---

## 📂 DEPLOYMENT APPLICAZIONE

### 1. Clone Repository
```bash
# Directory di destinazione
sudo mkdir -p /var/www
cd /var/www

# Clone (se da repository)
sudo git clone https://github.com/your-repo/netgescon.git

# Oppure copia da backup
sudo cp -r /path/to/backup/netgescon .
```

### 2. Permessi Directory
```bash
# Proprietà directory
sudo chown -R www-data:www-data /var/www/netgescon
sudo chmod -R 755 /var/www/netgescon

# Permessi storage e cache
sudo chmod -R 775 /var/www/netgescon/storage
sudo chmod -R 775 /var/www/netgescon/bootstrap/cache
```

### 3. Installazione Dipendenze
```bash
cd /var/www/netgescon

# Dipendenze PHP
sudo -u www-data composer install --no-dev --optimize-autoloader

# Se hai dipendenze Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
npm install
npm run production
```

### 4. Configurazione Environment
```bash
# Copia file environment
sudo cp .env.example .env
sudo nano .env
```

**Configurazione .env:**
```bash
APP_NAME="NETGESCON"
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=http://192.168.0.200

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=netgescon
DB_USERNAME=netgescon_user
DB_PASSWORD=password_sicura

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your-email@gmail.com
MAIL_PASSWORD=your-app-password
MAIL_ENCRYPTION=tls

SESSION_DRIVER=database
QUEUE_CONNECTION=database
```

### 5. Configurazione Laravel
```bash
# Generazione chiave applicazione
sudo -u www-data php artisan key:generate

# Ottimizzazione
sudo -u www-data php artisan config:cache
sudo -u www-data php artisan route:cache
sudo -u www-data php artisan view:cache

# Migrazioni database
sudo -u www-data php artisan migrate --force

# Seeder (se necessario)
sudo -u www-data php artisan db:seed --force
```

---

## 🔐 CONFIGURAZIONE SSL (HTTPS)

### Certificato Self-Signed (Development)
```bash
# Generazione certificato
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
    -keyout /etc/ssl/private/netgescon.key \
    -out /etc/ssl/certs/netgescon.crt

# Virtual Host SSL (Apache)
sudo nano /etc/apache2/sites-available/netgescon-ssl.conf
```

**Virtual Host SSL:**
```apache
<VirtualHost *:443>
    ServerName netgescon.local
    DocumentRoot /var/www/netgescon/public
    
    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/netgescon.crt
    SSLCertificateKeyFile /etc/ssl/private/netgescon.key
    
    <Directory /var/www/netgescon/public>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
```

```bash
# Attivazione SSL
sudo a2enmod ssl
sudo a2ensite netgescon-ssl.conf
sudo systemctl reload apache2
```

### Let's Encrypt (Production)
```bash
# Installazione Certbot
sudo apt install -y certbot python3-certbot-apache

# Certificato automatico
sudo certbot --apache -d your-domain.com

# Rinnovo automatico
sudo crontab -e
# Aggiungi: 0 12 * * * /usr/bin/certbot renew --quiet
```

---

## 🔧 CONFIGURAZIONE NETWORKING

### IP Statico
```bash
# Configurazione Netplan
sudo nano /etc/netplan/00-installer-config.yaml
```

**Configurazione Netplan:**
```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:
      addresses:
        - 192.168.0.200/24
      routes:
        - to: default
          via: 192.168.0.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      optional: true
```

```bash
# Applicazione configurazione
sudo netplan apply
```

### Firewall (UFW)
```bash
# Abilitazione firewall
sudo ufw enable

# Regole base
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 3389/tcp  # RDP
sudo ufw allow 5900/tcp  # VNC

# Verifica stato
sudo ufw status
```

---

## 🖥️ CONFIGURAZIONE ACCESSO REMOTO

### RDP (xrdp)
```bash
# Installazione
sudo apt install -y xrdp

# Configurazione
sudo systemctl enable xrdp
sudo systemctl start xrdp

# Aggiunta utente al gruppo
sudo adduser netgescon ssl-cert
```

### VNC
```bash
# Installazione
sudo apt install -y tightvncserver

# Configurazione utente
su - netgescon
vncserver :1

# Configurazione startup
nano ~/.vnc/xstartup
```

**Configurazione VNC:**
```bash
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
```

```bash
# Permessi e restart
chmod +x ~/.vnc/xstartup
vncserver -kill :1
vncserver :1
```

---

## 📊 MONITORAGGIO E LOGGING

### Configurazione Log
```bash
# Rotazione log Laravel
sudo nano /etc/logrotate.d/laravel
```

**Configurazione Logrotate:**
```
/var/www/netgescon/storage/logs/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 644 www-data www-data
}
```

### Monitoraggio Sistema
```bash
# Installazione htop
sudo apt install -y htop

# Monitoraggio servizi
sudo systemctl status apache2
sudo systemctl status mysql
sudo systemctl status php8.1-fpm
```

---

## 🔄 SCRIPT AUTOMAZIONE

### Script Backup Automatico
```bash
# Crea script backup
sudo nano /var/www/netgescon/scripts/backup.sh
```

**Script Backup:**
```bash
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/var/www/netgescon-complete/backups"

# Backup database
mysqldump -u netgescon_user -p'password_sicura' netgescon > $BACKUP_DIR/database/netgescon_$DATE.sql

# Backup files
tar -czf $BACKUP_DIR/code/netgescon_$DATE.tar.gz /var/www/netgescon

# Cleanup old backups (>30 giorni)
find $BACKUP_DIR -type f -mtime +30 -delete

echo "Backup completato: $DATE"
```

```bash
# Permessi esecuzione
sudo chmod +x /var/www/netgescon/scripts/backup.sh

# Cron job automatico
sudo crontab -e
# Aggiungi: 0 2 * * * /var/www/netgescon/scripts/backup.sh
```

### Script Update Deployment
```bash
# Script update
sudo nano /var/www/netgescon/scripts/deploy.sh
```

**Script Deploy:**
```bash
#!/bin/bash
cd /var/www/netgescon

# Backup pre-deploy
./scripts/backup.sh

# Update codice
git pull origin main

# Update dipendenze
composer install --no-dev --optimize-autoloader

# Migrazioni
php artisan migrate --force

# Cache refresh
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache

# Restart servizi
sudo systemctl reload apache2
sudo systemctl reload php8.1-fpm

echo "Deploy completato!"
```

---

## ✅ CHECKLIST POST-DEPLOYMENT

### Verifica Servizi
- [ ] Apache/Nginx attivo e funzionante
- [ ] PHP-FPM in esecuzione
- [ ] MySQL accessibile
- [ ] Applicazione raggiungibile via browser

### Test Funzionalità
- [ ] Login amministratore funzionante
- [ ] CRUD stabili operativo
- [ ] CRUD persone operativo
- [ ] Upload file funzionante
- [ ] Generazione PDF report

### Sicurezza
- [ ] Firewall configurato
- [ ] SSL/HTTPS attivo
- [ ] File .env protetto
- [ ] Log rotation configurato

### Performance
- [ ] Cache Laravel attiva
- [ ] Compressione gzip abilitata
- [ ] Database ottimizzato
- [ ] Backup automatico funzionante

---

## 🆘 TROUBLESHOOTING

### Errori Comuni

#### 1. Errore 500 - Internal Server Error
```bash
# Verifica log
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/www/netgescon/storage/logs/laravel.log

# Soluzioni comuni
sudo chmod -R 775 storage bootstrap/cache
php artisan config:clear
php artisan cache:clear
```

#### 2. Database Connection Error
```bash
# Verifica connessione
mysql -u netgescon_user -p

# Verifica configurazione
cat .env | grep DB_

# Restart MySQL
sudo systemctl restart mysql
```

#### 3. Permessi File
```bash
# Reset permessi
sudo chown -R www-data:www-data /var/www/netgescon
sudo chmod -R 755 /var/www/netgescon
sudo chmod -R 775 storage bootstrap/cache
```

#### 4. Composer Issues
```bash
# Update composer
composer self-update

# Clear cache
composer clear-cache

# Reinstall
rm -rf vendor composer.lock
composer install
```

---

## 📱 DEPLOYMENT MOBILE/API

### Configurazione CORS
```bash
# Installazione pacchetto
composer require fruitcake/laravel-cors

# Pubblicazione config
php artisan vendor:publish --tag="cors"
```

### API Rate Limiting
```bash
# File: app/Http/Kernel.php
'api' => [
    'throttle:api',
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],
```

### Documentazione API
```bash
# Installazione Swagger
composer require darkaonline/l5-swagger

# Pubblicazione
php artisan vendor:publish --provider "L5Swagger\L5SwaggerServiceProvider"

# Generazione docs
php artisan l5-swagger:generate
```

---

*📝 Guida aggiornata: Gennaio 2025*
*🚀 Testata su Ubuntu 24.04 LTS*
