📋 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
798 lines
22 KiB
Markdown
798 lines
22 KiB
Markdown
# 5. SINCRONIZZAZIONE E CONFIGURAZIONE AMBIENTE
|
|
|
|
## 📋 **INDICE CAPITOLO**
|
|
- [5.1 Architettura di Sincronizzazione](#51-architettura-di-sincronizzazione)
|
|
- [5.2 Configurazione Ambiente Locale](#52-configurazione-ambiente-locale)
|
|
- [5.3 Configurazione Server Remoto](#53-configurazione-server-remoto)
|
|
- [5.4 Script di Sincronizzazione](#54-script-di-sincronizzazione)
|
|
- [5.5 Attivazione Nuova Macchina](#55-attivazione-nuova-macchina)
|
|
- [5.6 Gestione Codici Univoci](#56-gestione-codici-univoci)
|
|
- [5.7 Troubleshooting](#57-troubleshooting)
|
|
- [5.8 Monitoraggio e Automazione](#58-monitoraggio-e-automazione)
|
|
|
|
---
|
|
|
|
## 5.1 Architettura di Sincronizzazione
|
|
|
|
### Modello Centralizzato
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ AMBIENTE NETGESCON │
|
|
├─────────────────────────────────────────────────────────────────┤
|
|
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
|
|
│ │ LOCALE WSL │ │ SERVER REMOTO │ │ BACKUP │ │
|
|
│ │ │ │ │ │ │ │
|
|
│ │ Dev Environment │◄──►│ Production Env │◄──►│ Archive Data │ │
|
|
│ │ michele@SVR-GES │ │ michele@netges │ │ Daily Backup │ │
|
|
│ │ 192.168.0.xxx │ │ 192.168.0.43 │ │ Git Repo │ │
|
|
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
### Flusso di Sincronizzazione
|
|
1. **Sviluppo Locale**: Modifiche codice e database
|
|
2. **Sync Automatico**: rsync ottimizzato per trasferimento veloce
|
|
3. **Applicazione Remota**: Migration e aggiornamenti automatici
|
|
4. **Backup**: Archiviazione versioni e dati
|
|
|
|
---
|
|
|
|
## 5.2 Configurazione Ambiente Locale
|
|
|
|
### Prerequisiti Sistema
|
|
```bash
|
|
# Verifica sistema operativo
|
|
uname -a
|
|
lsb_release -a
|
|
|
|
# Verifica versioni software
|
|
php -v
|
|
mysql --version
|
|
composer --version
|
|
node --version
|
|
npm --version
|
|
```
|
|
|
|
### Installazione Dipendenze
|
|
```bash
|
|
# Aggiorna sistema
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Installa PHP e estensioni
|
|
sudo apt install -y php8.2 php8.2-cli php8.2-common php8.2-mysql \
|
|
php8.2-xml php8.2-curl php8.2-gd php8.2-mbstring php8.2-zip \
|
|
php8.2-bcmath php8.2-intl php8.2-readline php8.2-opcache
|
|
|
|
# Installa Composer
|
|
curl -sS https://getcomposer.org/installer | php
|
|
sudo mv composer.phar /usr/local/bin/composer
|
|
sudo chmod +x /usr/local/bin/composer
|
|
|
|
# Installa Node.js e npm
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
|
sudo apt-get install -y nodejs
|
|
|
|
# Installa MySQL/MariaDB
|
|
sudo apt install -y mysql-server mysql-client
|
|
sudo mysql_secure_installation
|
|
```
|
|
|
|
### Configurazione Laravel
|
|
```bash
|
|
# Clona o inizializza progetto
|
|
cd ~/netgescon
|
|
git clone [repository] netgescon-laravel
|
|
cd netgescon-laravel
|
|
|
|
# Installa dipendenze
|
|
composer install --no-dev --optimize-autoloader
|
|
npm install && npm run build
|
|
|
|
# Configura ambiente
|
|
cp .env.example .env
|
|
php artisan key:generate
|
|
|
|
# Configura database
|
|
php artisan migrate
|
|
php artisan db:seed
|
|
```
|
|
|
|
### File di Configurazione `.env`
|
|
```env
|
|
APP_NAME=Netgescon
|
|
APP_ENV=local
|
|
APP_KEY=base64:xxxxx
|
|
APP_DEBUG=true
|
|
APP_URL=http://localhost:8000
|
|
|
|
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
|
|
|
|
FILESYSTEM_DISK=local
|
|
QUEUE_CONNECTION=sync
|
|
```
|
|
|
|
---
|
|
|
|
## 5.3 Configurazione Server Remoto
|
|
|
|
### Preparazione Server
|
|
```bash
|
|
# Connessione al server
|
|
ssh michele@192.168.0.43
|
|
|
|
# Verifica sistema
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Installa software necessario
|
|
sudo apt install -y nginx mysql-server php8.2-fpm php8.2-mysql \
|
|
php8.2-xml php8.2-curl php8.2-gd php8.2-mbstring php8.2-zip \
|
|
php8.2-bcmath php8.2-intl supervisor redis-server
|
|
|
|
# Configura Nginx
|
|
sudo nano /etc/nginx/sites-available/netgescon
|
|
```
|
|
|
|
### Configurazione Nginx
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name netgescon.local 192.168.0.43;
|
|
root /var/www/netgescon/public;
|
|
index index.php index.html index.htm;
|
|
|
|
location / {
|
|
try_files $uri $uri/ /index.php?$query_string;
|
|
}
|
|
|
|
location ~ \.php$ {
|
|
include snippets/fastcgi-php.conf;
|
|
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
|
|
}
|
|
|
|
location ~ /\.ht {
|
|
deny all;
|
|
}
|
|
|
|
client_max_body_size 100M;
|
|
fastcgi_read_timeout 300;
|
|
}
|
|
```
|
|
|
|
### Configurazione Database
|
|
```bash
|
|
# Configura MySQL
|
|
sudo mysql -u root -p
|
|
|
|
CREATE DATABASE netgescon CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
CREATE USER 'netgescon_user'@'localhost' IDENTIFIED BY 'password_sicura';
|
|
GRANT ALL PRIVILEGES ON netgescon.* TO 'netgescon_user'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
EXIT;
|
|
```
|
|
|
|
### Configurazione Permessi
|
|
```bash
|
|
# Crea directory progetto
|
|
sudo mkdir -p /var/www/netgescon
|
|
sudo chown -R michele:www-data /var/www/netgescon
|
|
sudo chmod -R 755 /var/www/netgescon
|
|
|
|
# Configura permessi Laravel
|
|
sudo chown -R michele:www-data /var/www/netgescon/storage
|
|
sudo chown -R michele:www-data /var/www/netgescon/bootstrap/cache
|
|
sudo chmod -R 775 /var/www/netgescon/storage
|
|
sudo chmod -R 775 /var/www/netgescon/bootstrap/cache
|
|
|
|
# Abilita sito Nginx
|
|
sudo ln -s /etc/nginx/sites-available/netgescon /etc/nginx/sites-enabled/
|
|
sudo nginx -t
|
|
sudo systemctl restart nginx
|
|
```
|
|
|
|
---
|
|
|
|
## 5.4 Script di Sincronizzazione
|
|
|
|
### File di Esclusione `.rsyncignore`
|
|
```plaintext
|
|
.git/
|
|
node_modules/
|
|
vendor/
|
|
storage/logs/
|
|
storage/framework/cache/
|
|
storage/framework/sessions/
|
|
storage/framework/views/
|
|
bootstrap/cache/
|
|
.env
|
|
.env.local
|
|
.env.example
|
|
*.log
|
|
.phpunit.result.cache
|
|
Homestead.json
|
|
Homestead.yaml
|
|
npm-debug.log
|
|
yarn-error.log
|
|
.DS_Store
|
|
Thumbs.db
|
|
```
|
|
|
|
### Script di Sincronizzazione `sync-to-remote.sh`
|
|
```bash
|
|
#!/bin/bash
|
|
|
|
# Script di sincronizzazione veloce per Netgescon
|
|
# Uso: ./sync-to-remote.sh
|
|
|
|
echo "🔄 Sincronizzazione in corso..."
|
|
|
|
# Parametri configurabili
|
|
LOCAL_PATH="$HOME/netgescon/netgescon-laravel/"
|
|
REMOTE_USER="michele"
|
|
REMOTE_HOST="192.168.0.43"
|
|
REMOTE_PATH="/var/www/netgescon/"
|
|
|
|
# Controllo connessione
|
|
if ! ping -c 1 $REMOTE_HOST &> /dev/null; then
|
|
echo "❌ Impossibile raggiungere il server $REMOTE_HOST"
|
|
exit 1
|
|
fi
|
|
|
|
# Backup prima della sincronizzazione
|
|
echo "📦 Creazione backup remoto..."
|
|
ssh $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_PATH && tar -czf backup-$(date +%Y%m%d_%H%M%S).tar.gz --exclude='backup-*.tar.gz' ."
|
|
|
|
# Comando rsync ottimizzato
|
|
echo "🔄 Trasferimento file..."
|
|
if [ -f .rsyncignore ]; then
|
|
rsync -rz --delete --checksum --exclude-from=.rsyncignore \
|
|
$LOCAL_PATH $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH
|
|
else
|
|
rsync -rz --delete --checksum --exclude='.git' --exclude='node_modules' --exclude='vendor' --exclude='storage/logs' --exclude='storage/framework' --exclude='bootstrap/cache' \
|
|
$LOCAL_PATH $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH
|
|
fi
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "✅ Sincronizzazione completata con successo!"
|
|
echo "📊 Statistiche:"
|
|
echo " - Solo file modificati trasferiti"
|
|
echo " - Compressione attiva"
|
|
echo " - File non necessari esclusi"
|
|
else
|
|
echo "❌ Errore durante la sincronizzazione"
|
|
exit 1
|
|
fi
|
|
|
|
# Esecuzione comandi sul server remoto
|
|
echo "🔧 Esecuzione comandi sul server remoto..."
|
|
ssh $REMOTE_USER@$REMOTE_HOST "cd $REMOTE_PATH && \
|
|
composer install --no-dev --optimize-autoloader && \
|
|
php artisan migrate --force && \
|
|
php artisan config:cache && \
|
|
php artisan route:cache && \
|
|
php artisan view:cache && \
|
|
sudo systemctl restart nginx"
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "🚀 Processo completato con successo!"
|
|
else
|
|
echo "⚠️ Sincronizzazione OK ma errore nei comandi remoti"
|
|
exit 1
|
|
fi
|
|
```
|
|
|
|
### Comandi Rapidi
|
|
```bash
|
|
# Sincronizzazione veloce
|
|
./sync-to-remote.sh
|
|
|
|
# Solo rsync senza comandi remoti
|
|
rsync -rz --delete --checksum --exclude-from=.rsyncignore $HOME/netgescon/netgescon-laravel/ michele@192.168.0.43:/var/www/netgescon/
|
|
|
|
# Sync con statistiche
|
|
rsync -rz --delete --checksum --stats --exclude-from=.rsyncignore $HOME/netgescon/netgescon-laravel/ michele@192.168.0.43:/var/www/netgescon/
|
|
```
|
|
|
|
---
|
|
|
|
## 5.5 Attivazione Nuova Macchina
|
|
|
|
### Checklist Preliminare
|
|
- [ ] Sistema operativo supportato (Ubuntu 20.04+ / Debian 11+)
|
|
- [ ] Connessione internet attiva
|
|
- [ ] Accesso sudo
|
|
- [ ] Chiavi SSH configurate
|
|
- [ ] Porte 22, 80, 443, 3306 disponibili
|
|
|
|
### Procedura Completa di Setup
|
|
|
|
#### Step 1: Configurazione Sistema Base
|
|
```bash
|
|
# Aggiorna sistema
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Installa software essenziale
|
|
sudo apt install -y curl wget git vim htop unzip
|
|
|
|
# Configura timezone
|
|
sudo timedatectl set-timezone Europe/Rome
|
|
|
|
# Configura hostname
|
|
sudo hostnamectl set-hostname netgescon-server
|
|
|
|
# Configura hosts
|
|
echo "127.0.0.1 netgescon.local" | sudo tee -a /etc/hosts
|
|
```
|
|
|
|
#### Step 2: Installazione Stack LEMP
|
|
```bash
|
|
# Installa Nginx
|
|
sudo apt install -y nginx
|
|
sudo systemctl enable nginx
|
|
sudo systemctl start nginx
|
|
|
|
# Installa MySQL
|
|
sudo apt install -y mysql-server
|
|
sudo mysql_secure_installation
|
|
|
|
# Installa PHP 8.2
|
|
sudo apt install -y php8.2 php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl \
|
|
php8.2-gd php8.2-mbstring php8.2-zip php8.2-bcmath php8.2-intl \
|
|
php8.2-readline php8.2-opcache
|
|
|
|
# Installa Composer
|
|
curl -sS https://getcomposer.org/installer | php
|
|
sudo mv composer.phar /usr/local/bin/composer
|
|
sudo chmod +x /usr/local/bin/composer
|
|
|
|
# Installa Node.js
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
|
sudo apt-get install -y nodejs
|
|
```
|
|
|
|
#### Step 3: Configurazione Database
|
|
```bash
|
|
# Connetti a MySQL
|
|
sudo mysql -u root -p
|
|
|
|
# Crea database e utente
|
|
CREATE DATABASE netgescon CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
CREATE USER 'netgescon_user'@'localhost' IDENTIFIED BY 'password_sicura_123!';
|
|
GRANT ALL PRIVILEGES ON netgescon.* TO 'netgescon_user'@'localhost';
|
|
|
|
# Configura per trigger e stored procedure
|
|
SET GLOBAL log_bin_trust_function_creators = 1;
|
|
FLUSH PRIVILEGES;
|
|
EXIT;
|
|
```
|
|
|
|
#### Step 4: Configurazione Applicazione
|
|
```bash
|
|
# Crea directory progetto
|
|
sudo mkdir -p /var/www/netgescon
|
|
sudo chown -R michele:www-data /var/www/netgescon
|
|
sudo chmod -R 755 /var/www/netgescon
|
|
|
|
# Trasferimento iniziale (dal server locale)
|
|
rsync -rz --exclude='.git' --exclude='node_modules' --exclude='vendor' \
|
|
$HOME/netgescon/netgescon-laravel/ michele@192.168.0.43:/var/www/netgescon/
|
|
|
|
# Sul server remoto
|
|
cd /var/www/netgescon
|
|
|
|
# Installa dipendenze
|
|
composer install --no-dev --optimize-autoloader
|
|
npm install && npm run build
|
|
|
|
# Configura ambiente
|
|
cp .env.example .env
|
|
php artisan key:generate
|
|
|
|
# Configura database
|
|
php artisan migrate
|
|
php artisan db:seed
|
|
|
|
# Configura permessi
|
|
sudo chown -R michele:www-data storage bootstrap/cache
|
|
sudo chmod -R 775 storage bootstrap/cache
|
|
```
|
|
|
|
#### Step 5: Configurazione Nginx
|
|
```bash
|
|
# Crea configurazione sito
|
|
sudo nano /etc/nginx/sites-available/netgescon
|
|
|
|
# Contenuto configurazione (vedi sezione 5.3)
|
|
|
|
# Abilita sito
|
|
sudo ln -s /etc/nginx/sites-available/netgescon /etc/nginx/sites-enabled/
|
|
sudo nginx -t
|
|
sudo systemctl restart nginx
|
|
```
|
|
|
|
#### Step 6: Configurazione Sicurezza
|
|
```bash
|
|
# Configura firewall
|
|
sudo ufw allow 22/tcp
|
|
sudo ufw allow 80/tcp
|
|
sudo ufw allow 443/tcp
|
|
sudo ufw enable
|
|
|
|
# Configura fail2ban
|
|
sudo apt install -y fail2ban
|
|
sudo systemctl enable fail2ban
|
|
sudo systemctl start fail2ban
|
|
|
|
# Configura chiavi SSH
|
|
mkdir -p ~/.ssh
|
|
chmod 700 ~/.ssh
|
|
# Copia chiave pubblica del server locale
|
|
```
|
|
|
|
#### Step 7: Test Finale
|
|
```bash
|
|
# Verifica servizi
|
|
sudo systemctl status nginx
|
|
sudo systemctl status mysql
|
|
sudo systemctl status php8.2-fpm
|
|
|
|
# Test applicazione
|
|
curl -I http://192.168.0.43
|
|
curl -I http://netgescon.local
|
|
|
|
# Test database
|
|
php artisan tinker
|
|
# User::count()
|
|
# exit
|
|
```
|
|
|
|
### Script di Installazione Automatica
|
|
```bash
|
|
#!/bin/bash
|
|
# auto-setup-netgescon.sh
|
|
|
|
echo "🚀 Avvio installazione automatica Netgescon..."
|
|
|
|
# Controllo root
|
|
if [[ $EUID -eq 0 ]]; then
|
|
echo "❌ Non eseguire questo script come root"
|
|
exit 1
|
|
fi
|
|
|
|
# Aggiornamento sistema
|
|
echo "📦 Aggiornamento sistema..."
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Installazione software
|
|
echo "🔧 Installazione software..."
|
|
sudo apt install -y nginx mysql-server php8.2-fpm php8.2-mysql \
|
|
php8.2-xml php8.2-curl php8.2-gd php8.2-mbstring php8.2-zip \
|
|
php8.2-bcmath php8.2-intl curl wget git vim htop unzip
|
|
|
|
# Configurazione database
|
|
echo "🗃️ Configurazione database..."
|
|
sudo mysql -e "CREATE DATABASE netgescon CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
|
sudo mysql -e "CREATE USER 'netgescon_user'@'localhost' IDENTIFIED BY 'password_sicura_123!';"
|
|
sudo mysql -e "GRANT ALL PRIVILEGES ON netgescon.* TO 'netgescon_user'@'localhost';"
|
|
sudo mysql -e "SET GLOBAL log_bin_trust_function_creators = 1;"
|
|
sudo mysql -e "FLUSH PRIVILEGES;"
|
|
|
|
# Configurazione directory
|
|
echo "📁 Configurazione directory..."
|
|
sudo mkdir -p /var/www/netgescon
|
|
sudo chown -R $USER:www-data /var/www/netgescon
|
|
sudo chmod -R 755 /var/www/netgescon
|
|
|
|
echo "✅ Installazione base completata!"
|
|
echo "🔄 Ora eseguire la sincronizzazione dal server locale"
|
|
```
|
|
|
|
---
|
|
|
|
## 5.6 Gestione Codici Univoci
|
|
|
|
### Trigger MySQL per Codici Univoci
|
|
```sql
|
|
-- Trigger per amministratori
|
|
CREATE TRIGGER generate_codice_univoco_amministratori
|
|
BEFORE INSERT ON amministratori
|
|
FOR EACH ROW
|
|
BEGIN
|
|
DECLARE codice_temp VARCHAR(8);
|
|
DECLARE codice_exists INT DEFAULT 1;
|
|
|
|
IF NEW.codice_univoco IS NULL OR NEW.codice_univoco = "" THEN
|
|
WHILE codice_exists > 0 DO
|
|
SET codice_temp = CONCAT(
|
|
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
|
|
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
|
|
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
|
|
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
|
|
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
|
|
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
|
|
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1),
|
|
SUBSTRING("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", FLOOR(1 + (RAND() * 36)), 1)
|
|
);
|
|
|
|
SELECT COUNT(*) INTO codice_exists
|
|
FROM amministratori
|
|
WHERE codice_univoco = codice_temp;
|
|
END WHILE;
|
|
|
|
SET NEW.codice_univoco = codice_temp;
|
|
END IF;
|
|
END;
|
|
```
|
|
|
|
### Observer Laravel Alternative
|
|
```php
|
|
<?php
|
|
|
|
namespace App\Observers;
|
|
|
|
use App\Models\Amministratore;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class AmministratoreObserver
|
|
{
|
|
public function creating(Amministratore $amministratore): void
|
|
{
|
|
if (empty($amministratore->codice_univoco)) {
|
|
$amministratore->codice_univoco = $this->generateCodiceUnivoco();
|
|
}
|
|
}
|
|
|
|
private function generateCodiceUnivoco(): string
|
|
{
|
|
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
|
|
|
do {
|
|
$codice = '';
|
|
for ($i = 0; $i < 8; $i++) {
|
|
$codice .= $characters[random_int(0, 35)];
|
|
}
|
|
|
|
$exists = DB::table('amministratori')
|
|
->where('codice_univoco', $codice)
|
|
->exists();
|
|
} while ($exists);
|
|
|
|
return $codice;
|
|
}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 5.7 Troubleshooting
|
|
|
|
### Problemi Comuni di Sincronizzazione
|
|
|
|
#### Errore: "No such file or directory"
|
|
```bash
|
|
# Problema: Path con tilde non espansa
|
|
# Soluzione: Usare $HOME invece di ~
|
|
LOCAL_PATH="$HOME/netgescon/netgescon-laravel/"
|
|
# invece di
|
|
LOCAL_PATH="~/netgescon/netgescon-laravel/"
|
|
```
|
|
|
|
#### Errore: "Permission denied"
|
|
```bash
|
|
# Problema: Permessi SSH o directory
|
|
# Soluzione: Configura chiavi SSH
|
|
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
|
|
ssh-copy-id michele@192.168.0.43
|
|
|
|
# Verifica permessi directory
|
|
sudo chown -R michele:www-data /var/www/netgescon
|
|
sudo chmod -R 755 /var/www/netgescon
|
|
```
|
|
|
|
#### Errore: "MySQL connection refused"
|
|
```bash
|
|
# Problema: MySQL non avviato o configurato male
|
|
# Soluzione: Verifica servizio
|
|
sudo systemctl status mysql
|
|
sudo systemctl start mysql
|
|
|
|
# Verifica configurazione
|
|
sudo mysql -u root -p
|
|
SHOW DATABASES;
|
|
SHOW GRANTS FOR 'netgescon_user'@'localhost';
|
|
```
|
|
|
|
#### Errore: "Nginx 502 Bad Gateway"
|
|
```bash
|
|
# Problema: PHP-FPM non funzionante
|
|
# Soluzione: Riavvia servizi
|
|
sudo systemctl restart php8.2-fpm
|
|
sudo systemctl restart nginx
|
|
|
|
# Verifica configurazione
|
|
sudo nginx -t
|
|
sudo systemctl status php8.2-fpm
|
|
```
|
|
|
|
### Comandi di Diagnostica
|
|
```bash
|
|
# Verifica connessione rete
|
|
ping 192.168.0.43
|
|
ssh -v michele@192.168.0.43
|
|
|
|
# Verifica servizi
|
|
sudo systemctl status nginx
|
|
sudo systemctl status mysql
|
|
sudo systemctl status php8.2-fpm
|
|
|
|
# Verifica log
|
|
sudo tail -f /var/log/nginx/error.log
|
|
sudo tail -f /var/log/mysql/error.log
|
|
tail -f /var/www/netgescon/storage/logs/laravel.log
|
|
|
|
# Verifica permessi
|
|
ls -la /var/www/netgescon/
|
|
ls -la /var/www/netgescon/storage/
|
|
ls -la /var/www/netgescon/bootstrap/cache/
|
|
```
|
|
|
|
---
|
|
|
|
## 5.8 Monitoraggio e Automazione
|
|
|
|
### Script di Monitoraggio
|
|
```bash
|
|
#!/bin/bash
|
|
# monitor-netgescon.sh
|
|
|
|
LOG_FILE="/var/log/netgescon-monitor.log"
|
|
ALERT_EMAIL="admin@example.com"
|
|
|
|
check_service() {
|
|
service=$1
|
|
if ! systemctl is-active --quiet $service; then
|
|
echo "$(date): ❌ $service is not running" | tee -a $LOG_FILE
|
|
sudo systemctl start $service
|
|
return 1
|
|
else
|
|
echo "$(date): ✅ $service is running" | tee -a $LOG_FILE
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
check_disk_space() {
|
|
usage=$(df /var/www | awk 'NR==2 {print $5}' | sed 's/%//')
|
|
if [ $usage -gt 80 ]; then
|
|
echo "$(date): ⚠️ Disk usage is ${usage}%" | tee -a $LOG_FILE
|
|
return 1
|
|
else
|
|
echo "$(date): ✅ Disk usage is ${usage}%" | tee -a $LOG_FILE
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
check_application() {
|
|
response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost)
|
|
if [ $response -eq 200 ]; then
|
|
echo "$(date): ✅ Application is responding" | tee -a $LOG_FILE
|
|
return 0
|
|
else
|
|
echo "$(date): ❌ Application returned $response" | tee -a $LOG_FILE
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Esegui controlli
|
|
check_service nginx
|
|
check_service mysql
|
|
check_service php8.2-fpm
|
|
check_disk_space
|
|
check_application
|
|
```
|
|
|
|
### Automazione con Cron
|
|
```bash
|
|
# Aggiungi al crontab
|
|
crontab -e
|
|
|
|
# Monitoring ogni 5 minuti
|
|
*/5 * * * * /home/michele/scripts/monitor-netgescon.sh
|
|
|
|
# Backup database giornaliero
|
|
0 2 * * * mysqldump -u netgescon_user -p netgescon > /var/backups/netgescon_$(date +%Y%m%d).sql
|
|
|
|
# Sincronizzazione automatica (se necessario)
|
|
0 */6 * * * /home/michele/netgescon/netgescon-laravel/sync-to-remote.sh
|
|
```
|
|
|
|
### Script di Backup Automatico
|
|
```bash
|
|
#!/bin/bash
|
|
# backup-netgescon.sh
|
|
|
|
BACKUP_DIR="/var/backups/netgescon"
|
|
DB_NAME="netgescon"
|
|
DB_USER="netgescon_user"
|
|
DB_PASS="password_sicura_123!"
|
|
APP_DIR="/var/www/netgescon"
|
|
|
|
mkdir -p $BACKUP_DIR
|
|
|
|
# Backup database
|
|
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_$(date +%Y%m%d_%H%M%S).sql
|
|
|
|
# Backup files
|
|
tar -czf $BACKUP_DIR/files_$(date +%Y%m%d_%H%M%S).tar.gz -C $APP_DIR .
|
|
|
|
# Cleanup vecchi backup (mantieni 7 giorni)
|
|
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
|
|
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
|
|
|
|
echo "Backup completato: $(date)"
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 **COMANDI RAPIDI**
|
|
|
|
### Sincronizzazione
|
|
```bash
|
|
# Sync completo
|
|
./sync-to-remote.sh
|
|
|
|
# Solo rsync
|
|
rsync -rz --delete --checksum --exclude-from=.rsyncignore $HOME/netgescon/netgescon-laravel/ michele@192.168.0.43:/var/www/netgescon/
|
|
|
|
# Sync con statistiche
|
|
rsync -rz --delete --checksum --stats --exclude-from=.rsyncignore $HOME/netgescon/netgescon-laravel/ michele@192.168.0.43:/var/www/netgescon/
|
|
```
|
|
|
|
### Manutenzione Remota
|
|
```bash
|
|
# Connessione server
|
|
ssh michele@192.168.0.43
|
|
|
|
# Riavvio servizi
|
|
sudo systemctl restart nginx php8.2-fpm mysql
|
|
|
|
# Verifica stato
|
|
sudo systemctl status nginx mysql php8.2-fpm
|
|
|
|
# Update applicazione
|
|
cd /var/www/netgescon
|
|
composer install --no-dev --optimize-autoloader
|
|
php artisan migrate --force
|
|
php artisan config:cache
|
|
```
|
|
|
|
### Diagnostica
|
|
```bash
|
|
# Verifica connessione
|
|
ping 192.168.0.43
|
|
ssh -v michele@192.168.0.43
|
|
|
|
# Log monitoring
|
|
sudo tail -f /var/log/nginx/error.log
|
|
tail -f /var/www/netgescon/storage/logs/laravel.log
|
|
|
|
# Test applicazione
|
|
curl -I http://192.168.0.43
|
|
```
|
|
|
|
---
|
|
|
|
**Data ultima modifica**: 18 Luglio 2025
|
|
**Versione**: 1.0
|
|
**Stato**: Aggiornato con script di sincronizzazione ottimizzati
|