SSD Nodes Learn Hosting plans →
Anleitungen Matt ConnorVon Matt Connor

CalDAV auf dem VPS selbst hosten mit Radicale

Synchronisieren Sie Kalender ohne Google: Radicale auf dem VPS mit TLS, CalDAV-Erkennung, getrennten Logins und funktionierender Einrichtung für Smartphone und Laptop.

Was Sie erstellen

Ein selbst gehosteter Kalender ist ein einzelner CalDAV-Server auf einem VPS, den Sie kontrollieren. Er läuft hinter TLS, und jede Person verwendet ein eigenes Login. Das Smartphone in Ihrer Tasche und der Laptop auf Ihrem Schreibtisch zeigen dieselben Termine an. Das gilt auch für den Laptop Ihres Partners. Ein Google-Konto ist nicht dazwischengeschaltet.

Das ist eine andere Aufgabe als eine selbst gehostete Buchungsseite. Eine Buchungsseite ist für fremde Personen gedacht: Sie veröffentlicht Ihre freien Zeitfenster und ermöglicht es jemandem, eines davon zu buchen. Ein Kalender-Server ist für Ihre eigenen Geräte gedacht: Er speichert die Termine und hält alle Clients synchron. Viele Betreiber verwenden beides. Das Buchungstool liest seine Verfügbarkeit dann aus dem CalDAV-Server, den Sie hier einrichten.

Die Installation ist klein. Radicale besteht aus einem Python-Paket und etwa zehn Konfigurationszeilen. Ob die Einrichtung den ersten Monat übersteht, hängt von TLS, der Erkennung, benutzerspezifischen Sammlungen und Backups ab. Diesen Themen ist der größte Teil des folgenden Textes gewidmet.

Was ist CalDAV, und warum ist es wichtig?

CalDAV ist die Kalendersynchronisierung über HTTP. Es ist in RFC 4791 als Erweiterungen für WebDAV definiert (Web Distributed Authoring and Versioning, eine Sammlung zusätzlicher HTTP-Methoden nach RFC 4918). Ein Kalender ist eine Collection, die sich wie ein Verzeichnis verhält. Ein Ereignis ist eine Datei darin und wird im iCalendar-Textformat (RFC 5545) gespeichert, also in demselben Format wie die .ics-Anhänge in Ihrer E-Mail.

Clients verwenden gewöhnliches HTTP mit einigen zusätzlichen Methoden. PROPFIND fragt ab, welche Inhalte vorhanden sind und welche Eigenschaften sie haben. REPORT fragt einen gefilterten Ausschnitt ab, beispielsweise alle Ereignisse in einem bestimmten Zeitraum. PUT schreibt ein Ereignis, und DELETE entfernt es. Jedes Ereignis enthält eine UID-Zeile. Anhand dieser Kennung erkennen zwei Geräte, dass sie dasselbe Ereignis und nicht eine Kopie anzeigen.

Der Vorteil ist die Portabilität. Genau deshalb lohnt sich der Einsatz. iOS, macOS, Thunderbird, Evolution und Android über DAVx⁵ unterstützen CalDAV. Ihre Daten sind nicht an den Server gebunden, den Sie heute ausgewählt haben. Verschieben Sie die Dateien auf einen anderen CalDAV-Server und tragen Sie in den Clients den neuen Hostnamen ein. Ansonsten müssen Sie nichts ändern.

CardDAV ist ebenfalls enthalten. Es verwendet dasselbe Konzept für Kontakte, ist in RFC 6352 definiert und speichert statt Ereignissen vCard-Dateien. Jeder unten beschriebene Server stellt beide Protokolle über dasselbe Konto bereit. Sobald der Kalender funktioniert, ist das Adressbuch nur noch eine Checkbox.

Welchen CalDAV-Server sollten Sie betreiben?

Radicale ist die kleinste funktionierende Lösung. Es basiert auf Python, benötigt keine Datenbank und speichert die Daten in einem Verzeichnis mit einfachen Dateien. Dieser Leitfaden verwendet es, weil ein Familienkalender nicht mehr benötigt und die Fehleranfälligkeit um drei Uhr morgens gering ist.

Baikal bietet als Option eine Webadministration. Es läuft mit PHP und der Bibliothek sabre/dav, speichert Benutzer und Kalender in SQLite oder MySQL und ermöglicht das Hinzufügen einer Person im Browser statt über die Kommandozeile. Wählen Sie es, wenn häufig neue Konten hinzukommen oder entfernt werden.

Nextcloud eignet sich, wenn der Kalender nur eine von mehreren Funktionen ist. Sie erhalten Kalender, Kontakte, Dateien und eine mobile App. Dafür benötigen Sie PHP-FPM, eine Datenbank und einen Hintergrundprozess. Wenn das für Ihren tatsächlichen Bedarf zu aufwendig klingt, behandeln die schlankeren Nextcloud-Alternativen diesen Kompromiss, während selbst gehostete Dateisynchronisierung die andere Hälfte der typischen Nextcloud-Einsatzgründe abdeckt.

DAViCal ist die bewährte PostgreSQL-Option. Es lohnt sich nur dann, wenn Sie PostgreSQL bereits betreiben und die Kalenderdaten darin speichern möchten.

Radicale unter Ubuntu 24.04 installieren

Radicale 3.5.10 war im August 2026 die aktuelle Version. Installieren Sie es in einer eigenen virtuellen Umgebung.

sudo apt update
sudo apt install -y python3-venv apache2-utils nginx
sudo useradd --system --user-group --home-dir / --shell /usr/sbin/nologin radicale
sudo install -d -o radicale -g radicale -m 750 /var/lib/radicale/collections
sudo install -d -m 750 -o root -g radicale /etc/radicale
sudo python3 -m venv /opt/radicale/venv
sudo /opt/radicale/venv/bin/pip install --upgrade radicale

Die virtuelle Umgebung ist keine Stilfrage. sudo pip install radicale in die systemweite Python-Installation schlägt mit error: externally-managed-environment fehl, weil Ubuntu seine Python-Installation als Eigentum von apt kennzeichnet, damit pip keine Dateien aus Paketen überschreiben kann.

Schreiben Sie /etc/radicale/config:

[server]
hosts = 127.0.0.1:5232

[auth]
type = htpasswd
htpasswd_filename = /etc/radicale/users
htpasswd_encryption = autodetect

[storage]
filesystem_folder = /var/lib/radicale/collections

hosts bindet absichtlich an das Loopback-Interface. nginx übernimmt die TLS-Terminierung und leitet Anfragen an diesen Port weiter. Radicale ist dadurch nie direkt aus dem Internet erreichbar. Das Beispiel aus der Dokumentation für 0.0.0.0:5232 veröffentlicht einen unverschlüsselten Dienst, der Passwörter akzeptiert. Das ist hier der entscheidende Fehler.

Jetzt legen Sie die Konten an. -5 wählt SHA-512 crypt aus. Radicale kann dieses Format mit htpasswd_encryption = autodetect ohne zusätzliches Modul lesen:

sudo htpasswd -5 -c /etc/radicale/users you
sudo htpasswd -5 /etc/radicale/users partner
sudo chown root:radicale /etc/radicale/users
sudo chmod 640 /etc/radicale/users

-c erstellt die Datei und leert ihren bisherigen Inhalt. Verwenden Sie den Befehl nur für den ersten Benutzer. Wenn Sie htpasswd -5 -c Monate später erneut ausführen, werden alle nach dem ersten Benutzer hinzugefügten Konten gelöscht. Das typische Symptom ist, dass eine Person problemlos synchronisiert, während alle anderen wiederholt zur Eingabe eines Passworts aufgefordert werden. Bcrypt funktioniert ebenfalls, benötigt aber die zusätzliche Installation radicale[bcrypt].

Erstellen Sie /etc/systemd/system/radicale.service, basierend auf der Unit aus der Radicale-Dokumentation:

[Unit]
Description=CalDAV and CardDAV server
After=network.target
Requires=network.target

[Service]
ExecStart=/opt/radicale/venv/bin/python -m radicale
Restart=on-failure
User=radicale
UMask=0027
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectControlGroups=true
NoNewPrivileges=true
ReadWritePaths=/var/lib/radicale/

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now radicale
curl -i http://127.0.0.1:5232/

Ein korrekter Zustand ist 401 Unauthorized mit einem WWW-Authenticate-Header: Der Dienst lauscht, und die Authentifizierung ist aktiviert. Connection refused bedeutet, dass der Dienst nicht gestartet wurde, und journalctl -u radicale -n 50 nennt die Option, die er abgelehnt hat. ProtectSystem=strict bindet das Dateisystem für diesen Dienst schreibgeschützt ein. Deshalb ermöglicht ReadWritePaths=/var/lib/radicale/ überhaupt das Speichern eines Termins. Wenn Sie diese Zeile entfernen, funktionieren Lesezugriffe weiterhin, während jeder Schreibzugriff fehlschlägt.

TLS ist optional, weil Clients Klartextverbindungen ablehnen

CalDAV authentifiziert sich mit HTTP Basic. Dabei wird user:password bei jeder einzelnen Anfrage base64-codiert übertragen. Base64 ist eine Kodierung, keine Verschlüsselung. Bei einfachem HTTP übergeben Sie das Passwort den gesamten Netzwerkstrecken zwischen dem Telefon und dem Server, den ganzen Tag und bei jeder Synchronisierung.

Die Clients erzwingen dieses Verhalten für Sie. Die Radicale-Dokumentation weist darauf hin, dass macOS Calendar.app die Übertragung von Zugangsdaten über ungesichertes HTTP möglicherweise stillschweigend ablehnt. iOS verhält sich genauso. Das Konto wirkt konfiguriert, synchronisiert aber einfach nie. Es wird kein lesbarer Fehler angezeigt.

Verweisen Sie zunächst mit einem A-Record für cal.example.com auf den VPS, weil die Zertifizierungsstelle dies prüft. Erstellen Sie anschließend /etc/nginx/sites-available/cal.example.com:

server {
    listen 80;
    server_name cal.example.com;

    location / {
        proxy_pass        http://localhost:5232/;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header  X-Forwarded-Proto $scheme;
        proxy_set_header  Host $http_host;
        proxy_pass_header Authorization;
    }

    location = /.well-known/caldav  { return 301 https://$host/; }
    location = /.well-known/carddav { return 301 https://$host/; }
}

Die vier Proxy-Header-Zeilen stammen aus der Radicale-Dokumentation. Lassen Sie sie unverändert.

sudo ln -s /etc/nginx/sites-available/cal.example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d cal.example.com
curl -i -u you https://cal.example.com/

nginx -t gibt syntax is ok und test is successful aus. Führen Sie den Reload erst danach aus. Ein Reload mit einer fehlerhaften Datei lässt die alte Konfiguration weiterlaufen und verbirgt den Fehler bis zum nächsten Neustart. Certbot bearbeitet die Site-Datei direkt: Es installiert das Zertifikat, stellt den Block auf Port 443 um und fügt eine Weiterleitung von Port 80 hinzu. Der abschließende curl-Aufruf fordert zur Eingabe des Passworts auf und sollte 200 zurückgeben. Dabei handelt es sich um die Weboberfläche von Radicale. Ein 502 Bad Gateway bedeutet, dass nginx läuft und Radicale nicht auf 5232 lauscht.

Warum schlägt das Hinzufügen des Kontos auf einem Telefon fehl?

Der Grund ist die Dienstsuche. RFC 6764 beschreibt, wie ein Client einen Hostnamen in eine Kalender-URL umwandelt. Zuerst sucht er nach einem _caldavs._tcp-SRV-Eintrag. Anschließend fordert er https://cal.example.com/.well-known/caldav an und erwartet eine Weiterleitung zum DAV-Root. Danach fragt er current-user-principal und anschließend für diesen Principal nach calendar-home-set. Erst dann werden Ihre Kalender gefunden. Auf einem Telefon gibt es ein einziges Feld für den Server. Daher muss jeder Schritt ohne weitere Eingaben funktionieren.

curl -sI https://cal.example.com/.well-known/caldav

Die korrekte Antwort ist HTTP/2 301 mit einem location: https://cal.example.com/-Header. Ein 404 an dieser Stelle ist der Grund dafür, dass iOS meldet, die Kontoinformationen könnten nicht überprüft werden, während Thunderbird im selben Netzwerk funktioniert. Thunderbird verwendet die vollständige URL, die Sie eingegeben haben. Daher benötigt es die Weiterleitung nicht.

Das Ziel der Weiterleitung hängt vom Server ab. Radicale, das im Root der Website bereitgestellt wird, leitet zu / weiter. Baikal enthält Beispielregeln, die mit dem Status 308 zu /dav.php weiterleiten. Nextcloud leitet zu /remote.php/dav/ weiter.

Kalender erstellen und einen davon mit Ihrer Partnerin oder Ihrem Partner teilen

Viele Clients können keinen Kalender erstellen, sondern nur einen abonnieren. Öffnen Sie https://cal.example.com/ in einem Browser, melden Sie sich als you an und erstellen Sie den Kalender dort. Auf dem Datenträger wird er unter /var/lib/radicale/collections/collection-root/you/ abgelegt, wobei eine generierte Kennung als Ordnername verwendet wird.

Das Standard-Berechtigungs-Backend von Radicale ist owner_only: Ein authentifiziertes Konto kann seine eigenen Sammlungen unter /USERNAME/ lesen und schreiben, aber auf nichts anderes zugreifen. Für die meisten Haushalte ist das die richtige Einstellung. Am einfachsten teilen Sie einen Kalender über ein drittes Konto. Erstellen Sie household mit htpasswd, erstellen Sie den gemeinsamen Kalender unter diesem Login und fügen Sie ihn auf jedem Gerät als zweites CalDAV-Konto hinzu. Das funktioniert mit jedem Client, einschließlich iOS, weil sich der Kalender im eigenen Home-Verzeichnis dieses Kontos befindet.

Wenn Sie eine feinere Steuerung benötigen, wechseln Sie zu regelbasierten Berechtigungen. Fügen Sie Folgendes zu /etc/radicale/config hinzu:

[rights]
type = from_file
file = /etc/radicale/rights

Führen Sie anschließend /etc/radicale/rights aus, basierend auf dem Beispiel in der Radicale-Dokumentation:

[root]
user: .+
collection:
permissions: R

[principal]
user: .+
collection: {user}
permissions: RW

[own-calendars]
user: .+
collection: {user}/[^/]+
permissions: rw

[shared-household]
user: you|partner
collection: you/2f0a9c1e-1f4c-4c2b-9a1b-0d2f7a5c9e11
permissions: rw

Groß- und Kleinbuchstaben haben unterschiedliche Bedeutungen. R und W lesen und schreiben Sammlungen, die weder Kalender noch Adressbücher sind. Dazu gehört ein Principal-Ordner. r und w lesen und schreiben die Kalender selbst. Ersetzen Sie diese Kennung durch den tatsächlichen Ordnernamen Ihres Kalenders aus dem oben genannten Speicherpfad.

Eine Einschränkung ist wichtig: Ein Client, der nur die Kalender-Home-Sammlung liest, zeigt keinen Kalender an, der unter dem Pfad eines anderen Benutzers liegt, weil die Suche dort nicht fortgesetzt wird. Thunderbird und DAVx⁵ können ihn über die vollständige URL hinzufügen. iOS kann das nicht. Deshalb funktioniert das Muster mit einem gemeinsamen Konto immer.

Clients einrichten, denn genau hier scheitern selbst gehostete Kalender

iPhone und iPad. Öffnen Sie Settings und anschließend Calendar. In aktuellen iOS-Versionen befindet sich der Eintrag unter Apps. Wählen Sie dann Calendar Accounts, Add Account, Other und Add CalDAV Account. Der Server ist cal.example.com, gefolgt von Benutzername und Passwort. Description dient nur als Bezeichnung. Wenn sich das Konto nicht speichern lässt, öffnen Sie es erneut. In der erweiterten Ansicht können Sie Use SSL, den Port und die vollständige Konto-URL festlegen. Wenn Sie die URL einfügen, wird die automatische Erkennung vollständig übersprungen.

Android. Es gibt keinen integrierten CalDAV-Client. Installieren Sie DAVx⁵ über F-Droid oder Google Play. Fügen Sie ein Konto mit der Basis-URL https://cal.example.com/ und Ihrem Benutzernamen hinzu. Aktivieren Sie anschließend die gewünschten Kalender. DAVx⁵ schreibt in den Android-Kalenderdienst. Die Termine erscheinen daher in der Kalender-App, die Sie bereits verwenden.

Thunderbird. Wählen Sie New Calendar und anschließend On the Network. Geben Sie dann Ihren Benutzernamen und den Speicherort https://cal.example.com/ ein. Thunderbird zeigt die gefundenen Kalender an und fragt, welche Kalender hinzugefügt werden sollen.

macOS. Öffnen Sie System Settings und anschließend Internet Accounts. Wählen Sie Add Other Account und CalDAV. Setzen Sie Account Type auf Manual. Verwenden Sie danach denselben Benutzernamen, dasselbe Passwort und dieselbe Serveradresse.

CalDAV ist ein Polling-Protokoll. Die Spezifikation unterstützt kein Push. Ein Termin, den Sie auf dem Laptop hinzufügen, wird daher erst bei der nächsten Synchronisierung auf dem Telefon angezeigt und nicht in derselben Sekunde. Legen Sie in jedem Client ein für Sie akzeptables Intervall fest. Beachten Sie, dass ein kürzeres Intervall auf einem Telefon mehr Akkuleistung benötigt.

Sichern Sie den Dateibestand

Unter Radicale besteht Ihr Kalender aus einem Verzeichnis mit .ics-Dateien, einer Datei pro Ereignis, sowie einer kleinen Eigenschaftendatei pro Sammlung. Jede Methode, die ein Verzeichnis kopiert, erstellt ein Backup. Mit less können Sie ein Backup öffnen und prüfen, ob es echte Ereignisse enthält. Das ist ein wesentlicher Vorteil gegenüber einem Datenbank-Dump, den Sie nicht lesen können.

sudo systemctl stop radicale
sudo tar czf /root/radicale-$(date +%F).tar.gz -C /var/lib/radicale collections
sudo systemctl start radicale

Stoppen Sie den Dienst für die wenigen Sekunden, die das Archiv benötigt. Dadurch kann kein Client während des Lesens der Dateien einen Schreibvorgang nur teilweise ausführen. Kopieren Sie das Archiv anschließend vom Server weg. Ein Backup auf derselben VPS übersteht den Ausfall nicht, auf den Sie sich vorbereiten. Die Wiederherstellung erfolgt in umgekehrter Reihenfolge: Entpacken, sudo chown -R radicale:radicale /var/lib/radicale/collections, Dienst starten. Jeder Client enthält außerdem eine lokale Kopie seiner Kalender. Ein Laptop, der seit dem Ausfall nicht synchronisiert wurde, ist daher eine zweite Kopie Ihrer Daten.

Wann Baikal oder Nextcloud die bessere Wahl ist

Baikal 0.12.1 wurde am 5. August 2026 veröffentlicht und benötigt PHP 8.2 oder neuer. Entpacken Sie Baikal außerhalb des Webroots und geben Sie nur das Verzeichnis html frei:

sudo apt install -y php-fpm php-sqlite3 php-xml php-mbstring php-curl unzip
cd /tmp
curl -LO https://github.com/sabre-io/Baikal/releases/download/0.12.1/baikal-0.12.1.zip
sudo unzip -q baikal-0.12.1.zip -d /srv
sudo chown -R www-data:www-data /srv/baikal/Specific /srv/baikal/config

Diese beiden Verzeichnisse sind die einzigen, in die der Webserver schreiben muss. Daher muss kein anderes Verzeichnis beschreibbar sein. Innerhalb Ihres nginx-Serverblocks lauten die Baikal-spezifischen Abschnitte:

root /srv/baikal/html;
index index.php;

location ~ /(\.ht|Core|Specific|config) { deny all; }

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

location = /.well-known/caldav  { return 308 /dav.php; }
location = /.well-known/carddav { return 308 /dav.php; }

Laden Sie nginx neu und öffnen Sie die Website in einem Browser. Der Einrichtungsassistent erstellt das Administratorkonto und die SQLite-Datenbank. Die Client-Konfiguration ist identisch mit der von Radicale. Verwenden Sie https://cal.example.com/ als Serveradresse, da die Well-known-Regel die Erkennung an /dav.php weiterleitet.

Nextcloud ist nur dann sinnvoll, wenn Sie zusätzlich Dateien und eine Smartphone-App mit derselben Anmeldung verwenden möchten. Der DAV-Root ist /remote.php/dav/. Für die Erkennung gelten dieselben Regeln. Bei allen diesen Diensten hält der Betrieb in einem Container die PHP-Versionen vom Host fern: Docker Compose auf einem VPS behandelt die Compose-Datei und den Reverse Proxy davor. Unter was sich 2026 für das Self-Hosting lohnt können Sie sinnvoll entscheiden, wie weit Sie diesen Weg gehen möchten.

Fehlerbilder und die angezeigten Zeichenfolgen

Jede Synchronisierung gibt 401 zurück. Entweder hat eine zweite htpasswd -c die Konten aus der Passwortdatei entfernt, oder der Benutzer radicale kann die Datei nicht lesen. Prüfen Sie dies mit sudo -u radicale cat /etc/radicale/users. Eine dort angezeigte Meldung über verweigerte Berechtigungen bestätigt die Ursache. Die Korrektur besteht aus der Gruppe radicale und dem Modus 640. Radicale wartet standardmäßig außerdem eine Sekunde nach jeder fehlgeschlagenen Anmeldung. Ein Client mit einem veralteten Passwort wirkt dadurch langsam und nicht wie abgewiesen.

nginx antwortet auf PROPFIND mit 405. Die URL wird als statische Datei ausgeliefert. Deshalb erreicht die WebDAV-Methode Radicale nicht. Testen Sie den Endpunkt direkt:

curl -u you -X PROPFIND -H "Depth: 0" -i https://cal.example.com/you/

Eine funktionierende DAV-Sammlung antwortet mit 207 Multi-Status. Jede andere Antwort bedeutet, dass die Anfrage im Webserver beendet wurde.

Das Telefon kann das Konto nicht verifizieren, der Browser funktioniert jedoch. Dafür gibt es zwei häufige Ursachen. Die Weiterleitung für den Well-known-Endpunkt fehlt. Sie wurde mit dem obigen curl-Befehl getestet. Oder die Zertifikatskette ist unvollständig. Browser gleichen dies aus, indem sie das fehlende Zwischenzertifikat abrufen. iOS tut das nicht. Prüfen Sie die Kette in der Shell:

openssl s_client -connect cal.example.com:443 -servername cal.example.com </dev/null

Achten Sie auf Verify return code: 0 (ok). Wenn der Test fehlschlägt, verweist die nginx-Konfiguration auf cert.pem, obwohl sie auf fullchain.pem verweisen müsste.

Doppelte Ereignisse nach einem Import. Jedes Ereignis enthält eine UID. Clients behandeln diese als Identität. Wenn Sie dieselbe Datei zweimal mit einem Werkzeug importieren, das die Bezeichner neu erzeugt, entstehen zwei Ereignisse, die niemals zusammengeführt werden. Löschen Sie die zusätzlichen Kopien auf einem Gerät und lassen Sie die Löschung synchronisieren.

Nach einem Reboot funktioniert nichts mehr. Der Dienst wurde manuell gestartet. sudo systemctl is-enabled radicale gibt disabled aus, und sudo systemctl enable --now radicale behebt das Problem dauerhaft.

FAQ

Benötige ich für einen selbst gehosteten CalDAV-Server wirklich TLS?

Ja. CalDAV authentifiziert sich mit HTTP Basic. Daher wird das Passwort bei jeder Anfrage Base64-kodiert übertragen, und Base64 lässt sich trivial zurückdekodieren. Auch die Clients setzen TLS voraus: macOS Calendar.app kann die Übertragung von Zugangsdaten über unverschlüsseltes HTTP stillschweigend verweigern. iOS verhält sich genauso. Das Konto scheint dann gespeichert zu werden, synchronisiert aber nie. sudo certbot --nginx -d cal.example.com erledigt die gesamte Aufgabe.

Warum kann mein Smartphone das Konto nicht hinzufügen, obwohl Thunderbird funktioniert?

Thunderbird verwendet die vollständige URL, die Sie eingegeben haben. Ein Smartphone bietet nur ein Serverfeld und verwendet daher die Erkennung nach RFC 6764: Es fordert https://cal.example.com/.well-known/caldav an und erwartet eine Weiterleitung zum DAV-Stammverzeichnis. Ohne diese Weiterleitung erhält das Smartphone einen 404-Fehler und meldet, dass es das Konto nicht überprüfen kann. Fügen Sie location = /.well-known/caldav { return 301 https://$host/; } zu nginx hinzu. Prüfen Sie anschließend mit curl -sI https://cal.example.com/.well-known/caldav, ob Sie einen 301-Statuscode und einen location-Header erhalten.

Können zwei Personen einen Kalender gemeinsam verwenden?

Ja. Die zuverlässige Methode ist ein gemeinsames Login. Erstellen Sie mit htpasswd ein drittes Konto. Legen Sie den gemeinsamen Kalender darunter ab und fügen Sie ihn auf jedem Gerät als zweites CalDAV-Konto hinzu. Die Rechte-Datei von Radicale kann stattdessen einem benannten Benutzer Lese- und Schreibzugriff auf eine Collection unter dem Pfad eines anderen Benutzers gewähren. Ein Client, der nur das eigene Kalender-Home-Set liest, zeigt diese Collection jedoch nie an. Diese Methode eignet sich daher für Thunderbird und DAVx⁵, nicht für iOS.

Was geschieht mit meinen Terminen, wenn der VPS ausfällt?

Bei Radicale werden die Daten als Klartext gespeichert: eine .ics-Datei pro Termin unter /var/lib/radicale/collections/collection-root/. Sie können diese Dateien mit tar sichern und mit less lesen. Zur Wiederherstellung extrahieren Sie die Dateien, führen chown -R radicale:radicale aus und starten den Dienst. Jeder synchronisierte Client speichert außerdem eine lokale Kopie. Ein Laptop, der vor dem Ausfall auf dem aktuellen Stand war, enthält daher eine vollständige zweite Kopie Ihres Kalenders.

Synchronisiert ein CalDAV-Server auch meine Kontakte?

Kontakte verwenden CardDAV, ein verwandtes Protokoll aus RFC 6352, das statt Terminen vCard-Dateien speichert. Radicale, Baikal und Nextcloud stellen CardDAV über dasselbe Konto und denselben Hostnamen bereit. Unter Android synchronisiert DAVx⁵ Kalender und Kontakte über ein Konto. Unter iOS fügen Sie mit denselben Zugangsdaten ein zweites Konto vom Typ CardDAV hinzu. Deshalb gehört die /.well-known/carddav-Weiterleitung in Ihre nginx-Konfiguration neben die CalDAV-Weiterleitung.

#caldav#calendar#radicale#self-hosting#sync