# Installazione GestTurni su VPS OVH

Guida per pubblicare l'app Node.js/Express `gestturni` (storage su file JSON in `data/db.json`, nessun database esterno) su un VPS OVH Ubuntu/Debian.

## 1. Provisioning del VPS

- Crea un VPS OVH (basta il piano più economico: 1 vCPU / 2GB RAM è più che sufficiente).
- Scegli Ubuntu 22.04 LTS come immagine.
- Annota l'IP pubblico e la password root (o carica la tua chiave SSH in fase di creazione).

## 2. Accesso iniziale e hardening di base

```bash
ssh root@TUO_IP_VPS
apt update && apt upgrade -y

# Crea un utente non-root
adduser deploy
usermod -aG sudo deploy

# Copia la tua chiave SSH sul nuovo utente (dal tuo PC)
ssh-copy-id deploy@TUO_IP_VPS
```

Poi disabilita il login root via SSH e la password auth in `/etc/ssh/sshd_config`
(`PermitRootLogin no`, `PasswordAuthentication no`), e riavvia `sshd`.

Firewall di base:

```bash
sudo apt install ufw -y
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```

## 3. Installazione Node.js

```bash
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
node -v && npm -v
```

## 4. Trasferimento del codice

Il progetto non ha ancora un repository git. Il modo più semplice è `rsync`
dal tuo PC (escludendo `node_modules`):

```bash
# Da eseguire dal tuo PC, dentro la cartella del progetto
rsync -avz --exclude 'node_modules' --exclude '.git' \
  ./ deploy@TUO_IP_VPS:/home/deploy/gestturni/
```

In alternativa, per semplificare gli aggiornamenti futuri, conviene inizializzare
un repo git (anche privato su GitHub/GitLab) e fare `git clone` sul VPS — così
gli aggiornamenti si riducono a un `git pull`.

## 5. Installazione dipendenze

```bash
ssh deploy@TUO_IP_VPS
cd ~/gestturni
npm install --omit=dev
```

## 6. Variabili d'ambiente

Il codice legge `PORT`, `SESSION_SECRET` e `NODE_ENV` da `process.env`
(server.js righe 11, 21, 222). Se non imposti `SESSION_SECRET`, l'app ne genera
uno e lo salva in `data/.session_secret` — va bene, ma assicurati che quel file
**non finisca mai in un backup pubblico o in un repo**.

Le variabili vengono passate direttamente al processo tramite PM2 (vedi punto 7),
non serve un file `.env` perché il progetto non usa `dotenv`.

## 7. Process manager: PM2

```bash
sudo npm install -g pm2

cd ~/gestturni
NODE_ENV=production PORT=3000 pm2 start server.js --name gestturni

pm2 save
pm2 startup systemd   # esegui il comando che ti stampa, con sudo
```

PM2 garantisce riavvio automatico in caso di crash e all'avvio del VPS.

## 8. Reverse proxy Nginx + HTTPS

```bash
sudo apt install nginx -y
```

Crea `/etc/nginx/sites-available/gestturni`:

```nginx
server {
    listen 80;
    server_name tuodominio.it;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

```bash
sudo ln -s /etc/nginx/sites-available/gestturni /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
```

Certificato SSL gratuito con Certbot:

```bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tuodominio.it
```

Certbot configura automaticamente HTTPS e il rinnovo automatico del certificato.

Nel DNS del tuo dominio (anche su OVH), punta un record A verso l'IP del VPS.

## 9. Backup dei dati

Tutto lo storage è su file (`data/db.json`, `data/audit.log`), quindi il backup
si riduce a copiare quella cartella periodicamente:

```bash
# Cron giornaliero sul VPS
0 3 * * * tar -czf /home/deploy/backups/gestturni-$(date +\%F).tar.gz -C /home/deploy/gestturni data
```

Valuta di scaricare periodicamente questi backup fuori dal VPS (es. rsync verso
il tuo PC o storage OVH Object Storage).

## 10. Aggiornamenti futuri

Con rsync:

```bash
rsync -avz --exclude 'node_modules' --exclude '.git' --exclude 'data' \
  ./ deploy@TUO_IP_VPS:/home/deploy/gestturni/
ssh deploy@TUO_IP_VPS "cd ~/gestturni && npm install --omit=dev && pm2 restart gestturni"
```

Nota: escludi sempre `data/` dal sync verso il VPS per non sovrascrivere il
database di produzione con quello locale.
