Excalidraw 2026 selbst hosten: Collaboration, TLS und Datengrenzen
Ein praxisnaher Leitfaden zum Self-Hosting von Excalidraw mit Docker, Ports, persistenten Daten, TLS, Sicherheit, Backups und den Fehlern, die den Produktiveinsatz verhindern. Stand 2026.
Wenn du bereits versucht hast, Excalidraw selbst zu hosten, kommt dir dieser frustrierende Zustand wahrscheinlich bekannt vor: Die UI erscheint, aber obwohl sie geladen wird, funktioniert die Collaboration nicht, weil der WebSocket-Endpunkt falsch ist. Das erneute Erstellen des Containers behebt nur selten einen Widerspruch zwischen URLs, Status und Abhängigkeiten.
Dieser Leitfaden verwendet ein konkretes Abschlusskriterium: ein Diagramm zeichnen und exportieren, einen Collaboration-Link über den konfigurierten Room-Service teilen und einen zweiten Browser erneut verbinden. Jede Konfigurationsentscheidung wird an diesem Kriterium gemessen und nicht an einem grünen Container-Badge.
Excalidraw auf einem leeren Host wiederherstellen
Für das grundlegende Excalidraw-Deployment ist die Container-Schicht vergänglich, und es wird kein Daten-Volume benötigt. Das Recovery-Manifest enthält im Basis-Image keine Serverdaten; sichere jeden separaten Collaboration-Service. Halte Image-Digest, Konfiguration und alle separat verwalteten Assets unter Change Control.
Lösche den Service und erstelle ihn in einer sauberen Umgebung neu. Beweise anschließend, dass der Client aus seinem gepinnten Image neu erstellt wird und der separate Room-Service jeden Collaboration-Status wiederherstellt, dessen Aufbewahrung er zusichert. Der Leitfaden vom Git-Repository bis zum Production-Deployment ist hier das passende Modell: Erstelle das Artefakt neu und sichere nur externen Status, der tatsächlich existiert.
Bezeichne ein Verzeichnis nicht als persistent, wenn Excalidraw dort keine relevanten Daten schreibt. Leere oder ungenutzte Mounts erzeugen falsche Sicherheit und führen dazu, dass spätere Betreiber am falschen Ort nach Statusdaten suchen.
Excalidraw analysieren, bevor du Docker anfasst
Der Excalidraw-HTTP-Prozess lauscht auf Port 80. Belasse diesen Port im Application-Netzwerk und veröffentliche nur die Plattform-Route. Die lokale Runtime-Anforderung ist ein separater Room-Server und eine Storage-Schicht für persistente Collaboration. Halte deren Lifecycle explizit fest, damit das Verschieben von Excalidraw zwischen Hosts nicht unbemerkt das Verhalten verändert.
Halte die Grenze in einem kurzen Vertrag fest: Wer ist für die Anforderung zuständig, welches Credential wird verwendet, welches Timeout ist akzeptabel und wie zeigt sich ein Fehler? Führe anschließend diese Transaktion aus: ein Diagramm zeichnen und exportieren, einen Collaboration-Link über den konfigurierten Room-Service teilen und einen zweiten Browser erneut verbinden. Beobachte währenddessen die Auslieferung statischer Assets für das Basis-Image. WebSocket-Verbindungen und Room-Status gehören dabei zum separaten Collaboration-Service, da diese Auslastung eine aussagekräftigere Ausgangsgröße liefert als ein unbeschäftigter Container.
Ein Production-Abnahmelauf für Excalidraw
Ein Release Candidate für Excalidraw erhält Traffic, indem er ein festgelegtes Szenario erfolgreich abschließt: ein Diagramm zeichnen und exportieren, einen Collaboration-Link über den konfigurierten Room-Service teilen und einen zweiten Browser erneut verbinden. Erfasse für dieses Szenario den Image-Digest, die effektive Konfiguration ohne Secrets, die öffentliche Origin und die Zeitstempel. Die Testdaten sollten vergänglich sein, aber realistisch genug, um denselben Pfad wie bei echten Benutzern auszuführen.
Führe den Test nach dem Austausch der Runtime aus. Erstelle den Service anschließend neu aus dem Basis-Image, das keine Serverdaten enthält; sichere jeden separaten Collaboration-Service. Die Wiederherstellung ist erfolgreich, wenn der Client aus seinem gepinnten Image neu erstellt wird und der separate Room-Service jeden Collaboration-Status wiederherstellt, dessen Aufbewahrung er zusichert. Vergleiche die Ressourcenmessungen für die Auslieferung statischer Assets des Basis-Images sowie für WebSocket-Verbindungen und den Room-Status des separaten Collaboration-Services mit dem vorherigen Release. Untersuche relevante Abweichungen, bevor du das Release freigibst.
Führe abschließend diesen kontrollierten Fehlerfall aus: Sende harmlose Eingaben nahe dem für diese Grenze geltenden Ressourcen- oder Formatlimit: Die UI wird geladen, aber die Collaboration schlägt fehl, weil der WebSocket-Endpunkt falsch ist. Überprüfe, dass Excalidraw den Fehler erklärt, den vorhandenen Status nicht beschädigt und nach Wiederherstellung der gültigen Bedingung weiterarbeitet. Speichere einen bereinigten Log-Auszug und die Wiederherstellungszeit. Zusammen decken diese Prüfungen Verhalten, Dauerhaftigkeit und Betreibbarkeit ab – nicht nur die Prozessverfügbarkeit.
Den lokalen Befehl in einen überprüfbaren Service verwandeln
Ein produktionsnaher Start ist bewusst unspektakulär: benannter Status, ein expliziter Port und kein Secret im Image.
docker run -d \
--name excalidraw \
--restart unless-stopped \
-p 127.0.0.1:80:80 \
excalidraw/excalidraw:latest
Das Beispiel ist eine Grundlage und kein vollständiger unterstützender Stack. Bestätige vor der Veröffentlichung die lokale Anforderung: ein separater Room-Server und eine Storage-Schicht für persistente Collaboration. Prüfe die tatsächlich verwendeten Mounts und den Listener. Zeichne anschließend ein Diagramm, exportiere es, teile einen Collaboration-Link über den konfigurierten Room-Service und verbinde einen zweiten Browser erneut. Pinnen das funktionierende Image, bevor du den nächsten Neustart durchführst.
Excalidraw-spezifische Sicherheitsentscheidungen
Bei Excalidraw ist die Rotation von Accounts keine zentrale Hardening-Aufgabe, da das Standard-Image keinen Account-Store enthält. Gehe nicht davon aus, dass das statische Image allein eine dauerhafte Speicherung gemeinsamer Räume bereitstellt. Schütze private Collaboration-Räume und behaupte keine dauerhafte Collaboration, wenn nur das Excalidraw-Web-Image bereitgestellt wird.
Verwende HTTPS, eine optionale Plattform-Authentifizierung und einen geprüften Image-Digest. Binde keine nicht verwandten Hostdaten ein und begrenze die Auslastung, die durch die Auslieferung statischer Assets des Basis-Images sowie durch WebSocket-Verbindungen und den Room-Status des separaten Collaboration-Services entsteht. Ein sauberer externer Client sollte den vorgesehenen Build sehen, während ein nicht autorisierter Client bereits vor dem Erreichen des Containers abgewiesen werden sollte, wenn der Zugriff eingeschränkt ist.
Excalidraw routen, ohne über HTTPS zu täuschen
Die Ausstellung von TLS-Zertifikaten ist nur die eine Hälfte der Excalidraw-Route. Stelle den Client über HTTPS bereit und konfiguriere die Collaboration-Endpunkte separat. Leite den Traffic intern an Port 80 weiter und übermittle das externe Schema, damit generierte URLs und Secure Cookies konsistent bleiben.
Führe das vollständige Excalidraw-Szenario aus einem sauberen Netzwerk aus und nicht nur den Aufruf der Root-Seite. Ein 502- oder Zertifikatsfehler lässt sich mit automatischer Domain- und TLS-Einrichtung isolieren. Wenn der Traffic den Prozess erreicht und die UI geladen wird, aber die Collaboration fehlschlägt, weil der WebSocket-Endpunkt falsch ist, diagnostiziere diesen Zustand an der Stelle, an der er auftritt, statt weitere Redirects zu stapeln.
Excalidraw ohne Rätselraten aktualisieren
Der aussagekräftige Service-Indikator für Excalidraw ist der erfolgreiche Abschluss von „ein Diagramm zeichnen und exportieren, einen Collaboration-Link über den konfigurierten Room-Service teilen und einen zweiten Browser erneut verbinden“. Kombiniere dieses Ergebnis mit der Auslieferung statischer Assets des Basis-Images sowie mit WebSocket-Verbindungen und dem Room-Status des separaten Collaboration-Services. Eine grüne Root-Seite sagt nichts über Output-Kompatibilität oder Ressourcenerschöpfung aus.
Berücksichtige vor dem Austausch des Images dieses Risiko: Frontend-, Room-Server- und Storage-Versionen sollten gemeinsam getestet werden. Gehe nicht davon aus, dass der statische Client die gemeinsamen Daten verwaltet. Teste repräsentative Eingaben und Grenzwerte gegen beide Versionen und behalte den alten Digest, bis der Candidate erfolgreich ist. Wenn die UI geladen wird, aber die Collaboration fehlschlägt, weil der WebSocket-Endpunkt falsch ist, untersuche Request-Format, Client-Verhalten und Runtime-Logs, bevor du Routing- oder Storage-Einstellungen änderst.
Dockup für die Plattform-Schicht verwenden
Ein One-Click-Template für Excalidraw sollte Image-Digest, Port 80, Health-Timing, Domain und TLS festlegen. Da der Basis-Service stateless ist, kann Dockup ihn direkt auf Dockup Compute oder einer angebundenen Maschine neu erstellen, ohne ein leeres Volume fälschlicherweise als Backup auszugeben.
Nach dem Start stelle den Client über HTTPS bereit und konfiguriere die Collaboration-Endpunkte separat. Dockup sollte die Excalidraw-Runtime-Einstellungen beibehalten, während der Betreiber diese lokale Anforderung bestätigt: ein separater Room-Server und eine Storage-Schicht für persistente Collaboration. Überprüfe dieses Ergebnis: ein Diagramm zeichnen und exportieren, einen Collaboration-Link über den konfigurierten Room-Service teilen und einen zweiten Browser erneut verbinden. Jede spätere zustandsbehaftete Erweiterung muss ihren eigenen Mount, ihr eigenes Secret und ihren eigenen Restore-Test deklarieren, statt die Bedeutung des Basis-Templates unbemerkt zu verändern.
Häufig gestellte Fragen
Was benötigt Excalidraw für ein Production-Deployment?
Leite den Excalidraw-Container über Port 80 durch eine einzige HTTPS-Origin. Die lokale Runtime-Anforderung ist ein separater Room-Server und eine Storage-Schicht für persistente Collaboration. Bezeichne Excalidraw erst dann als bereit, wenn du ein Diagramm zeichnen und exportieren, einen Collaboration-Link über den konfigurierten Room-Service teilen und einen zweiten Browser erneut verbinden kannst.
Welche Excalidraw-Daten gehören in ein Backup?
Das Standard-Excalidraw-Image benötigt keinen Mount für Anwendungsdaten. Bewahre die Deployment-Konfiguration auf und sichere jeden angebundenen Status separat. Die Wiederherstellung ist erfolgreich, wenn der Client aus seinem gepinnten Image neu erstellt wird und der separate Room-Service jeden Collaboration-Status wiederherstellt, dessen Aufbewahrung er zusichert.
Benötigt Excalidraw HTTPS hinter einem Reverse Proxy?
Verwende HTTPS für die öffentliche Excalidraw-Origin und belasse Port 80 auf der internen Route. Wende die Excalidraw-Einstellung korrekt an: Stelle den Client über HTTPS bereit und konfiguriere die Collaboration-Endpunkte separat. Bei Excalidraw schützt HTTPS Credentials oder Benutzerinhalte während der Übertragung und sorgt für konsistentes, von der Origin abhängiges Client-Verhalten.
Wie sollte ein Excalidraw-Upgrade getestet werden?
Stelle das Candidate-Excalidraw-Image neben der aktuellen Version bereit und wiederhole die Abnahmetransaktion mit bekannten Eingaben. Achte besonders darauf, dass Frontend-, Room-Server- und Storage-Versionen gemeinsam getestet werden. Gehe nicht davon aus, dass der statische Client die gemeinsamen Daten verwaltet. Der Standard-Container führt keine Datenmigration durch. Behalte daher den vorherigen Digest, bis Output- und Kompatibilitätsprüfungen erfolgreich sind.
