# 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 ServerName netgescon.local DocumentRoot /var/www/netgescon/public AllowOverride All Require all granted ErrorLog ${APACHE_LOG_DIR}/netgescon_error.log CustomLog ${APACHE_LOG_DIR}/netgescon_access.log combined ``` ```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 ServerName netgescon.local DocumentRoot /var/www/netgescon/public SSLEngine on SSLCertificateFile /etc/ssl/certs/netgescon.crt SSLCertificateKeyFile /etc/ssl/private/netgescon.key AllowOverride All Require all granted ``` ```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*