JournalindexDockup / fältanteckning
Note / self-host-excalidraw

Så självhostar du Excalidraw 2026: samarbete, TLS och datagränser

En praktisk guide till att självhosta Excalidraw med Docker, portar, beständig data, TLS, säkerhet, säkerhetskopior och de problem som hindrar produktionsanvändning. För 2026.

Om du redan har försökt självhosta Excalidraw känner du troligen igen det frustrerande läget: gränssnittet visas, men samarbetet fungerar inte eftersom WebSocket-endpointen är fel. Att återskapa containern löser sällan en konflikt mellan URL:er, state och beroenden.

Den här genomgången använder ett konkret kriterium för att vara klar – rita och exportera ett diagram, dela en samarbetslänk via den konfigurerade room-servern och återanslut en andra webbläsare. Varje konfigurationsval utvärderas mot det kriteriet, inte mot en grön containerstatus.

Återställ Excalidraw på en tom värd

För den grundläggande Excalidraw-installationen är containerlagret temporärt och ingen datavolym krävs. Återställningsmanifestet innehåller inga serverdata i standardavbildningen; säkerhetskopiera separata samarbetstjänster. Hantera image digest, konfiguration och eventuella separat underhållna tillgångar enligt change control.

Ta bort och återskapa tjänsten i en ren miljö och verifiera sedan att klienten byggs om från sin pinnade image samt att den separata room-servern återställer allt collaboration state som den lovar att behålla. Guiden från Git repository till produktion är den relevanta modellen här: bygg om artefakten och säkerhetskopiera bara extern state som faktiskt finns.

Märk inte en katalog som persistent om Excalidraw inte skriver meningsfull data där. Tomma eller oanvända mounts skapar falsk trygghet och får framtida operatörer att leta efter state på fel plats.

Kartlägg Excalidraw innan du rör Docker

Excalidraws HTTP-process lyssnar på port 80. Behåll den porten i applikationsnätverket och publicera endast plattformsrutten. Det lokala runtime-kravet är en separat room-server och ett storage layer för persistent collaboration. Håll dess livscykel tydlig så att en flytt av Excalidraw mellan värdar inte omärkligt ändrar beteendet.

Skriv ned gränsen som ett kort kontrakt: vem som äger kravet, vilken credential som används, vilken timeout som är acceptabel och hur ett fel visas. Kör sedan den här transaktionen: rita och exportera ett diagram, dela en samarbetslänk via den konfigurerade room-servern och återanslut en andra webbläsare. Observera leveransen av statiska tillgångar för standardavbildningen, medan WebSocket-anslutningar och room state tillhör den separata samarbetstjänsten under körningen, eftersom den arbetsbelastningen ger en mer användbar startstorlek än en inaktiv container.

Ett produktionsgodkännande för Excalidraw

En releasekandidat för Excalidraw får ta emot trafik genom att slutföra ett fast scenario: rita och exportera ett diagram, dela en samarbetslänk via den konfigurerade room-servern och återansluta en andra webbläsare. Dokumentera image digest, effektiv icke-hemlig konfiguration, publik origin och tidsstämplar för scenariot. Testdata ska kunna slängas, men vara tillräckligt realistisk för att köra samma flöde som användarna.

Kör det efter att runtime har ersatts och bygg sedan om tjänsten från en standardimage utan serverdata; säkerhetskopiera en separat samarbetstjänst. Återställningen är godkänd när klienten byggs om från sin pinnade image och den separata room-servern återställer allt collaboration state som den lovar att behålla. Jämför resursmätningar för leverans av statiska tillgångar från standardavbildningen, medan WebSocket-anslutningar och room state tillhör den separata samarbetstjänsten, med föregående release och undersök betydande avvikelser innan lansering.

Testa slutligen detta kontrollerade fel: skicka ofarlig input nära resurs- eller formatgränsen som hör till den här gränsen: gränssnittet laddas, men samarbetet fungerar inte eftersom WebSocket-endpointen är fel. Verifiera att Excalidraw förklarar felet, inte skadar befintlig state och återhämtar sig när det giltiga villkoret återkommer. Spara ett redigerat loggutdrag och återställningstiden. Tillsammans täcker dessa kontroller beteende, beständighet och driftbarhet – inte bara att processen är igång.

Gör det lokala kommandot till en inspekterbar tjänst

En produktionslik start är avsiktligt odramatisk: namngiven state, explicit port och inga hemligheter i imagen.

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

Exemplet är en baslinje, inte en komplett supporting stack. Bekräfta det lokala kravet innan exponering: en separat room-server och ett storage layer för persistent collaboration. Kontrollera effektiva mounts och lyssnaren och försök sedan rita och exportera ett diagram, dela en samarbetslänk via den konfigurerade room-servern och återansluta en andra webbläsare. Pinna den fungerande imagen före nästa omstart.

Säkerhetsbeslut specifika för Excalidraw

För Excalidraw är account rotation inte den centrala hardening-uppgiften, eftersom standardimagen saknar ett account store. Fokusera i stället på att inte anta att den statiska imagen ensam tillhandahåller beständig lagring för delade rum. Skydda privata samarbetsrum och hävda inte att collaboration är beständig när endast Excalidraws webimage är installerad.

Använd HTTPS, valfri plattformsautentisering och en granskad image digest. Mounta inga orelaterade värddata och begränsa den workload som representeras av leverans av statiska tillgångar från standardavbildningen, medan WebSocket-anslutningar och room state tillhör den separata samarbetstjänsten. En ren extern klient ska se den avsedda builden, medan en obehörig klient ska avvisas innan den når containern när åtkomsten är begränsad.

Routa Excalidraw utan att vilseleda om HTTPS

TLS-utfärdande är bara halva Excalidraw-routen. Servera klienten över HTTPS och konfigurera collaboration-endpoints separat. Skicka trafiken internt till port 80 och vidarebefordra det externa schemat så att genererade URL:er och secure cookies förblir konsekventa.

Kör hela Excalidraw-scenariot från ett rent nätverk, inte bara rotsidan. Ett 502-fel eller ett certifikatfel kan isoleras med automatisk domän- och TLS-konfiguration. Om trafiken når processen och gränssnittet laddas men samarbetet inte fungerar eftersom WebSocket-endpointen är fel, felsök villkoret där det uppstår i stället för att stapla redirects.

Uppgradera Excalidraw utan att gissa

Den användbara tjänsteindikatorn för Excalidraw är att “rita och exportera ett diagram, dela en samarbetslänk via den konfigurerade room-servern och återansluta en andra webbläsare” slutförs. Kombinera resultatet med leverans av statiska tillgångar från standardavbildningen, medan WebSocket-anslutningar och room state tillhör den separata samarbetstjänsten. En grön rotwebbsida säger inget om output-kompatibilitet eller resursbrist.

Innan du ersätter imagen måste du ta hänsyn till den här risken: versionerna av frontend, room-server och storage bör testas tillsammans i stället för att anta att den statiska klienten äger delad data. Testa representativa indata och gränsindata mot båda versionerna och behåll den gamla digesten tills kandidaten är godkänd. Om gränssnittet laddas men samarbetet inte fungerar eftersom WebSocket-endpointen är fel, inspektera request-format, klientbeteende och runtime-loggar innan du ändrar route- eller storage-inställningar.

Använd Dockup för plattformslagret

En Excalidraw-mall med one-click-installation bör ange image digest, port 80, health-timing, domän och TLS. Eftersom bastjänsten är stateless kan Dockup återskapa den direkt på Dockup compute eller på en ansluten maskin utan att låtsas att en tom volym är en säkerhetskopia.

Efter lanseringen ska klienten serveras över HTTPS och collaboration-endpoints konfigureras separat. Dockup bör bevara Excalidraws runtime-inställningar medan operatören bekräftar detta lokala krav: en separat room-server och ett storage layer för persistent collaboration. Verifiera följande resultat: rita och exportera ett diagram, dela en samarbetslänk via den konfigurerade room-servern och återanslut en andra webbläsare. Alla senare stateful utökningar måste deklarera sitt eget mount, sin egen secret och sitt eget återställningstest, i stället för att i tysthet ändra betydelsen av basmallen.

Vanliga frågor

Vad behöver Excalidraw för en produktionsinstallation?

Routa Excalidraw-containern på port 80 genom en HTTPS-origin. Det lokala runtime-kravet är en separat room-server och ett storage layer för persistent collaboration. Anse inte Excalidraw vara klart förrän du kan rita och exportera ett diagram, dela en samarbetslänk via den konfigurerade room-servern och återansluta en andra webbläsare.

Vilka Excalidraw-data ska ingå i en säkerhetskopia?

Standardimagen för Excalidraw har inget obligatoriskt mount för applikationsdata. Bevara dess distributionskonfiguration och säkerhetskopiera ansluten state separat. Återställningen är godkänd när klienten byggs om från sin pinnade image och den separata room-servern återställer allt collaboration state som den lovar att behålla.

Kräver Excalidraw HTTPS bakom en reverse proxy?

Använd HTTPS för den publika Excalidraw-originen och behåll port 80 i den interna routen. Tillämpa Excalidraw-inställningen korrekt: servera klienten över HTTPS och konfigurera collaboration-endpoints separat. För Excalidraw skyddar HTTPS credentials eller användarinnehåll under överföring och håller origin-känsligt klientbeteende konsekvent.

Hur bör en Excalidraw-uppgradering testas?

Distribuera kandidatens Excalidraw-image bredvid den aktuella och upprepa godkännandetransaktionen med kända indata. Var särskilt uppmärksam eftersom versionerna av frontend, room-server och storage bör testas tillsammans i stället för att anta att den statiska klienten äger delad data. Standardcontainern har ingen datamigrering, så behåll den tidigare digesten tills kontroller av output och kompatibilitet är godkända.