📋 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
12 KiB
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