# Installation auf dem eigenen Server

Sie können draften auf Ihrem eigenen Server betreiben. Post, Entwürfe und
Schlüssel bleiben dann bei Ihnen; hinaus geht nur, was Sie an den Anbieter des
Sprachmodells senden (oder gar nichts, mit einem lokalen Modell).

Diese Seite gibt einen Überblick, wie eine Installation aufgebaut ist. Den
Ablauf selbst beschreibt [Installation Schritt für Schritt](/de/admin/installing).

## Das Paket und die Lizenz

Jede Version von draften ist ein **Paket**, eine Datei
`draften-<version>.tar`. Es enthält die Images aller Dienste, die Dateien, die
sie starten, eine signierte Liste von allem, was darin ist, und den Befehl
`./draften`, der die Installation verwaltet. Der Server braucht nichts außer
Docker.

Für den Betrieb brauchen Sie eine **Lizenz** – eine Datei, die Sie von uns
erhalten und in der Oberfläche hochladen. Sie begrenzt die Zahl der Postfächer
und Assistenten, und ihr Schlüssel dient auch zum Herunterladen neuer
Versionen. Mehr unter [Die Lizenz](/de/admin/licence).

## Woraus eine Installation besteht

Alles läuft in Docker über `docker compose`:

| Dienst | Was er tut |
|---|---|
| `db` | die Datenbank MariaDB – enthält alles: Einstellungen, Anweisungen, Nachrichten, Entwürfe, verschlüsselte Geheimnisse. Nichts von einem anderen Rechner greift auf sie zu |
| `worker` | liest die Postfächer, ruft die Modelle auf, schreibt Entwürfe, lernt, führt die Schritte der Einrichtung aus. Es können mehrere laufen |
| `web-blue`, `web-green` | die Weboberfläche und API in zwei Farben: eine bedient, die andere wartet auf die nächste Version – deshalb verursachen Aktualisierungen keinen Ausfall |
| `proxy` | der Zugang von außen: schaltet zwischen den Farben der Weboberfläche um und beendet optional HTTPS |
| `updater` | optional: führt aus, was der Betreiber unter Installation anfordert (Aktualisierung, Zurücksetzen, Zahl der Prozesse, Ersetzen des Schlüssels, Sicherung) und sichert jeden Tag die Datenbank |
| `cloudflared` | optional: Veröffentlichung der Oberfläche über einen Cloudflare Tunnel |

Oberfläche und Worker sprechen nicht direkt miteinander – beide arbeiten mit
derselben Datenbank; was Post oder ein Modell braucht, stellt die Oberfläche
als Job für den Worker in die Warteschlange.

## Was Sie brauchen

- einen x86-64-Server mit Linux und Docker 24 oder neuer (mit dem
  Compose-Plugin), 4 GB Arbeitsspeicher und 20 GB Speicherplatz,
- die Adresse, unter der die Oberfläche erreichbar sein wird, mit HTTPS – ein
  Zertifikat direkt in draften oder Ihr Reverse Proxy oder Tunnel,
- Zugriff auf die Postfächer: eine App-Registrierung in Microsoft Entra, ein
  Dienstkonto von Google Workspace oder IMAP-Angaben,
- einen API-Schlüssel für Modelle (Anthropic, OpenAI) oder Ihren eigenen
  OpenAI-kompatiblen Server,
- eine Lizenz von uns.

## HTTPS

- **In draften**: Geben Sie dem Installationsprogramm das Zertifikat und seinen
  Schlüssel (PEM). draften lauscht dann auf Port 443 und leitet von Port 80 um.
  Ein erneuertes Zertifikat spielen Sie mit `./draften certificate new.pem new.key`
  ein, ohne eine einzige Anfrage zu verlieren. Das Zertifikat beschaffen Sie
  selbst (von einer Zertifizierungsstelle oder mit einem ACME-Client).
- **Vor draften**: Ohne Zertifikat lauscht draften auf `127.0.0.1:8085`, und Ihr
  Proxy oder Tunnel beendet HTTPS.

## Der Updater

Der Updater ist ein optionaler Dienst, der ausführt, was der Betreiber unter
**Installation → Installation** anfordert: eine Aktualisierung auf eine neue
Version, das Zurücksetzen auf die vorherige, das Ändern der Zahl der
Worker-Prozesse, das Ersetzen des Verschlüsselungsschlüssels und eine
Datenbanksicherung. Außerdem sichert er jeden Tag selbst die Datenbank. Dafür
führt er dasselbe `./draften` aus, das Sie selbst ausführen würden.

Der Updater hat Zugriff auf Docker, was Root-Rechte auf dem Server bedeutet.
Die Oberfläche selbst rührt Docker nie an – sie schreibt nur einen Auftrag für
den Updater in die Datenbank. Er wird bei der Installation eingeschaltet
(`COMPOSE_PROFILES=updater` in `.env`); ohne ihn funktioniert alles über die
Kommandozeile.

## Einstellungen in `.env`

Die Datei `.env` im Verzeichnis der Installation schreibt das
Installationsprogramm, und nur ihr Eigentümer kann sie lesen. Sie enthält die
Infrastruktur und die Geheimnisse; alles über die Assistenten steht in der
Datenbank und wird in der Oberfläche eingestellt.

| Variable | Wofür |
|---|---|
| `DRAFTEN_VERSION`, `DRAFTEN_EDITION` | die laufende Version und die Edition (`onprem`) |
| `DB_ROOT_PASSWORD`, `DB_PASSWORD` | Passwörter der Datenbank |
| `MASTER_KEY` | der Schlüssel, der die Geheimnisse in der Datenbank verschlüsselt (API-Schlüssel, Zugriffe auf Postfächer, Anmelde-Clients). **Bewahren Sie eine Kopie außerhalb des Servers auf** |
| `MASTER_KEY_PREVIOUS` | der vorherige Schlüssel nach einem Ersetzen, solange `backups/` Sicherungen von davor enthält |
| `WEB_APP_SECRET` | eine zufällige Zeichenkette, die Sitzungen signiert |
| `WEB_PUBLIC_URL` | die Adresse, unter der die Leute die Oberfläche öffnen; aus ihr entstehen die Weiterleitungsadressen der Anmeldung |
| `WEB_BIND`, `DRAFTEN_TLS`, `WEB_TLS_BIND` | wo HTTP und HTTPS lauschen |
| `COMPOSE_PROFILES` | optionale Dienste: `updater`, `tunnel` |
| `DRAFTEN_BACKUPS` | wie viele Datenbanksicherungen von vor einer Aktualisierung in `backups/` bleiben (Standard 3) |
| `DRAFTEN_DAILY_BACKUPS` | wie viele tägliche Sicherungen und Sicherungen auf Anfrage bleiben (Standard 7; `0` schaltet die tägliche aus) |
| `DRAFTEN_BACKUP_AT`, `DRAFTEN_TIMEZONE` | die Uhrzeit der täglichen Sicherung und ihre Zeitzone (Standard `01:00`, `Europe/Prague`); eine in der Oberfläche festgelegte Uhrzeit hat Vorrang |
| `CLOUDFLARE_TUNNEL_TOKEN` | nur mit einem Cloudflare Tunnel |
| `INTERVAL_SECONDS`, `WORKER_CONCURRENCY` | das Standardintervall der Abrufe und die gleichzeitigen Abrufe (besser in der Oberfläche einstellen) |
| `WORKER_REPLICAS` | wie viele `worker`-Prozesse auf diesem Rechner laufen (Standard 1), siehe [Betrieb und Kapazität](/de/admin/operations) |

Ein Wert mit einem `$`-Zeichen muss in `.env` als `$$` geschrieben werden –
sonst geht der Teil nach dem Dollar stillschweigend verloren. Schlüssel, die mit
`openssl rand -hex 32` erzeugt werden, enthalten nie ein Dollarzeichen.

## Was wo liegt

| | |
|---|---|
| `.env` | Einstellungen und Geheimnisse der Installation |
| `compose.yaml`, `proxy/` | wie die Container laufen; jede Aktualisierung ersetzt sie |
| `backups/` | Datenbanksicherungen: täglich, auf Anfrage und von vor Aktualisierungen – kopieren Sie sie vom Server weg |
| `data/` | das Log und die Berichte des Workers |
| `updates/` | Pakete, die auf die Installation warten; auch der Updater lädt hierher herunter |
| `NOTES.md` | was die installierte Version geändert hat |

## Weiter

- [Installation Schritt für Schritt](/de/admin/installing),
- [Verwaltung der Installation](/de/admin/installation-admin) – Version,
  Lizenz, Standardschlüssel und Standard-Absender, Organisationen,
- [Aktualisieren mit dem Updater](/de/admin/updating-with-the-updater)
  und [über die Kommandozeile](/de/admin/updating),
- [Betrieb und Kapazität](/de/admin/operations),
- [Sicherung und Wiederherstellung](/de/admin/backup-and-restore),
- [Fehlerbehebung](/de/admin/troubleshooting).
