# Installer sur votre propre serveur

Vous pouvez faire tourner draften sur votre propre serveur. Les e-mails, les
brouillons et les clés restent alors chez vous ; seul ce que vous envoyez au
fournisseur du modèle de langage sort (ou rien du tout, avec un modèle local).

Cette page présente la structure d’une installation. La marche à suivre
elle-même se trouve dans [Installation étape par étape](/fr/admin/installing).

## Le paquet et la licence

Chaque version de draften est un seul **paquet**, un fichier
`draften-<version>.tar`. Il contient les images de tous les services, les
fichiers qui les démarrent, une liste signée de tout son contenu et la
commande `./draften`, qui gère l’installation. Le serveur n’a besoin de rien
d’autre que de Docker.

Pour le faire tourner, il vous faut une **licence** – un fichier que vous
recevez de notre part et que vous importez dans l’interface. Elle limite le
nombre de boîtes mail et d’assistants, et sa clé sert aussi à télécharger les
nouvelles versions. Plus d’informations dans [La licence](/fr/admin/licence).

## De quoi se compose une installation

Tout tourne dans Docker via `docker compose` :

| Service | Ce qu’il fait |
|---|---|
| `db` | la base de données MariaDB – contient tout : paramètres, consignes, messages, brouillons, secrets chiffrés. Aucune autre machine n’y accède |
| `worker` | lit les boîtes mail, appelle les modèles, rédige les brouillons, apprend, exécute les étapes de la mise en route. Plusieurs peuvent tourner |
| `web-blue`, `web-green` | l’interface web et l’API en deux couleurs : l’une sert, l’autre attend la version suivante – c’est pourquoi les mises à jour n’entraînent aucune interruption |
| `proxy` | le point d’entrée depuis l’extérieur : bascule entre les couleurs du web et termine éventuellement HTTPS |
| `updater` | facultatif : exécute ce que l’exploitant demande sous Installation (mise à jour, retour à une version, nombre de processus, remplacement de la clé, sauvegarde) et sauvegarde chaque jour la base de données |
| `cloudflared` | facultatif : publication de l’interface via un Cloudflare Tunnel |

L’interface et le worker ne communiquent pas directement – tous deux
travaillent avec la même base de données ; ce qui nécessite les e-mails ou un
modèle, l’interface le met en file d’attente sous forme de tâche pour le
worker.

## Ce dont vous aurez besoin

- un serveur x86-64 sous Linux avec Docker 24 ou plus récent (avec le plugin
  compose), 4 Go de mémoire et 20 Go de disque,
- l’adresse à laquelle l’interface sera joignable, en HTTPS – un certificat
  directement dans draften, ou votre reverse proxy ou tunnel,
- un accès aux boîtes mail : une inscription d’application dans Microsoft
  Entra, un compte de service Google Workspace ou des identifiants IMAP,
- une clé API de modèle (Anthropic, OpenAI) ou votre propre serveur compatible
  OpenAI,
- une licence de notre part.

## HTTPS

- **Dans draften** : donnez à l’installateur le certificat et sa clé (PEM).
  draften écoute alors sur le port 443 et redirige depuis le port 80. Vous
  déployez un certificat renouvelé avec `./draften certificate new.pem new.key`
  sans perdre une seule requête. Vous vous procurez le certificat vous-même
  (auprès d’une autorité de certification ou avec un client ACME).
- **Devant draften** : sans certificat, draften écoute sur `127.0.0.1:8085`
  et votre proxy ou tunnel termine HTTPS.

## L’updater

L’updater est un service facultatif qui exécute ce que l’exploitant demande
sous **Installation → Installation** : une mise à jour vers une nouvelle
version, le retour à la précédente, le changement du nombre de processus
worker, le remplacement de la clé de chiffrement et une sauvegarde de la base
de données. En plus, il sauvegarde lui-même la base de données chaque jour.
Pour cela, il lance le même `./draften` que vous lanceriez vous-même.

L’updater a accès à Docker, ce qui équivaut aux droits root sur le serveur.
L’interface elle-même ne touche jamais à Docker – elle se contente d’écrire une
demande dans la base de données à l’intention de l’updater. Il est activé à
l’installation (`COMPOSE_PROFILES=updater` dans `.env`) ; sans lui, tout
fonctionne en ligne de commande.

## Paramètres dans `.env`

Le fichier `.env` du répertoire d’installation est écrit par l’installateur et
lisible uniquement par son propriétaire. Il contient l’infrastructure et les
secrets ; tout ce qui concerne les assistants se trouve dans la base de
données et se règle dans l’interface.

| Variable | À quoi elle sert |
|---|---|
| `DRAFTEN_VERSION`, `DRAFTEN_EDITION` | la version en service et l’édition (`onprem`) |
| `DB_ROOT_PASSWORD`, `DB_PASSWORD` | mots de passe de la base de données |
| `MASTER_KEY` | la clé qui chiffre les secrets dans la base de données (clés API, accès aux boîtes mail, clients de connexion). **Conservez-en une copie hors du serveur** |
| `MASTER_KEY_PREVIOUS` | la clé précédente après son remplacement, tant que `backups/` contient des dumps antérieurs |
| `WEB_APP_SECRET` | une chaîne aléatoire qui signe les sessions |
| `WEB_PUBLIC_URL` | l’adresse à laquelle les gens ouvrent l’interface ; les adresses de redirection pour la connexion sont construites à partir d’elle |
| `WEB_BIND`, `DRAFTEN_TLS`, `WEB_TLS_BIND` | où HTTP et HTTPS écoutent |
| `COMPOSE_PROFILES` | services facultatifs : `updater`, `tunnel` |
| `DRAFTEN_BACKUPS` | combien de dumps de la base de données antérieurs à une mise à jour conserver dans `backups/` (3 par défaut) |
| `DRAFTEN_DAILY_BACKUPS` | combien de sauvegardes quotidiennes et de sauvegardes sur demande conserver (7 par défaut ; `0` désactive la sauvegarde quotidienne) |
| `DRAFTEN_BACKUP_AT`, `DRAFTEN_TIMEZONE` | l’heure de la sauvegarde quotidienne et son fuseau (par défaut `01:00`, `Europe/Prague`) ; une heure définie dans l’interface l’emporte |
| `CLOUDFLARE_TUNNEL_TOKEN` | uniquement avec un Cloudflare Tunnel |
| `INTERVAL_SECONDS`, `WORKER_CONCURRENCY` | l’intervalle de relève par défaut et le nombre de relèves simultanées (mieux vaut les régler dans l’interface) |
| `WORKER_REPLICAS` | combien de processus `worker` tournent sur cette machine (1 par défaut), voir [Exploitation et capacité](/fr/admin/operations) |

Une valeur contenant le signe `$` doit être écrite `$$` dans `.env` – sinon la
partie qui suit le dollar est perdue sans avertissement. Les clés générées avec
`openssl rand -hex 32` ne contiennent jamais de dollar.

## Où se trouve quoi

| | |
|---|---|
| `.env` | les paramètres et les secrets de l’installation |
| `compose.yaml`, `proxy/` | la façon dont les conteneurs tournent ; chaque mise à jour les remplace |
| `backups/` | les dumps de la base de données : quotidiens, sur demande et antérieurs aux mises à jour – copiez-les hors du serveur |
| `data/` | le journal et les rapports du worker |
| `updates/` | les paquets en attente d’installation ; l’updater y télécharge aussi |
| `NOTES.md` | ce qu’a changé la version installée |

## Pour aller plus loin

- [Installation étape par étape](/fr/admin/installing),
- [Administration de l’installation](/fr/admin/installation-admin) – version,
  licence, clés et expéditeur par défaut, organisations,
- [Mettre à jour avec l’updater](/fr/admin/updating-with-the-updater)
  et [en ligne de commande](/fr/admin/updating),
- [Exploitation et capacité](/fr/admin/operations),
- [Sauvegarde et restauration](/fr/admin/backup-and-restore),
- [Résolution des problèmes](/fr/admin/troubleshooting).
