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