netgescon-master/docs/00-transizione-linux/DEPLOYMENT-GUIDE-COMPLETE.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

12 KiB

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

# 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

# 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

# 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

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

# Configurazione sicurezza
sudo mysql_secure_installation

Configurazione Database

# 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

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

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

<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>
# Attivazione sito
sudo a2ensite netgescon.conf
sudo a2dissite 000-default.conf
sudo systemctl reload apache2

Nginx (Opzione B)

# Installazione
sudo apt install -y nginx

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

Configurazione 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;
    }
}
# 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

# 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

# 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

# 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

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

# Copia file environment
sudo cp .env.example .env
sudo nano .env

Configurazione .env:

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

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

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

<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>
# Attivazione SSL
sudo a2enmod ssl
sudo a2ensite netgescon-ssl.conf
sudo systemctl reload apache2

Let's Encrypt (Production)

# 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

# Configurazione Netplan
sudo nano /etc/netplan/00-installer-config.yaml

Configurazione Netplan:

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
# Applicazione configurazione
sudo netplan apply

Firewall (UFW)

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

# 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

# Installazione
sudo apt install -y tightvncserver

# Configurazione utente
su - netgescon
vncserver :1

# Configurazione startup
nano ~/.vnc/xstartup

Configurazione VNC:

#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
# Permessi e restart
chmod +x ~/.vnc/xstartup
vncserver -kill :1
vncserver :1

📊 MONITORAGGIO E LOGGING

Configurazione Log

# 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

# 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

# Crea script backup
sudo nano /var/www/netgescon/scripts/backup.sh

Script Backup:

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

# Script update
sudo nano /var/www/netgescon/scripts/deploy.sh

Script Deploy:

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

# 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

# Verifica connessione
mysql -u netgescon_user -p

# Verifica configurazione
cat .env | grep DB_

# Restart MySQL
sudo systemctl restart mysql

3. Permessi File

# 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

# Update composer
composer self-update

# Clear cache
composer clear-cache

# Reinstall
rm -rf vendor composer.lock
composer install

📱 DEPLOYMENT MOBILE/API

Configurazione CORS

# Installazione pacchetto
composer require fruitcake/laravel-cors

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

API Rate Limiting

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

Documentazione API

# 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