JournalindeksDockup / feltnotat
Note / self-host-excalidraw

Slik selvhoster du Excalidraw i 2026: samarbeid, TLS og datagrenser

En praktisk veiledning i selvhosting av Excalidraw, med Docker, porter, persistente data, TLS, sikkerhet, sikkerhetskopier og feilene som hindrer produksjonsbruk i 2026.

Hvis du allerede har prøvd å selvhoste Excalidraw, kjenner du sannsynligvis den frustrerende situasjonen: Grensesnittet vises, men samarbeid fungerer ikke fordi WebSocket-endepunktet er feil. Å opprette containeren på nytt løser sjelden uoverensstemmelser mellom URL-er, state og avhengigheter.

Denne gjennomgangen bruker ett konkret kriterium for ferdigstillelse — tegn og eksporter et diagram, del en samarbeidslenke via den konfigurerte romtjenesten og koble til en nettleser nummer to. Hvert konfigurasjonsvalg vurderes opp mot dette kriteriet, ikke mot et grønt containermerke.

Gjenopprett Excalidraw på en tom vert

For den grunnleggende Excalidraw-distribusjonen kan containerlaget kastes og bygges på nytt, og ingen datavolum er nødvendig. Gjenopprettingsmanifestet inneholder ingen serverdata i standardimaget; sikkerhetskopier eventuelle separate samarbeidstjenester. Hold image digest, konfigurasjon og eventuelle separat vedlikeholdte ressurser under endringskontroll.

Slett og opprett tjenesten på nytt i et rent miljø. Bekreft deretter at klienten bygges på nytt fra det låste imaget, og at den separate romtjenesten gjenoppretter eventuell samarbeidsstate den lover å beholde. Veiledningen fra Git-repository til produksjon er den relevante modellen her: bygg artefakten på nytt, og sikkerhetskopier bare ekstern state som faktisk finnes.

Ikke kall en katalog persistent med mindre Excalidraw skriver meningsfulle data der. Tomme eller ubrukte mounts skaper falsk trygghet og får senere operatører til å lete etter state på feil sted.

Kartlegg Excalidraw før du rører Docker

Excalidraws HTTP-prosess lytter på port 80. Behold denne porten på applikasjonsnettverket, og eksponer bare plattformruten. Det lokale runtime-kravet er en separat romserver og et lagringslag for persistent samarbeid. Hold livssyklusen eksplisitt, slik at flytting av Excalidraw mellom verter ikke endrer oppførselen i det stille.

Skriv ned grensen som en kort kontrakt: hvem som eier kravet, hvilken credential som brukes, hvilken timeout som er akseptabel, og hvordan en feil vises. Kjør deretter denne transaksjonen: tegn og eksporter et diagram, del en samarbeidslenke via den konfigurerte romtjenesten og koble til en nettleser nummer to. Observer levering av statiske ressurser for standardimaget, mens WebSocket-tilkoblinger og romstate tilhører den separate samarbeidstjenesten under kjøringen. Denne arbeidsbelastningen gir et mer nyttig utgangspunkt for dimensjonering enn en inaktiv container.

En produksjonsvalidering for Excalidraw

En releasekandidat for Excalidraw får trafikk ved å fullføre et fast scenario: tegn og eksporter et diagram, del en samarbeidslenke via den konfigurerte romtjenesten og koble til en nettleser nummer to. Registrer image digest, effektiv ikke-hemmelig konfigurasjon, offentlig origin og tidsstempler for dette scenarioet. Testdataene bør kunne kastes, men samtidig være realistiske nok til å utøve samme flyt som brukerne.

Kjør testen etter at runtime-miljøet er byttet ut, og bygg deretter tjenesten på nytt fra ingen serverdata i standardimaget; sikkerhetskopier eventuelle separate samarbeidstjenester. Gjenopprettingen er vellykket når klienten bygges på nytt fra det låste imaget, og den separate romtjenesten gjenoppretter eventuell samarbeidsstate den lover å beholde. Sammenlign ressursmålinger for levering av statiske ressurser for standardimaget, med WebSocket-tilkoblinger og romstate som tilhører den separate samarbeidstjenesten, med forrige release. Undersøk vesentlige avvik før utrulling.

Test til slutt denne kontrollerte feilen: send ufarlige data nær ressurs- eller formatgrensen som er knyttet til denne grensen: Grensesnittet vises, men samarbeid fungerer ikke fordi WebSocket-endepunktet er feil. Bekreft at Excalidraw forklarer feilen, ikke skader eksisterende state og gjenopptar driften når den gyldige tilstanden er tilbake. Lagre et redigert loggutdrag og gjenopprettingstiden. Til sammen dekker disse kontrollene funksjonalitet, bestandighet og drift — ikke bare at prosessen kjører.

Gjør den lokale kommandoen til en tjeneste du kan inspisere

En produksjonslignende oppstart er med vilje kjedelig: navngitt state, eksplisitt port og ingen secrets inne i imaget.

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

Eksempelet er et utgangspunkt, ikke en komplett supporting stack. Bekreft det lokale kravet før eksponering: en separat romserver og et lagringslag for persistent samarbeid. Kontroller de effektive mountene og lytteren, og prøv deretter å tegne og eksportere et diagram, dele en samarbeidslenke via den konfigurerte romtjenesten og koble til en nettleser nummer to. Lås imaget som fungerer før neste omstart.

Sikkerhetsvalg som gjelder spesielt for Excalidraw

Med Excalidraw er ikke account rotation den krevende delen av hardeningen, fordi standardimaget ikke har noen account store. Fokuser i stedet på å anta at det statiske imaget alene tilbyr persistent lagring av delte rom, og beskytt eventuelle private samarbeidsrom. Ikke hev at du har persistent samarbeid når bare Excalidraw-webimaget er distribuert.

Bruk HTTPS, valgfri plattformautentisering og en kontrollert image digest. Ikke mount uvedkommende data fra verten, og sett en grense for arbeidsbelastningen som representeres av levering av statiske ressurser for standardimaget, med WebSocket-tilkoblinger og romstate tilhørende den separate samarbeidstjenesten. En ren ekstern klient skal se det tiltenkte bygget, mens en uautorisert klient skal avvises før den når containeren når tilgangen er begrenset.

Rute Excalidraw uten å gi et feilaktig inntrykk av HTTPS

TLS-utstedelse er bare halve Excalidraw-ruten. Server klienten over HTTPS og konfigurer samarbeid-endepunkter separat. Send trafikken internt til port 80, og videresend det eksterne scheme slik at genererte URL-er og secure cookies forblir konsistente.

Bruk hele Excalidraw-scenarioet fra et rent nettverk, ikke bare rotsiden. En 502-feil eller sertifikatfeil kan isoleres med automatisk oppsett av domene og TLS. Hvis trafikken når prosessen og grensesnittet vises, men samarbeid fungerer ikke fordi WebSocket-endepunktet er feil, må du diagnostisere tilstanden der den oppstår i stedet for å legge på flere redirects.

Oppgrader Excalidraw uten å gjette

Den nyttige tjenesteindikatoren for Excalidraw er at følgende lykkes: «tegn og eksporter et diagram, del en samarbeidslenke via den konfigurerte romtjenesten og koble til en nettleser nummer to». Knytt resultatet til levering av statiske ressurser for standardimaget, med WebSocket-tilkoblinger og romstate tilhørende den separate samarbeidstjenesten. En grønn root-side sier ingenting om output-kompatibilitet eller ressursutarming.

Før du bytter image, må du ta høyde for denne risikoen: frontend-, room-server- og storage-versjoner bør testes sammen i stedet for å anta at den statiske klienten eier delte data. Test representative data og grensedata mot begge versjonene, og behold den gamle digest-en til kandidaten har bestått. Hvis grensesnittet vises, men samarbeid fungerer ikke fordi WebSocket-endepunktet er feil, må du undersøke request-formatet, klientens oppførsel og runtime-loggene før du endrer rute- eller storage-innstillinger.

Bruk Dockup for plattformlaget

En Excalidraw-mal med ett klikk bør angi image digest, port 80, health-timing, domene og TLS. Fordi basistjenesten er stateless, kan Dockup opprette den direkte på Dockup compute eller en tilkoblet maskin uten å late som et tomt volum er en sikkerhetskopi.

Etter oppstart: Server klienten over HTTPS og konfigurer samarbeid-endepunkter separat. Dockup bør bevare Excalidraws runtime-innstillinger mens operatøren bekrefter dette lokale kravet: en separat romserver og et lagringslag for persistent samarbeid. Bekreft dette resultatet: tegn og eksporter et diagram, del en samarbeidslenke via den konfigurerte romtjenesten og koble til en nettleser nummer to. Eventuelle senere stateful utvidelser må angi sitt eget mount, secret og sin egen gjenopprettingstest, i stedet for å endre betydningen av basismalen i det stille.

Vanlige spørsmål

Hva trenger Excalidraw for en produksjonsdistribusjon?

Rout Excalidraw-containeren på port 80 gjennom én HTTPS-origin. Det lokale runtime-kravet er en separat romserver og et lagringslag for persistent samarbeid. Ikke erklær Excalidraw klar før du kan tegne og eksportere et diagram, dele en samarbeidslenke via den konfigurerte romtjenesten og koble til en nettleser nummer to.

Hvilke Excalidraw-data hører hjemme i en sikkerhetskopi?

Standardimaget for Excalidraw har ikke noe nødvendig mount for applikasjonsdata. Bevar distribusjonskonfigurasjonen, og sikkerhetskopier tilkoblet state separat. Gjenopprettingen er vellykket når klienten bygges på nytt fra det låste imaget, og den separate romtjenesten gjenoppretter eventuell samarbeidsstate den lover å beholde.

Krever Excalidraw HTTPS bak en reverse proxy?

Bruk HTTPS for den offentlige Excalidraw-origin-en, og behold port 80 på den interne ruten. Bruk Excalidraw-innstillingen riktig: Server klienten over HTTPS og konfigurer samarbeid-endepunkter separat. For Excalidraw beskytter HTTPS credentials eller brukerinnhold under overføring og sørger for at origin-følsom klientoppførsel forblir konsistent.

Hvordan bør en Excalidraw-oppgradering testes?

Distribuer kandidat-imaget for Excalidraw ved siden av den nåværende versjonen, og gjenta valideringstransaksjonen med kjente data. Vær spesielt oppmerksom på at frontend-, room-server- og storage-versjoner bør testes sammen i stedet for å anta at den statiske klienten eier delte data. Standardcontaineren har ingen datamigrering, så behold den forrige digest-en til kontroller av output og kompatibilitet er bestått.