# Baikal Server (Docker) CalDAV/CardDAV-Server ([sabre/baikal](https://sabre.io/baikal/)) per Docker Compose, mit vorgeschaltetem [Caddy](https://caddyserver.com/) als TLS-Reverse-Proxy. ## Aufbau - **baikal** — `ckulka/baikal:nginx`, liefert Baikal auf Port 80 (intern) - **caddy** — eigenes Image (`caddy:2-alpine` + `openssl`), terminiert TLS auf Port 443 und leitet an `baikal` weiter. HTTP (Port 80) wird permanent auf HTTPS umgeleitet. Alle persistenten Daten liegen im Projektverzeichnis unter `./daten`: ``` daten/ config/ Baikal-Konfiguration (Setup, Admin-Login, DB-Settings) data/ Baikal-Nutzdaten (Kalender, Adressbuecher, SQLite-DB) caddy_certs/ Selbstsigniertes TLS-Zertifikat (baikal.crt / baikal.key) ``` `daten/` ist damit der einzige Ordner, den man fuer Backups sichern bzw. bei einem Umzug/Redeploy 1:1 mitnehmen muss. ## TLS-Zertifikat (100 Jahre, automatisch) Der Caddy-Container hat einen eigenen Entrypoint (`caddy/entrypoint.sh`): Beim Start prueft er, ob unter `daten/caddy_certs/baikal.crt` + `baikal.key` bereits ein Zertifikat liegt. - **Nicht vorhanden** -> es wird automatisch ein neues, selbstsigniertes Zertifikat per `openssl` erzeugt, gueltig fuer **36500 Tage (100 Jahre)**. - **Vorhanden** -> wird unveraendert weiterverwendet (kein Ueberschreiben bei jedem Neustart). Caddys eingebautes automatisches HTTPS (ACME / interne CA mit kurzlebigen Zertifikaten) ist im `Caddyfile` bewusst per `auto_https off` deaktiviert — stattdessen wird das selbst erzeugte Langzeit-Zertifikat direkt referenziert. Da es sich um ein selbstsigniertes Zertifikat handelt, werden CalDAV/CardDAV- Clients (Browser, Thunderbird, DAVx5, iOS/macOS Kalender-App, ...) beim ersten Verbinden eine Zertifikatswarnung anzeigen. Das Zertifikat muss dort einmalig als vertrauenswuerdig akzeptiert bzw. importiert werden. ### Hostname/CN anpassen Der Common Name (CN) und SAN-Eintrag des Zertifikats werden ueber die Umgebungsvariable `CADDY_CERT_CN` gesteuert (Default: `baikal.local`). Eigene Domain/IP setzen, bevor der Container zum ersten Mal hochfaehrt (das Zertifikat wird nur EINMAL erzeugt — danach `daten/caddy_certs` loeschen und neu starten, falls sich der Hostname aendert): ```bash cp .env.example .env # .env bearbeiten: CADDY_CERT_CN=baikal.meine-domain.de ``` ## Start ```bash docker compose up -d --build ``` Danach ist der Setup-Wizard erreichbar unter: ``` https:///admin/ ``` Dort einmalig Admin-Zugang, Zeitzone und Datenbank (Standard: SQLite, kein externer DB-Server noetig) einrichten. ## CalDAV/CardDAV-URLs (nach Setup) - CalDAV: `https:///dav.php/calendars//` - CardDAV: `https:///dav.php/addressbooks//` ## Neustart / Update ```bash docker compose pull docker compose up -d --build ``` Alle Nutzdaten bleiben in `./daten` erhalten, solange dieser Ordner nicht geloescht wird. ## Zertifikat erneuern / Hostname aendern ```bash docker compose down rm -rf daten/caddy_certs docker compose up -d --build ``` Beim naechsten Start wird automatisch ein neues 100-Jahres-Zertifikat mit dem aktuellen `CADDY_CERT_CN` erzeugt.