Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Synology / NAS 11.09.2026 · 11 min Lesezeit

Excalidraw auf dem Synology NAS installieren: kollaboratives Whiteboard

Excalidraw als quelloffenes Whiteboard auf dem Synology NAS installieren: Ein-Container-Setup mit dem Container Manager, HTTPS über den DSM-Reverse-Proxy und ehrliche Einordnung der Grenzen beim selbstgehosteten Kollaborations-Betrieb. Fertig in 10 Minuten.

Excalidraw auf dem NAS: Whiteboard, Docker, HTTPS. Illustration mit Laptop und Administrationsoberfläche. KI-generiert

Wenn dein Team gemeinsam Architektur-Skizzen zeichnen, Workshops visualisieren oder schnell mal ein Konzept auf ein digitales Whiteboard werfen will, stellt sich schnell die Frage: Miro, Figma oder etwas Eigenes? Excalidraw ist die Antwort für alle, die ein schlankes, quelloffenes Whiteboard ohne Monats-Abo selbst hosten wollen. Das Projekt hat über 125.000 GitHub-Stars, ist MIT-lizenziert und damit auch für den kommerziellen KMU-Einsatz uneingeschränkt nutzbar. Der Container ist technisch kaum einfacher zu betreiben: eine rein statische Single-Page-App, die nginx ausliefert – kein Backend, keine Datenbank, keine Volumes. Auf einem Synology NAS mit Intel- oder AMD-CPU ist Excalidraw in unter zehn Minuten erreichbar.

Voraussetzungen

  • Synology NAS mit x86_64-CPU (Intel/AMD, z. B. DS223+, DS923+, DS1823xs+) und mindestens 2 GB RAM
  • DSM 7.2 oder neuer mit installiertem und aktiviertem Container Manager (kostenlos im Package Center)
  • Internetzugang vom NAS zum einmaligen Download des Docker-Images (ca. 41 MB)
  • Freier Host-Port – empfohlen 3000; alternativ 3765 oder ein anderer freier Port
  • Optional für HTTPS: eigene Domain oder DynDNS-Eintrag plus Let's-Encrypt-Zertifikat in DSM

Schritt 1: Eckdaten und Compose-Datei verstehen

Bevor du den Container anlegst, lohnt ein kurzer Blick auf die technischen Eckdaten. Excalidraw ist ein Multi-Stage-Build: Node.js baut die React/TypeScript-App, nginx:stable-alpine-slim liefert die fertigen statischen Dateien aus. Das erklärt, warum das fertige Image nur ca. 41 MB groß ist und unter 50 MB RAM im Betrieb verbraucht.

ParameterWertHinweis
Imageexcalidraw/excalidraw:latestNur latest und Commit-SHA-Tags verfügbar, keine Semver-Tags
Container-Port80/tcp (nginx)Intern immer 80; Host-Port frei wählbar
Host-Port (empfohlen)3000Alternativ 3765 oder beliebiger freier Port
VolumesKeineRein statische App; kein Ordner unter /volume1/docker nötig
RAM-Bedarf< 50 MBNginx liefert nur statische Dateien aus
Architekturamd64 (x86_64)Passt zu allen Synology-Modellen mit Intel/AMD-CPU
LizenzMITKommerzieller Einsatz erlaubt

Zum Verständnis der Umgebungsvariablen: NODE_ENV=production ist im offiziellen Image bereits zur Build-Zeit eingebrannt und hat als Laufzeit-Variable keinen technischen Effekt – es schadet aber nicht, sie trotzdem zu setzen. VITE_APP_WS_SERVER_URL ist ausschließlich für einen Custom-Build mit lokalem Kollaborations-Server relevant und wird weiter unten im Abschnitt zu Kollaboration erklärt.

Hier ist die vollständige compose.yaml, die du im nächsten Schritt verwendest:

services:
  excalidraw:
    image: excalidraw/excalidraw:latest
    container_name: excalidraw
    restart: unless-stopped
    ports:
      - "3000:80"
    environment:
      - NODE_ENV=production
    healthcheck:
      test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
    stdin_open: true

Wichtige Abweichung von anderen Anleitungen: Der Healthcheck verwendet wget, nicht curl. Das nginx:stable-alpine-slim-Basisimage enthält kein curl – ein Healthcheck mit curl würde den Container als „unhealthy" markieren, obwohl er einwandfrei läuft. Außerdem setzt diese Anleitung restart: unless-stopped statt on-failure:5, was für dauerhaft laufende Dienste auf dem NAS die bessere Wahl ist.

Verifizieren: Du kennst jetzt den Host-Port (3000) und hast die Compose-Datei bereit. Prüfe vorab im Container Manager unter „Container" oder in der DSM-Systemsteuerung, ob Port 3000 auf deinem NAS bereits belegt ist (z. B. durch Gitea oder andere Dienste). Ist er frei, weiter mit Schritt 2.

Schritt 2: Compose-Projekt im Container Manager anlegen

Da Excalidraw keine persistenten Volumes benötigt, musst du keinen Ordner in der File Station anlegen – das ist einer der wenigen Fälle, wo du direkt mit dem Compose-Projekt starten kannst. Wie du generell ein Compose-Projekt im Container Manager anlegst und aktualisierst, erklärt die Grund-Anleitung Container Manager: Docker-Compose-Projekt anlegen, starten und aktualisieren.

  1. Öffne im DSM den Container Manager und klicke links auf Projekt, dann auf Erstellen.
  2. Vergib den Projektnamen excalidraw (Kleinbuchstaben).
  3. Wähle als Projektpfad einen Ordner – da keine Volumes nötig sind, reicht /volume1/docker/excalidraw als Ablageort für die Compose-Datei selbst.
  4. Füge im Editor die compose.yaml aus Schritt 1 ein (vollständig, ohne Änderungen, wenn Port 3000 frei ist).
  5. Klicke auf Weiter, überprüfe die Zusammenfassung und starte das Projekt mit Fertig.

Der Container Manager lädt nun das Image herunter (ca. 41 MB, je nach Verbindung 30–60 Sekunden) und startet den Container.

Verifizieren: Im Container Manager unter „Projekt" sollte excalidraw nach spätestens einer Minute den Status Wird ausgeführt zeigen. Klicke auf den Container und wechsle zum Tab „Protokoll" – dort solltest du eine nginx-Startmeldung sehen. Kein Fehler bedeutet: Image erfolgreich geladen, nginx gestartet.

Schritt 3: Erreichbarkeit im Browser prüfen

Öffne auf einem Gerät im lokalen Netzwerk einen Browser und rufe auf:

http://<NAS-IP>:3000

Ersetze <NAS-IP> durch die lokale IP-Adresse deines NAS (z. B. 192.168.1.50). Du solltest nach wenigen Sekunden die Excalidraw-Oberfläche sehen: eine leere weiße Zeichenfläche mit Werkzeugleiste am oberen Rand.

Teste jetzt kurz den lokalen Speicher-Workflow:

  1. Zeichne ein einfaches Rechteck oder eine Linie auf der Fläche.
  2. Klicke oben links auf das Hamburger-Menü und wähle Speichern unter → lade die Datei als .excalidraw auf deinen Rechner.
  3. Lade die Seite neu – die Zeichnung bleibt dank LocalStorage erhalten.
  4. Öffne die Seite im privaten Modus desselben Browsers – die Zeichnung ist dort nicht vorhanden (anderer LocalStorage).

Verifizieren: Die Excalidraw-Oberfläche lädt vollständig, du kannst zeichnen, und der Export als .excalidraw-Datei funktioniert. Zeigt der Browser eine leere Seite oder einen 502-Fehler, ist der Container noch nicht vollständig gestartet – warte 10 Sekunden und lade neu.

Schritt 4: DSM-Firewall für Port 3000 freigeben

Falls du die DSM-Firewall aktiviert hast, musst du Port 3000 TCP eingehend erlauben. Das generelle Vorgehen beschreibt DSM-Firewall: Ports für Docker-Container freigeben. Für Excalidraw konkret:

  • Systemsteuerung → Sicherheit → Firewall → Regel hinzufügen
  • Protokoll: TCP, Port: 3000, Quelle: dein lokales Netz (z. B. 192.168.1.0/24), Aktion: Erlauben

Verifizieren: Nach dem Speichern der Firewall-Regel ist Excalidraw von anderen Geräten im Netz unter http://NAS-IP:3000 erreichbar. Teste den Aufruf von einem zweiten Gerät (z. B. Smartphone im WLAN).

Schritt 5: HTTPS über den DSM-Reverse-Proxy einrichten (optional, aber empfohlen)

Ohne HTTPS sind bestimmte Browser-Features nicht verfügbar: Die Clipboard-API (Einfügen aus Zwischenablage) und die PWA-Installation erfordern einen sicheren Kontext. Für den internen Betrieb im LAN ist HTTP oft tolerierbar; für den Zugriff von außen oder für den vollen Funktionsumfang solltest du HTTPS einrichten.

Der DSM-eigene Reverse Proxy (Systemsteuerung → Anmeldeportal → Erweitert → Reverse Proxy) reicht für Excalidraw vollständig aus. Gehe so vor:

  1. Klicke auf Erstellen und vergib einen Namen, z. B. excalidraw.
  2. Quellprotokoll: HTTPS, Quellhost: deine Domain (z. B. draw.firma.de), Quellport: 443.
  3. Zielprotokoll: HTTP, Zielhost: localhost, Zielport: 3000.
  4. Weise ein Let's-Encrypt-Zertifikat zu (Systemsteuerung → Sicherheit → Zertifikat → bereits vorhandenes oder neues für die Domain ausstellen).
  5. Speichere den Eintrag.

Hinweis für Kollaboration: Falls du später den Kollaborations-Setup mit dem excalidraw-room-Container nutzen willst (siehe „Häufige Fragen"), muss für den zweiten Reverse-Proxy-Eintrag (Port 3002 → excalidraw-room) die Option WebSocket aktivieren im Reiter „Benutzerdefinierter Header" gesetzt werden. Ohne diesen Header schlagen WebSocket-Verbindungen für die Live-Session still fehl.

Verifizieren: Rufe https://draw.firma.de im Browser auf. Das Schloss-Symbol sollte grün sein, die Excalidraw-Oberfläche vollständig laden. Teste die Clipboard-Funktion: Kopiere etwas und füge es mit Strg+V in die Zeichenfläche ein – bei korrektem HTTPS erscheint ein Einfüge-Dialog.

Schritt 6: Container aktuell halten

Da Excalidraw auf Docker Hub ausschließlich den latest-Tag und Commit-SHA-Tags veröffentlicht (keine Semver-Tags wie v0.18.1), ist ein Versions-Pinning nur über Commit-SHAs möglich. Für den Alltagsbetrieb im KMU empfiehlt sich ein manuelles Update alle vier bis acht Wochen:

  1. Container Manager → Projekt excalidrawAktion → Stoppen.
  2. Wechsle zu „Registry" und suche nach excalidraw/excalidraw – lade das neue latest-Image herunter.
  3. Starte das Projekt neu: Container Manager → Projekt → Aktion → Erstellen (zieht das neue Image).

Wer Updates automatisieren möchte, findet in der Anleitung Docker-Container automatisch aktualisieren nach dem Watchtower-Aus: Diun, WUD und Renovate im Vergleich die passenden Werkzeuge dafür.

Verifizieren: Nach dem Neustart zeigt der Container Manager den Status „Wird ausgeführt". Ein Aufruf von http://NAS-IP:3000 lädt die aktualisierte App. Im Container Manager → Container → excalidraw → Details siehst du die Image-ID des neu heruntergeladenen Images.

Troubleshooting / Typische Fehler

  • Container wird als „unhealthy" markiert, obwohl er läuft: Ursache: Healthcheck verwendet curl, das im nginx:alpine-Image nicht vorhanden ist. Fix: In der Compose-Datei den Healthcheck auf ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost"] korrigieren, Projekt neu erstellen.
  • Port 3000 bereits belegt (Container startet nicht): Fehlermeldung im Log: bind: address already in use. Prüfe, welcher Container Port 3000 nutzt. Ändere in der Compose-Datei den Host-Port auf einen freien Port, z. B. 3765:80.
  • Zeichnung nach Browser-Neustart weg: Kein Fehler – erwartetes Verhalten im privaten/Inkognito-Modus oder nach manuellem Cache-Löschen. Lösung: Regelmäßig über das Hamburger-Menü als .excalidraw-Datei exportieren. Es gibt kein serverseitiges Speichern im Basis-Setup.
  • Live-Kollaboration funktioniert nicht lokal: Im Standard-Image verbindet sich der „Live-Kollaboration"-Button mit dem öffentlichen excalidraw.com-Server. Ohne Internetverbindung des NAS schlägt die Session fehl. Für vollständig lokale Kollaboration ist ein Custom-Build plus excalidraw/excalidraw-room-Container notwendig (siehe FAQ).
  • Clipboard-API funktioniert nicht (Strg+V zeigt keinen Dialog): Ursache: Die Seite wird über HTTP aufgerufen. Die Clipboard-API erfordert einen sicheren Kontext (HTTPS). Fix: HTTPS über den DSM-Reverse-Proxy einrichten (Schritt 5).
  • WebSocket-Fehler bei Kollaborations-Setup: Fehlerbild: Kollaborations-Session kann nicht beigetreten werden oder Änderungen werden nicht synchronisiert. Ursache: Der Reverse Proxy leitet WebSocket-Upgrade-Header nicht weiter. Fix: Im DSM-Reverse-Proxy-Eintrag für den excalidraw-room-Port die Option „WebSocket aktivieren" setzen.
  • ARM-Synology (Realtek-CPU): Image startet nicht: Das offizielle Image auf Docker Hub ist primär für amd64 gebaut. Auf ARM-Synology-Modellen kann ein manueller Build aus dem GitHub-Repository nötig sein (docker buildx build --platform linux/arm64).

Häufige Fragen

Werden meine Zeichnungen auf dem NAS gespeichert?

Nein. Excalidraw ist serverseitig vollständig zustandslos – der Container liefert nur die App-Dateien aus und speichert keine Nutzerdaten. Alle Zeichnungen liegen im Browser-LocalStorage des jeweiligen Nutzers. Bei Browser-Cache-Leerung, privatem Modus oder Gerätewechsel sind nicht exportierte Zeichnungen verloren. Zum dauerhaften Sichern: Hamburger-Menü → Speichern unter.excalidraw-Datei oder als PNG/SVG exportieren.

Nicht im Standard-Ein-Container-Setup. Das fertige Docker-Image enthält eine zur Build-Zeit eingebrannte URL, die auf den öffentlichen excalidraw.com-Room-Server zeigt. Wer vollständig lokal kollaborieren will, braucht zwei Dinge: (1) einen zweiten Container excalidraw/excalidraw-room:latest (Host-Port 3002, interner Port 80, Umgebungsvariable CORS_ORIGIN=https://deine-draw-domain.de) und (2) einen Custom-Build des Haupt-Images, bei dem VITE_APP_WS_SERVER_URL=https://deine-domain:3002 als Build-Argument übergeben wird. Diese URL wird zur Build-Zeit in die statischen Dateien eingebrannt und kann nicht per Laufzeit-ENV nachträglich gesetzt werden.

Was ist der Unterschied zu draw.io auf dem Synology NAS?

draw.io (Diagrams.net) ist auf strukturierte Diagramme spezialisiert: Netzwerkpläne, Flowcharts, UML, ER-Diagramme – mit umfangreichen Shape-Bibliotheken und festen Verbindungslinien. Excalidraw ist auf freie, handgezeichnete Skizzen und kollaborative Workshops ausgerichtet: schnelle Ideen, Architekturskizzen im Entwurfsstadium, Brainstorming-Sessions. Beide Werkzeuge ergänzen sich gut; für Netzwerkpläne ist draw.io die bessere Wahl (ausführliche Abgrenzung: draw.io auf dem Synology NAS installieren: Diagramme und Netzwerkpläne erstellen).

Kann ich Excalidraw in Outline (Team-Wiki) einbetten?

Ja. Outline unterstützt Excalidraw-Blöcke nativ – du kannst Zeichnungen direkt in Wiki-Seiten einbetten und bearbeiten. Wenn beide Dienste auf demselben NAS laufen, verweist Outline auf den lokalen Excalidraw-Container. Eine vollständige Anleitung zu Outline findest du unter Outline auf dem Synology NAS installieren: modernes Team-Wiki als Notion-Alternative.

Wie viele Ressourcen verbraucht der Container?

Minimal: unter 50 MB RAM im Betrieb, praktisch kein CPU-Load, da nginx ausschließlich statische Dateien ausliefert. Auf einem NAS mit 2 GB RAM läuft Excalidraw problemlos neben anderen Containern wie Vaultwarden, Immich oder Outline, ohne Ressourcenkonflikte zu verursachen.

Kann ich die App als PWA auf dem Smartphone installieren?

Ja – Excalidraw ist PWA-fähig. Im Browser erscheint ein „App installieren"-Button, sobald die Seite über HTTPS aufgerufen wird. Im Offline-Modus nach der PWA-Installation funktioniert die App lokal im Browser; das Speichern auf dem NAS-Server ist auch dann nicht möglich (LocalStorage bleibt die einzige Persistenzebene).

Welcher Host-Port ist der richtige: 3000 oder 3765?

Es gibt keinen vorgeschriebenen Port. Die offizielle Excalidraw-Dokumentation und selfhosting.sh-Beispiele verwenden 3000 bzw. 5000; einige Community-Anleitungen nutzen 3765. Wähle einen beliebigen freien Port auf deinem NAS. Diese Anleitung empfiehlt 3000, weil er der offiziellen Doku am nächsten kommt und leicht zu merken ist.

Fazit

Excalidraw ist eines der unkompliziertesten Self-Hosting-Projekte überhaupt: Ein Container, keine Datenbank, keine Volumes, 41 MB Image, zehn Minuten Aufwand. Für Teams, die gemeinsam Architektur-Skizzen erstellen, Workshops strukturieren oder Ideen visualisieren wollen, ist es eine überzeugende Alternative zum Miro-Abo – besonders wenn die Daten das interne Netz nicht verlassen sollen.

Die wichtigsten Einschränkungen solltest du deinem Team klar kommunizieren: Zeichnungen leben im Browser-LocalStorage und sind bei Cache-Leerung ohne Export weg. Und die eingebaute Live-Kollaboration verbindet sich im Standard-Image mit dem öffentlichen Server – für vollständig lokale Echtzeit-Zusammenarbeit braucht es den Custom-Build-Weg. Für die häufigsten Anwendungsfälle im KMU – gemeinsame Skizzen, asynchrones Whiteboarding, Einbettung ins Outline-Wiki – reicht das Basis-Setup aber völlig aus.

Weiterführende Anleitungen und Quellen

Offizielle Quellen: Excalidraw auf Docker Hub · Excalidraw GitHub-Repository · selfhosting.sh Excalidraw-Setup