# GIX Site Backend - Gestione PM2

Questo progetto utilizza PM2 per la gestione del processo Node.js in produzione.

## 🚀 Avvio Rapido

### Prerequisiti
- Node.js installato
- PM2 installato globalmente: `npm install -g pm2`

### Comandi NPM Disponibili

```bash
# Avvio con PM2 (modalità sviluppo)
npm run pm2:start

# Stop dell'applicazione
npm run pm2:stop

# Restart dell'applicazione
npm run pm2:restart

# Reload senza downtime
npm run pm2:reload

# Visualizza logs in tempo reale
npm run pm2:logs

# Visualizza status delle applicazioni
npm run pm2:status

# Monitor delle prestazioni
npm run pm2:monit

# Rimuovi applicazione da PM2
npm run pm2:delete
```

### Script di Gestione Avanzato

È disponibile uno script bash per una gestione più semplice:

```bash
# Rendi eseguibile (solo la prima volta)
chmod +x pm2-manager.sh

# Comandi disponibili
./pm2-manager.sh start     # Avvia in modalità sviluppo
./pm2-manager.sh stop      # Ferma l'applicazione
./pm2-manager.sh restart   # Riavvia
./pm2-manager.sh reload    # Reload senza downtime
./pm2-manager.sh logs      # Mostra logs
./pm2-manager.sh status    # Mostra status
./pm2-manager.sh monitor   # Apre monitor
./pm2-manager.sh dev       # Modalità sviluppo
./pm2-manager.sh prod      # Modalità produzione
./pm2-manager.sh delete    # Rimuove da PM2
./pm2-manager.sh setup     # Configura avvio automatico
```

## 📊 Modalità di Esecuzione

### Sviluppo
- **Config**: `ecosystem.config.cjs`
- **Istanze**: 1
- **Modalità**: fork
- **Auto-restart**: abilitato
- **Watch**: disabilitato

### Produzione
- **Config**: `ecosystem.prod.config.cjs`
- **Istanze**: max (tutti i core CPU)
- **Modalità**: cluster
- **Auto-restart**: abilitato
- **Memory limit**: 512MB

## 🔧 Configurazione

### File di Configurazione

- `ecosystem.config.cjs` - Configurazione per sviluppo
- `ecosystem.prod.config.cjs` - Configurazione per produzione

### Variabili d'Ambiente

Le variabili d'ambiente sono configurate nei file ecosystem:

```javascript
env: {
  NODE_ENV: 'development',
  PORT: 3000
},
env_production: {
  NODE_ENV: 'production',
  PORT: 3000
}
```

### Logs

I logs sono salvati nella directory `logs/`:
- `out.log` - Output standard
- `err.log` - Errori
- `combined.log` - Log combinati
- `prod-*.log` - Logs di produzione

## 🛠️ Comandi PM2 Utili

```bash
# Lista tutte le applicazioni
pm2 list

# Informazioni dettagliate
pm2 show gix-flow-backend

# Restart di tutte le app
pm2 restart all

# Stop di tutte le app
pm2 stop all

# Reset dei restart counter
pm2 reset gix-flow-backend

# Flush dei logs
pm2 flush

# Salva configurazione attuale
pm2 save

# Ripristina configurazione salvata
pm2 resurrect
```

## 🔄 Avvio Automatico al Boot

Per configurare l'avvio automatico al riavvio del server:

```bash
# Genera script di startup (esegui come root)
pm2 startup

# Salva configurazione attuale
pm2 save
```

## 📈 Monitoraggio

### Monitor in tempo reale
```bash
pm2 monit
```

### Logs in tempo reale
```bash
pm2 logs gix-flow-backend --lines 100
```

### Metriche personalizzate
PM2 può essere integrato con sistemi di monitoraggio esterni come:
- PM2 Plus (keymetrics.io)
- Grafana + InfluxDB
- New Relic
- DataDog

## 🚨 Troubleshooting

### L'applicazione non si avvia
```bash
# Controlla i logs
pm2 logs gix-flow-backend

# Controlla lo status
pm2 status

# Restart forzato
pm2 restart gix-flow-backend --force
```

### Memory leak o problemi di memoria
```bash
# Controlla utilizzo memoria
pm2 monit

# Configura restart automatico per memoria
# (già configurato in ecosystem.config.cjs)
```

### Problemi di connessione database
- Verifica che MariaDB/MySQL sia in esecuzione
- Controlla le credenziali nel file `.env`
- Verifica la configurazione di rete

## 📝 Note

- Il backend utilizza ES modules (`"type": "module"`)
- I file di configurazione PM2 usano estensione `.cjs` per compatibilità
- La porta predefinita è 3000
- Auto-restart è abilitato per crash o errori
- Watch mode è disabilitato per prestazioni migliori
