# Installation

> Docsello mit Docker Compose auf dem eigenen Server betreiben – mit Caddy oder hinter einem vorhandenen nginx.

Docsello läuft als kleiner Docker-Compose-Stack. Die selbst gehostete Ausgabe hat alle Funktionen freigeschaltet.

| Dienst | Aufgabe |
|---|---|
| **postgres** | Datenbank (Postgres 17) – Inhalte, Verlauf, Benutzer |
| **migrate** | Bringt beim Start die Datenbank auf den neuesten Stand und beendet sich dann |
| **web** | Verwaltung (`/admin`), API, Anmeldung, geschützte Seiten und Vorschauen |
| **worker** | Generiert die statischen Websites, verarbeitet Bilder und nimmt Screenshots auf |
| **caddy** (optional) | HTTPS und Auslieferung der statischen Seiten direkt von der Festplatte |

Öffentliche Seiten liefert der Webserver (Caddy oder nginx) direkt als Dateien aus – die Anwendung wird nur für
Verwaltung, API, Anmeldung, geschützte Seiten und Vorschauen gefragt.

## Voraussetzungen

- Ein Linux-Server mit Docker Engine und dem Compose-Plugin. 2 GB RAM reichen für den Anfang, 4 GB, wenn du viele
  Screenshots aufnimmst.
- Eine Domain, deren DNS du verwalten kannst.
- Für die Caddy-Variante: Ports 80 und 443 aus dem Internet erreichbar (Let's Encrypt).

## Zwei Varianten

::::tabs{sync="webserver"}
:::tab{title="Mit Caddy"}
Der Standard: Caddy holt die Zertifikate selbst – auch für Workspace-Subdomains und eigene Domains, jeweils beim
ersten Aufruf („on demand“). Ein Wildcard-Zertifikat ist nicht nötig.

DNS für `APP_URL=https://app.docs.example.com` und `ROOT_DOMAIN=docs.example.com`:

| Eintrag | Zeigt auf |
|---|---|
| `app.docs.example.com` A/AAAA | deinen Server |
| `*.docs.example.com` A/AAAA (Wildcard) | deinen Server |

```bash
cp .env.example .env && nano .env     # siehe „Konfiguration“
docker compose up -d
docker compose ps                     # postgres, web, worker, caddy healthy; migrate mit 0 beendet
```

Ausführlich: `docs/SELF_HOSTING.md` im Docsello-Repository.
:::
:::tab{title="Hinter nginx"}
Für Server, auf denen schon ein nginx mit Let's-Encrypt-Zertifikaten läuft: Docsello lauscht nur auf
`127.0.0.1:4100`, nginx macht HTTPS und liefert die statischen Seiten direkt aus dem Speicherordner aus.

```ini
# .env
COMPOSE_FILE=docker-compose.yml:deploy/docker-compose.nginx.yml
DOCSELLO_DATA=/mnt/storage/docsello/data
```

```bash
docker compose up -d --build
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:4100/api/health   # 200
```

Fertige nginx-Konfigurationen liegen unter `deploy/nginx/`. Ausführlich, Schritt für Schritt: `docs/SERVER_INSTALL.md`
im Docsello-Repository.
:::
::::

Die Images werden aus dem `Dockerfile` gebaut (`docker compose up -d --build`) oder von `ghcr.io/ceddini/docsello`
bzw. `ghcr.io/ceddini/docsello-worker` (mit Chromium für Screenshots) geladen.

## Erstes Konto

Öffne nach dem ersten Start `https://<deine-app-adresse>/auth/signup` und registriere dich. **Das erste Konto wird
Betreiber (Super-Admin)** der Installation und legt den ersten Workspace an. Danach ist die Registrierung geschlossen:
Alle weiteren Personen kommen per Einladung oder [Single Sign-on](doc:single-sign-on).

## Danach

1. **Startseite → Domains:** die Domain der Dokumentation hinzufügen und **Prüfen** – siehe [Domains](doc:domains).
2. **Einstellungen:** optional einen Anmelde-Anbieter einrichten.
3. **API & Tokens:** einen Token für die CI anlegen, siehe [Docs aus Git](doc:docs-aus-git).
4. [Backups](doc:backups) einrichten.
