ARIA 0b6acbb874 Baikal CalDAV/CardDAV Server mit Caddy-TLS-Proxy (100 Jahre Zertifikat)
- docker-compose.yml: baikal (ckulka/baikal:nginx) + caddy Reverse Proxy
- Persistente Daten unter ./daten (config, data, caddy_certs)
- Caddy-Image mit Entrypoint: erstellt beim Start automatisch ein
  selbstsigniertes 100-Jahres-Zertifikat, falls noch keins vorhanden ist
- README mit Setup-, Backup- und Zertifikats-Anleitung
2026-07-20 20:16:23 +00:00

Baikal Server (Docker)

CalDAV/CardDAV-Server (sabre/baikal) per Docker Compose, mit vorgeschaltetem Caddy als TLS-Reverse-Proxy.

Aufbau

  • baikalckulka/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):

cp .env.example .env
# .env bearbeiten: CADDY_CERT_CN=baikal.meine-domain.de

Start

docker compose up -d --build

Danach ist der Setup-Wizard erreichbar unter:

https://<host-oder-ip>/admin/

Dort einmalig Admin-Zugang, Zeitzone und Datenbank (Standard: SQLite, kein externer DB-Server noetig) einrichten.

CalDAV/CardDAV-URLs (nach Setup)

  • CalDAV: https://<host>/dav.php/calendars/<username>/
  • CardDAV: https://<host>/dav.php/addressbooks/<username>/

Neustart / Update

docker compose pull
docker compose up -d --build

Alle Nutzdaten bleiben in ./daten erhalten, solange dieser Ordner nicht geloescht wird.

Zertifikat erneuern / Hostname aendern

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.

S
Description
No description provided
Readme
34 KiB
Languages
Shell 90.5%
Dockerfile 9.5%