Team Relay – Fehleranalyse und Update-Bericht
Datum: 10. November 2026
Server: Ubuntu-VM obsidiancrdt
SSH-Ziel: yuri@100.113.222.40
Ausgangslage
Die Synchronisation über Team Relay funktionierte auf dem Laptop nicht mehr.
Fehleranalyse
Der Server selbst war in Ordnung:
- Alle sechs dauerhaft laufenden Container liefen; PostgreSQL, MinIO, Control Plane, Relay Server und Web Publish meldeten
healthy. cloudflaredwar aktiv, der Tunnel verbunden.- Lokale und öffentliche Adressen (
team.,relay.,notes.rothirsch.net) antworteten mit HTTP 200; der Relay nahm WebSocket-Verbindungen an (ohne Token korrekt HTTP 401). - Andere Benutzer synchronisierten zur selben Zeit erfolgreich.
Ursache: Die Anmeldung (Refresh-Token) war abgelaufen. Team Relay hält eine Anmeldung standardmäßig nur 30 Tage ab dem Login und verlängert sie bei Nutzung nicht. Alle Sitzungen des Laptop-Kontos waren abgelaufen, die letzte am 7. November 2026. Danach war das Plugin abgemeldet und stellte keine Verbindung mehr her. Julian hatte dasselbe Problem nach Ablauf am 31. Oktober und meldete sich am 9. November neu an.
Nebeneffekt (mit dem Update auf 1.13.8 behoben, siehe unten): Am 9. November fragte ein Client mit abgelaufener Sitzung sehr häufig neue Tokens an (HTTP 401) und löste dabei die Ratenbegrenzung des Servers aus (HTTP 429, 30 Anfragen pro Minute). Da der Control Plane alle Clients hinter Caddy unter derselben internen Adresse sieht, teilen sich alle Benutzer dieses Limit. Ein hängender Client kann dadurch kurzzeitig auch andere blockieren.
Durchgeführte Änderungen
| Komponente | Vorher | Nachher |
|---|---|---|
| Anmeldedauer (Refresh-Token) | 30 Tage (Standard) | 365 Tage |
| Cloudflared | 2026.9.3 | 2026.10.7 |
| Team Relay Control Plane | 1.13.5 | 1.13.8 |
| Team Relay Relay Server | 1.13.5 | 1.13.8 |
| Team Relay Web Publish | 1.13.5 | 1.13.8 |
| Datenbank-Migrationsjob | Control-Plane-Image 1.13.5 | Control-Plane-Image 1.13.8 |
| Datenbankschema (Alembic) | 202609050001 | 202610210001 |
PostgreSQL, MinIO, MinIO-Client und Caddy wurden nicht verändert. Das Obsidian-Plugin auf dem Laptop (0.0.38) war bereits aktuell.
Anmeldedauer
- Sicherung der bisherigen Einstellungen angelegt:
/opt/evc-team-relay/deployment/.env.before-token-lifetime-20261110(Rechte600, enthält Secrets). - In
/opt/evc-team-relay/deployment/.envergänzt:REFRESH_TOKEN_EXPIRE_DAYS=365. - Nur den Container
control-planeneu erstellt (docker compose -f compose.json up -d --no-deps --force-recreate control-plane). Die übrigen Dienste liefen ohne Unterbrechung weiter. - Geprüft: Container
healthy, die Variable ist im Container mit365gesetzt,https://team.rothirsch.net/health/readyliefert HTTP 200.
Die neue Dauer gilt nur für neue Anmeldungen. Bestehende Sitzungen behalten ihr altes Ablaufdatum. Wer sich jetzt neu anmeldet, bleibt ein Jahr angemeldet.
Cloudflared
- Nur das Paket
cloudflaredaus dem Cloudflare-APT-Repository aktualisiert (apt-get install --only-upgrade cloudflared); andere Systempakete wurden nicht aktualisiert. - Dienst neu gestartet. Der kurze Verbindungsabbruch während des Neustarts ist normal.
- Geprüft: Version
2026.10.7, Dienstactiveundenabled, vier Tunnelverbindungen registriert, Service-Datei weiterhin mit Rechten600. Alle drei öffentlichen Adressen liefern HTTP 200.
Team Relay 1.13.5 → 1.13.8
Warum: v1.13.6 enthält eine Sicherheitskorrektur (GHSA-9q47-g5jx-w24v). Vorher prüfte der Control Plane nicht, ob ein Dokument zu der Freigabe gehört, für die ein Relay-Token angefordert wird. Ein angemeldeter Benutzer hätte so grundsätzlich Dokumente einer fremden Freigabe öffnen können. v1.13.8 ändert außerdem die Ratenbegrenzung für Relay-Tokens: 300 pro Minute pro Benutzer und Freigabe statt 30 pro Minute für alle gemeinsam hinter dem Proxy. Das behebt den oben beschriebenen Nebeneffekt vom 9. November. Zusätzlich begrenzt v1.13.8 gleichzeitige Token-Anfragen, damit ein einzelner Client nicht alle Datenbankverbindungen belegen kann.
Ablauf (Reihenfolge laut Release-Hinweisen von v1.13.6: Migration → Backfill → neuer Code):
- Neue Images heruntergeladen (amd64) und über ihre SHA-256-Digests fixiert:
control-plane:1.13.8@sha256:6313cb94…dcbc6relay-server:1.13.8@sha256:357b5653…b84cweb-publish:1.13.8@sha256:805142fe…2b875
- Vollständige Sicherung mit
/usr/local/sbin/evc-team-relay-backuperstellt (Dienste ca. 1 Minute gestoppt):
/var/backups/evc-team-relay/evc-team-relay-20261110T073838Z.tar.gz(45 MB). Diese Sicherung enthält bereits die neue Anmeldedauer und noch das alte Datenbankschema. - Bisherige Compose-Konfiguration gesichert:
/opt/evc-team-relay/deployment/compose.before-update-20261110.json. - Image-Verweise in
compose.jsonauf 1.13.8 umgestellt (Rechte weiterhin600). - Datenbankmigration ausgeführt (
docker compose run --rm --no-deps control-plane-migrate): zwei Migrationen,202610140001(Vault-Felder an Freigaben) und202610210001(neue Tabellerelay_doc_bindings). - Backfill-Skript
backfill_relay_doc_bindings.sqlaus dem Tag v1.13.6 verwendet. In v1.13.8 ist es nicht mehr enthalten; die Tabelle ist aber unverändert. Ablage auf der VM:/root/relay-upgrade-1.13.8/.- Probelauf: 479 Dokumente, 0 bereits zugeordnet, kein Dokument unter mehreren Freigaben ausgegeben (nichts manuell zu prüfen).
- Ausgeführt: 479 Zuordnungen eingetragen.
- Container mit
docker compose -f compose.json up -dauf 1.13.8 gestartet.
Prüfungen nach dem Update:
- Alle sechs dauerhaften Container laufen; PostgreSQL, MinIO, Control Plane, Relay Server und Web Publish melden
healthy. Migrationsjob und MinIO-Initialisierung mit Exit-Code0. - Lokal
18000/health/ready,18001/ready,18002/sowie öffentlichteam.,relay.,notes.rothirsch.netliefern HTTP 200. REFRESH_TOKEN_EXPIRE_DAYS=365ist im neuen Control-Plane-Container weiterhin gesetzt.- Keine Fehler in den Logs von Control Plane, Relay Server und Web Publish nach dem Start.
- Ein echter Obsidian-Client hat direkt nach dem Update erfolgreich ein Relay-Token erhalten (HTTP 200) und ein Dokument geladen.
Was die Benutzer tun müssen
- Laptop (holzersimon115): In Obsidian unter Einstellungen → Team Relay neu anmelden.
- Yuri, Leon und Hannes: Ihre Sitzungen laufen am 19. bzw. 20. November ab. Wer sich vorher ab- und wieder anmeldet, bekommt sofort die neue Dauer von 365 Tagen.
- Julian: hat sich am 9. November neu angemeldet (läuft am 9. Dezember ab); eine erneute Anmeldung verlängert auf 365 Tage.
Zurücksetzen
Nur die Anmeldedauer:
cd /opt/evc-team-relay/deployment
sudo cp -p .env.before-token-lifetime-20261110 .env
sudo docker compose -f compose.json up -d --no-deps --force-recreate control-planeZurück auf 1.13.5: Die neuen Migrationen fügen nur eine Tabelle und zwei optionale Spalten hinzu; laut Migration ignoriert alter Code sie. Ein Rückwechsel der Images reicht daher normalerweise:
cd /opt/evc-team-relay/deployment
sudo cp -p compose.before-update-20261110.json compose.json
sudo docker compose -f compose.json up -dDamit ist die Sicherheitskorrektur wieder weg. Im Notfall stellt die Sicherung evc-team-relay-20261110T073838Z.tar.gz den kompletten Stand vor dem Update wieder her (Daten seit 07:38 UTC gingen dabei verloren). Die alten Images wurden nicht gelöscht.
Grenzen der Prüfung
Eine Neuanmeldung und gemeinsames Bearbeiten mit zwei Obsidian-Clients gleichzeitig wurden nicht getestet. Das Repository auf der VM (/opt/evc-team-relay) bleibt beim Checkout v1.13.4; aktualisiert wurden nur Images und Deployment-Konfiguration. Das Ubuntu-Betriebssystem wurde nicht aktualisiert.
Ideen für später
- Den Ablauf der Sitzungen gelegentlich prüfen (Tabelle
user_sessions). - Regelmäßige, automatische Sicherung außerhalb der VM einrichten.