Index denníkaDockup / poznámka z terénu
Note / self-host-excalidraw

Ako hostovať Excalidraw vo vlastnej réžii v roku 2026: spolupráca, TLS a hranice dát

Praktický návod na self-hosting Excalidrawu, ktorý pokrýva Docker, porty, perzistentné dáta, TLS, bezpečnosť, zálohy a zlyhania brániace použitiu v produkcii. V roku 2026.

Ak ste sa už pokúšali hostovať Excalidraw vo vlastnej réžii, tento frustrujúci stav vám bude pravdepodobne povedomý: rozhranie sa zobrazí, ale spolupráca zlyhá, pretože jeho WebSocket endpoint je nesprávny. Opätovné vytvorenie kontajnera zriedka vyrieši nesúlad medzi URL, stavom a závislosťami.

Tento postup používa jedno konkrétne kritérium dokončenia — nakresliť a exportovať diagram, zdieľať odkaz na spoluprácu cez nakonfigurovanú room service a znova pripojiť druhý prehliadač. Každé konfiguračné rozhodnutie posudzujeme podľa tohto kritéria, nie podľa zelenej značky kontajnera.

Obnovenie Excalidrawu na prázdnom hoste

Pri základnom nasadení Excalidrawu je vrstva kontajnera jednorazová a nevyžaduje sa žiadny dátový volume. Obnovovací manifest neobsahuje v základnom image žiadne serverové dáta; zálohujte každú samostatnú collaboration service. Image digest, konfiguráciu a všetky samostatne spravované assety majte pod change control.

Odstráňte a znova vytvorte service v čistom prostredí a následne overte, že sa klient obnoví z pinned image a samostatná room service obnoví všetok stav spolupráce, ktorý má podľa svojho účelu uchovávať. Relevantným modelom je návod od Git repository po produkciu: znovu zostavte artifact a zálohujte iba externý stav, ktorý skutočne existuje.

Adresár neoznačujte ako perzistentný, pokiaľ doň Excalidraw nezapisuje zmysluplné dáta. Prázdne alebo nepoužívané mounty vytvárajú falošný pocit istoty a neskôr vedú operátorov k hľadaniu stavu na nesprávnom mieste.

Zmapujte Excalidraw skôr, než sa dotknete Dockeru

HTTP proces Excalidrawu počúva na porte 80; tento port ponechajte v aplikačnej sieti a publikujte iba platformovú route. Lokálnou runtime požiadavkou je samostatný room server a storage layer pre perzistentnú spoluprácu. Ich lifecycle majte explicitne definovaný, aby presun Excalidrawu medzi hostmi potichu nezmenil jeho správanie.

Hranice si zapíšte ako krátky contract: kto vlastní danú požiadavku, ktoré credentials sa používajú, aký timeout je prijateľný a ako sa prejaví zlyhanie. Potom vykonajte túto transakciu: nakreslite a exportujte diagram, zdieľajte odkaz na spoluprácu cez nakonfigurovanú room service a znova pripojte druhý prehliadač. Počas behu sledujte doručovanie static assets zo základného image, pričom WebSocket connections a stav miestnosti patria samostatnej collaboration service, pretože takáto záťaž poskytuje užitočnejšiu východiskovú veľkosť než nečinný kontajner.

Produkčný acceptance test pre Excalidraw

Release candidate Excalidrawu si zaslúži traffic až po dokončení pevne definovaného scenára: nakresliť a exportovať diagram, zdieľať odkaz na spoluprácu cez nakonfigurovanú room service a znova pripojiť druhý prehliadač. Pre tento scenár zaznamenajte image digest, efektívnu konfiguráciu bez secrets, public origin a timestamps. Testovacie dáta by mali byť jednorazové, no zároveň dostatočne realistické na overenie rovnakej cesty, akú používajú používatelia.

Spustite ho po nahradení runtime a potom service znova zostavte bez serverových dát v základnom image; zálohujte každú samostatnú collaboration service. Obnova je úspešná, keď sa klient obnoví z pinned image a samostatná room service obnoví všetok stav spolupráce, ktorý má podľa svojho účelu uchovávať. Porovnajte merania zdrojov pri doručovaní static assets zo základného image, pričom WebSocket connections a stav miestnosti patria samostatnej collaboration service, s predchádzajúcim release a pred promotion preskúmajte každý významný rozdiel.

Nakoniec vykonajte toto riadené zlyhanie: odošlite neškodný vstup blízko limitu zdrojov alebo formátu súvisiaceho s touto hranicou: rozhranie sa načíta, ale spolupráca zlyhá, pretože jeho WebSocket endpoint je nesprávny. Overte, že Excalidraw zlyhanie vysvetlí, nepoškodí existujúci stav a po návrate platných podmienok bude opäť fungovať. Uložte redigovaný výpis logu a čas obnovy. Tieto kontroly spolu overujú správanie, trvácnosť aj operovateľnosť, nielen dostupnosť procesu.

Premeňte lokálny príkaz na kontrolovateľnú service

Produkčne vyzerajúce spustenie je zámerne nudné: pomenovaný stav, explicitný port a žiadny secret v image.

docker run -d \
  --name excalidraw \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  excalidraw/excalidraw:latest

Príklad je základom, nie kompletným supporting stackom. Pred vystavením služby overte lokálnu požiadavku: samostatný room server a storage layer pre perzistentnú spoluprácu. Skontrolujte efektívne mounty a listener a potom skúste nakresliť a exportovať diagram, zdieľať odkaz na spoluprácu cez nakonfigurovanú room service a znova pripojiť druhý prehliadač. Pred ďalším reštartom pin the working image.

Bezpečnostné rozhodnutia špecifické pre Excalidraw

Pri Excalidrawu nie je rotácia účtov úlohou hardeningu, pretože štandardný image nemá account store. Zamerajte sa na to, že samotný static image neposkytuje trvalé úložisko zdieľaných miestností, chráňte všetky súkromné collaboration rooms a netvrďte, že spolupráca je trvalá, keď je nasadený iba webový image Excalidrawu.

Použite HTTPS, voliteľnú platformovú autentifikáciu a overený image digest. Nemountujte nesúvisiace dáta z hosta a obmedzte workload predstavovaný doručovaním static assets zo základného image, pričom WebSocket connections a stav miestnosti patria samostatnej collaboration service. Čistý externý klient by mal dostať očakávaný build, zatiaľ čo neautorizovaný klient by mal byť pri obmedzenom prístupe odmietnutý ešte pred dosiahnutím kontajnera.

Routujte Excalidraw bez predstierania HTTPS

Vydanie TLS certifikátu je iba polovicou route pre Excalidraw. Klienta servujte cez HTTPS a collaboration endpoints konfigurujte samostatne. Internú prevádzku smerujte na port 80 a forwardujte externú schému, aby generované URL a secure cookies zostali konzistentné.

Kompletný scenár Excalidrawu spustite z čistej siete, nielen načítanie root page. Chybu 502 alebo problém s certifikátom môžete izolovať pomocou automatického nastavenia domény a TLS. Ak traffic dosiahne proces a rozhranie sa načíta, ale spolupráca zlyhá, pretože jeho WebSocket endpoint je nesprávny, diagnostikujte tento stav na mieste, kde vzniká, namiesto vrstvenia redirectov.

Aktualizujte Excalidraw bez hádania

Užitočným indikátorom service pre Excalidraw je úspešné dokončenie scenára „nakresliť a exportovať diagram, zdieľať odkaz na spoluprácu cez nakonfigurovanú room service a znova pripojiť druhý prehliadač“. Tento výsledok skombinujte s doručovaním static assets zo základného image, pričom WebSocket connections a stav miestnosti patria samostatnej collaboration service; zelená root page nehovorí nič o kompatibilite výstupu ani vyčerpaní zdrojov.

Pred nahradením image zohľadnite toto riziko: verzie frontendu, room-servera a storage by sa mali testovať spolu, nie za predpokladu, že shared data vlastní static client. Reprezentatívne aj hraničné vstupy testujte v oboch verziách a starý digest si ponechajte, kým candidate neprejde testami. Ak sa rozhranie načíta, ale spolupráca zlyhá, pretože jeho WebSocket endpoint je nesprávny, pred zmenou nastavení route alebo storage skontrolujte request format, správanie klienta a runtime logs.

Použite Dockup pre platformovú vrstvu

One-click template pre Excalidraw by mal obsahovať image digest, port 80, health timing, doménu a TLS. Keďže základná service je stateless, Dockup ju môže priamo znovu vytvoriť na Dockup compute alebo pripojenom stroji bez predstierania, že prázdny volume je záloha.

Po spustení servujte klienta cez HTTPS a collaboration endpoints konfigurujte samostatne. Dockup by mal zachovať runtime nastavenia Excalidrawu, zatiaľ čo operátor overí túto lokálnu požiadavku: samostatný room server a storage layer pre perzistentnú spoluprácu. Overte tento výsledok: nakreslite a exportujte diagram, zdieľajte odkaz na spoluprácu cez nakonfigurovanú room service a znova pripojte druhý prehliadač. Každé neskoršie rozšírenie so stavom musí deklarovať vlastný mount, secret a restore test, a nie potichu meniť význam základnej šablóny.

Často kladené otázky

Čo Excalidraw potrebuje na produkčné nasadenie?

Nasmerujte Excalidraw kontajner na porte 80 cez jeden HTTPS origin. Lokálnou runtime požiadavkou je samostatný room server a storage layer pre perzistentnú spoluprácu. Excalidrad nepovažujte za pripravený, kým nedokážete nakresliť a exportovať diagram, zdieľať odkaz na spoluprácu cez nakonfigurovanú room service a znova pripojiť druhý prehliadač.

Ktoré dáta Excalidrawu patria do zálohy?

Štandardný image Excalidrawu nemá povinný mount pre aplikačné dáta. Zachovajte jeho deployment configuration a každý pripojený stav zálohujte samostatne; obnova je úspešná, keď sa klient obnoví z pinned image a samostatná room service obnoví všetok stav spolupráce, ktorý má podľa svojho účelu uchovávať.

Vyžaduje Excalidraw HTTPS za reverse proxy?

Pre public origin Excalidrawu používajte HTTPS a port 80 ponechajte na internej route. Nastavenie Excalidrawu aplikujte správne: klienta servujte cez HTTPS a collaboration endpoints konfigurujte samostatne. V prípade Excalidrawu HTTPS chráni credentials alebo obsah používateľa pri prenose a udržiava konzistentné správanie klienta závislé od originu.

Ako testovať upgrade Excalidrawu?

Candidate image Excalidrawu nasaďte vedľa aktuálnej verzie a zopakujte acceptance transaction so známym vstupom. Venujte tomu mimoriadnu pozornosť, pretože verzie frontendu, room-servera a storage by sa mali testovať spolu, nie za predpokladu, že shared data vlastní static client. Štandardný kontajner nemá data migration, preto si ponechajte predchádzajúci digest, kým neprejdú kontroly výstupu a kompatibility.