# Installare sul tuo server

Puoi far girare draften sul tuo server. Posta, bozze e chiavi restano allora da
te; esce solo ciò che invii al fornitore del modello linguistico (oppure niente,
con un modello locale).

Questa pagina è una panoramica di come è fatta un’installazione. La procedura
vera e propria è in [Installazione passo passo](/it/admin/installing).

## Il pacchetto e la licenza

Ogni release di draften è un unico **pacchetto**, un file `draften-<versione>.tar`.
Contiene le immagini di tutti i servizi, i file che li avviano, un elenco firmato
di tutto il contenuto e il comando `./draften` che gestisce l’installazione. Al
server non serve altro che Docker.

Per farlo girare ti serve una **licenza** – un file che ricevi da noi e carichi
nell’interfaccia. Limita il numero di caselle e di assistenti, e la sua chiave
serve anche per scaricare le nuove release. Maggiori dettagli in [La licenza](/it/admin/licence).

## Di cosa è fatta un’installazione

Tutto gira in Docker tramite `docker compose`:

| Servizio | Cosa fa |
|---|---|
| `db` | il database MariaDB – contiene tutto: impostazioni, istruzioni, messaggi, bozze, segreti cifrati. Nessun’altra macchina lo tocca |
| `worker` | legge le caselle, chiama i modelli, scrive le bozze, impara, esegue i passaggi della procedura guidata. Possono girarne diversi |
| `web-blue`, `web-green` | l’interfaccia web e l’API in due colori: uno serve, l’altro aspetta la versione successiva – per questo gli aggiornamenti non causano interruzioni |
| `proxy` | l’accesso dall’esterno: passa da un colore web all’altro e facoltativamente termina l’HTTPS |
| `updater` | facoltativo: esegue ciò che l’operatore chiede in Installazione (aggiornamento, ritorno alla versione precedente, numero di processi, sostituzione della chiave, backup) e fa ogni giorno il backup del database |
| `cloudflared` | facoltativo: pubblicazione dell’interfaccia tramite un Cloudflare Tunnel |

L’interfaccia e il worker non comunicano direttamente – entrambi lavorano con lo
stesso database; ciò che richiede la posta o un modello, l’interfaccia lo mette
in coda come job per il worker.

## Cosa ti servirà

- un server x86-64 con Linux e Docker 24 o più recente (con il plugin compose),
  4 GB di memoria e 20 GB di disco,
- l’indirizzo a cui sarà raggiungibile l’interfaccia, con HTTPS – un certificato
  direttamente in draften, oppure il tuo reverse proxy o tunnel,
- l’accesso alle caselle: una registrazione dell’app in Microsoft Entra, un
  account di servizio di Google Workspace o i dati IMAP,
- una chiave API per un modello (Anthropic, OpenAI) o un tuo server compatibile con OpenAI,
- una licenza da noi.

## HTTPS

- **In draften**: dai all’installer il certificato e la sua chiave (PEM).
  draften ascolta allora sulla porta 443 e reindirizza dalla porta 80. Un
  certificato rinnovato lo installi con `./draften certificate new.pem new.key` senza
  perdere nemmeno una richiesta. Il certificato te lo procuri tu (da
  un’autorità di certificazione o con un client ACME).
- **Davanti a draften**: senza certificato, draften ascolta su
  `127.0.0.1:8085` e l’HTTPS lo termina il tuo proxy o tunnel.

## L’updater

L’updater è un servizio facoltativo che esegue ciò che l’operatore chiede in
**Installazione → Installazione**: l’aggiornamento a una nuova versione, il
ritorno a quella precedente, la modifica del numero di processi worker, la
sostituzione della chiave di cifratura e il backup del database. Inoltre fa da
solo il backup del database ogni giorno. Per farlo esegue lo stesso
`./draften` che eseguiresti tu.

L’updater ha accesso a Docker, il che significa diritti di root sul server.
L’interfaccia stessa non tocca mai Docker – scrive solo una richiesta nel
database per l’updater. Si attiva durante l’installazione
(`COMPOSE_PROFILES=updater` in `.env`); senza, tutto funziona dalla riga di
comando.

## Impostazioni in `.env`

Il file `.env` nella cartella dell’installazione lo scrive l’installer ed è
leggibile solo dal suo proprietario. Contiene l’infrastruttura e i segreti;
tutto ciò che riguarda gli assistenti è nel database e si imposta nell’interfaccia.

| Variabile | A cosa serve |
|---|---|
| `DRAFTEN_VERSION`, `DRAFTEN_EDITION` | la versione in esecuzione e l’edizione (`onprem`) |
| `DB_ROOT_PASSWORD`, `DB_PASSWORD` | le password del database |
| `MASTER_KEY` | la chiave che cifra i segreti nel database (chiavi API, accesso alle caselle, client di accesso). **Tienine una copia fuori dal server** |
| `MASTER_KEY_PREVIOUS` | la chiave precedente dopo la sostituzione, finché `backups/` contiene dump di prima |
| `WEB_APP_SECRET` | una stringa casuale che firma le sessioni |
| `WEB_PUBLIC_URL` | l’indirizzo a cui le persone aprono l’interfaccia; da questo si costruiscono gli indirizzi di reindirizzamento per l’accesso |
| `WEB_BIND`, `DRAFTEN_TLS`, `WEB_TLS_BIND` | dove ascoltano HTTP e HTTPS |
| `COMPOSE_PROFILES` | servizi facoltativi: `updater`, `tunnel` |
| `DRAFTEN_BACKUPS` | quanti dump del database di prima di un aggiornamento tenere in `backups/` (predefinito 3) |
| `DRAFTEN_DAILY_BACKUPS` | quanti backup giornalieri e su richiesta tenere (predefinito 7; `0` disattiva quello giornaliero) |
| `DRAFTEN_BACKUP_AT`, `DRAFTEN_TIMEZONE` | l’ora del backup giornaliero e il suo fuso (predefiniti `01:00`, `Europe/Prague`); l’ora impostata nell’interfaccia ha la precedenza |
| `CLOUDFLARE_TUNNEL_TOKEN` | solo con un Cloudflare Tunnel |
| `INTERVAL_SECONDS`, `WORKER_CONCURRENCY` | l’intervallo predefinito dei controlli e i controlli simultanei (meglio impostarli nell’interfaccia) |
| `WORKER_REPLICAS` | quanti processi `worker` girano su questa macchina (predefinito 1), vedi [Gestione e capacità](/it/admin/operations) |

Un valore con il segno `$` va scritto come `$$` in `.env` – altrimenti la parte
dopo il dollaro si perde senza avvisi. Le chiavi generate con `openssl rand -hex 32`
non contengono mai il dollaro.

## Cosa si trova dove

| | |
|---|---|
| `.env` | le impostazioni e i segreti dell’installazione |
| `compose.yaml`, `proxy/` | come girano i container; ogni aggiornamento li sostituisce |
| `backups/` | i dump del database: giornalieri, su richiesta e di prima degli aggiornamenti – copiali fuori dal server |
| `data/` | il log e i report del worker |
| `updates/` | i pacchetti in attesa di installazione; anche l’updater scarica qui |
| `NOTES.md` | cosa ha cambiato la release installata |

## Per proseguire

- [Installazione passo passo](/it/admin/installing),
- [Amministrazione dell’installazione](/it/admin/installation-admin) – versione,
  licenza, chiavi e mittente predefiniti, organizzazioni,
- [Aggiornare con l’updater](/it/admin/updating-with-the-updater)
  e [dalla riga di comando](/it/admin/updating),
- [Gestione e capacità](/it/admin/operations),
- [Backup e ripristino](/it/admin/backup-and-restore),
- [Risoluzione dei problemi](/it/admin/troubleshooting).
