📋 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
651 lines
12 KiB
Markdown
651 lines
12 KiB
Markdown
# 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*
|