Excalidraw zelf hosten in 2026: samenwerking, TLS en datagrenzen
Een praktische handleiding voor het zelf hosten van Excalidraw, met aandacht voor Docker, poorten, persistente data, TLS, beveiliging, back-ups en problemen die productiegebruik blokkeren. In 2026.
Als je al eens hebt geprobeerd Excalidraw zelf te hosten, herken je waarschijnlijk de frustrerende situatie: de UI verschijnt, maar hoewel de UI laadt, mislukt collaboration omdat het WebSocket-endpoint verkeerd is. De container opnieuw aanmaken lost een verschil tussen URL's, state en dependencies zelden op.
In deze walkthrough gebruiken we één concreet criterium voor voltooiing: teken en exporteer een diagram, deel een collaboration-link via de geconfigureerde room service en maak opnieuw verbinding met een tweede browser. Elke configuratiekeuze wordt aan dat criterium getoetst, niet aan een groen containerbadge.
Excalidraw herstellen op een lege host
Voor de basisdeployment van Excalidraw is de containerlaag wegwerpbaar en is geen datavolume nodig. Het recovery-manifest bevat geen serverdata in de basic image; maak back-ups van een eventuele afzonderlijke collaboration-service. Houd de image digest, configuratie en eventueel afzonderlijk beheerde assets onder change control.
Verwijder de service en maak deze opnieuw aan in een schone omgeving. Controleer vervolgens dat de client opnieuw wordt opgebouwd vanuit de gepinde image en dat de afzonderlijke room service alle collaboration-state herstelt die deze belooft te bewaren. De handleiding van Git-repository naar productie is hier het relevante model: bouw het artefact opnieuw op en maak alleen een back-up van externe state die daadwerkelijk bestaat.
Markeer een directory niet als persistent tenzij Excalidraw daar betekenisvolle data naartoe schrijft. Lege of ongebruikte mounts creëren schijnzekerheid en zorgen ervoor dat operators later op de verkeerde plek naar state zoeken.
Excalidraw in kaart brengen voordat je Docker aanraakt
Het Excalidraw HTTP-proces luistert op poort 80; houd die poort op het applicatienetwerk en publiceer alleen de platformroute. De lokale runtimevereiste is een afzonderlijke room server en storage-laag voor persistente collaboration. Houd de lifecycle daarvan expliciet, zodat het verplaatsen van Excalidraw tussen hosts het gedrag niet ongemerkt verandert.
Leg de grens vast in een kort contract: wie verantwoordelijk is voor de vereiste, welke credential wordt gebruikt, welke timeout acceptabel is en hoe een fout zichtbaar wordt. Voer vervolgens deze transactie uit: teken en exporteer een diagram, deel een collaboration-link via de geconfigureerde room service en maak opnieuw verbinding met een tweede browser. Observeer tijdens de run de levering van static assets voor de basic image, waarbij WebSocket-verbindingen en room-state bij de afzonderlijke collaboration-service horen. Die workload levert namelijk een nuttiger uitgangspunt voor sizing dan een idle container.
Een production acceptance run voor Excalidraw
Een release candidate voor Excalidraw verdient traffic door een vast scenario succesvol af te ronden: teken en exporteer een diagram, deel een collaboration-link via de geconfigureerde room service en maak opnieuw verbinding met een tweede browser. Leg voor dat scenario de image digest, de effectieve niet-geheime configuratie, de public origin en de tijdstempels vast. De testdata moet wegwerpbaar zijn, maar realistisch genoeg om hetzelfde pad als gebruikers te testen.
Voer dit uit nadat je de runtime hebt vervangen. Bouw de service daarna opnieuw op vanuit de situatie zonder serverdata in de basic image; maak een back-up van een eventuele afzonderlijke collaboration-service. Recovery is geslaagd wanneer de client opnieuw wordt opgebouwd vanuit de gepinde image en de afzonderlijke room service alle collaboration-state herstelt die deze belooft te bewaren. Vergelijk de resource measurements voor de levering van static assets voor de basic image, waarbij WebSocket-verbindingen en room-state bij de afzonderlijke collaboration-service horen, met de vorige release en onderzoek betekenisvolle afwijkingen voordat je promoot.
Voer ten slotte deze gecontroleerde fout uit: dien onschadelijke input in die dicht bij de resource- of formatlimiet voor deze grens ligt: de UI laadt, maar collaboration mislukt omdat het WebSocket-endpoint verkeerd is. Controleer of Excalidraw de fout uitlegt, bestaande state niet beschadigt en hervat zodra de geldige toestand terugkeert. Bewaar een geredigeerd logfragment en de recoverytijd. Samen dekken deze controles gedrag, duurzaamheid en operability — niet alleen de uptime van het proces.
Het lokale commando omzetten in een inspecteerbare service
Een production-shaped launch is bewust saai: benoemde state, een expliciete poort en geen secret in de image.
docker run -d \
--name excalidraw \
--restart unless-stopped \
-p 127.0.0.1:80:80 \
excalidraw/excalidraw:latest
Het voorbeeld is een baseline en geen volledige supporting stack. Bevestig de lokale vereiste vóór je de service blootstelt: een afzonderlijke room server en storage-laag voor persistente collaboration. Controleer de effectieve mounts en de listener en probeer vervolgens een diagram te tekenen en te exporteren, een collaboration-link via de geconfigureerde room service te delen en opnieuw verbinding te maken met een tweede browser. Pin de werkende image voordat je opnieuw opstart.
Beveiligingskeuzes die specifiek zijn voor Excalidraw
Bij Excalidraw is accountrotatie niet de hardeningtaak, omdat de standaardimage geen account store heeft. Richt je op het vermijden van de aanname dat de static image alleen persistente shared-room storage biedt, bescherm private collaboration rooms en claim geen persistente collaboration wanneer alleen de Excalidraw-webimage is uitgerold.
Gebruik HTTPS, optionele platform authentication en een gecontroleerde image digest. Mount geen niet-gerelateerde hostdata en beperk de workload die wordt vertegenwoordigd door de levering van static assets voor de basic image, waarbij WebSocket-verbindingen en room-state bij de afzonderlijke collaboration-service horen. Een schone externe client moet de bedoelde build zien, terwijl een niet-geautoriseerde client vóór het bereiken van de container moet worden geweigerd wanneer de toegang beperkt is.
Excalidraw routeren zonder over HTTPS te liegen
TLS-uitgifte is slechts de helft van de Excalidraw-route. Serveer de client via HTTPS en configureer collaboration-endpoints afzonderlijk. Stuur traffic intern naar poort 80 en forward het externe scheme, zodat gegenereerde URL's en secure cookies consistent blijven.
Gebruik het volledige Excalidraw-scenario vanaf een schoon netwerk, niet alleen de rootpagina. Een 502 of certificate failure kun je isoleren met automatische domein- en TLS-configuratie. Als traffic het proces bereikt en de UI laadt, maar collaboration mislukt omdat het WebSocket-endpoint verkeerd is, diagnoseer die toestand dan op de plek waar deze optreedt in plaats van redirects op te stapelen.
Excalidraw upgraden zonder te gokken
De nuttige service-indicator voor Excalidraw is het succesvol voltooien van “teken en exporteer een diagram, deel een collaboration-link via de geconfigureerde room service en maak opnieuw verbinding met een tweede browser”. Combineer dat resultaat met de levering van static assets voor de basic image, waarbij WebSocket-verbindingen en room-state bij de afzonderlijke collaboration-service horen; een groene rootpagina zegt niets over outputcompatibiliteit of resource exhaustion.
Houd vóór je de image vervangt rekening met dit risico: frontend-, room-server- en storage-versies moeten samen worden getest, in plaats van aan te nemen dat de static client eigenaar is van shared data. Test representatieve input en grenswaarden tegen beide versies en bewaar de oude digest totdat de kandidaat is geslaagd. Als de UI laadt, maar collaboration mislukt omdat het WebSocket-endpoint verkeerd is, inspecteer dan het requestformaat, het clientgedrag en de runtime-logboeken voordat je route- of storage-instellingen wijzigt.
Dockup gebruiken voor de platformlaag
Een Excalidraw-template met one-click deployment moet de image digest, poort 80, health timing, het domein en TLS vastleggen. Omdat de basisservice stateless is, kan Dockup deze rechtstreeks opnieuw aanmaken op Dockup compute of een gekoppelde machine, zonder te doen alsof een leeg volume een back-up is.
Serveer de client na de launch via HTTPS en configureer collaboration-endpoints afzonderlijk. Dockup moet de Excalidraw-runtime-instellingen behouden, terwijl de operator deze lokale vereiste bevestigt: een afzonderlijke room server en storage-laag voor persistente collaboration. Controleer deze uitkomst: teken en exporteer een diagram, deel een collaboration-link via de geconfigureerde room service en maak opnieuw verbinding met een tweede browser. Elke latere stateful uitbreiding moet zijn eigen mount, secret en restore-test definiëren, zonder de betekenis van de basistemplate ongemerkt te veranderen.
Veelgestelde vragen
Wat heeft Excalidraw nodig voor een productieomgeving?
Routeer de Excalidraw-container op poort 80 via één HTTPS-origin. De lokale runtimevereiste is een afzonderlijke room server en storage-laag voor persistente collaboration. Noem Excalidraw pas production-ready wanneer je een diagram kunt tekenen en exporteren, een collaboration-link via de geconfigureerde room service kunt delen en opnieuw verbinding kunt maken met een tweede browser.
Welke Excalidraw-data hoort in een back-up?
De standaard Excalidraw-image heeft geen vereiste mount voor applicatiedata. Bewaar de deploymentconfiguratie en maak afzonderlijk een back-up van alle gekoppelde state; recovery is geslaagd wanneer de client opnieuw wordt opgebouwd vanuit de gepinde image en de afzonderlijke room service alle collaboration-state herstelt die deze belooft te bewaren.
Heeft Excalidraw HTTPS nodig achter een reverse proxy?
Gebruik HTTPS voor de publieke Excalidraw-origin en houd poort 80 op de interne route. Pas de Excalidraw-instelling correct toe: serveer de client via HTTPS en configureer collaboration-endpoints afzonderlijk. Voor Excalidraw beschermt HTTPS credentials of gebruikerscontent tijdens transport en blijft clientgedrag dat gevoelig is voor de origin consistent.
Hoe moet je een Excalidraw-upgrade testen?
Deploy de kandidaat-Excalidaw-image naast de huidige image en herhaal de acceptance-transactie met bekende input. Let hier extra op, omdat frontend-, room-server- en storage-versies samen moeten worden getest, in plaats van aan te nemen dat de static client eigenaar is van shared data. De standaardcontainer heeft geen datamigratie. Bewaar daarom de vorige digest totdat de output- en compatibiliteitscontroles zijn geslaagd.
