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
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# 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://<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
|
||||
|
||||
```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.
|
||||
Reference in New Issue
Block a user