Indeks dnevnikaDockup / bilješka s terena
Note / self-host-excalidraw

Kako samostalno hostati Excalidraw 2026.: suradnja, TLS i granice podataka

Praktični vodič za samostalno hostanje Excalidrawa koji obuhvaća Docker, portove, trajne podatke, TLS, sigurnost, sigurnosne kopije i kvarove koji onemogućuju produkcijsku upotrebu. U 2026.

Ako ste već pokušali samostalno hostati Excalidraw, vjerojatno vam je poznato frustrirajuće stanje: sučelje se prikazuje, ali se suradnja ne odvija jer je njegova WebSocket krajnja točka pogrešna. Ponovno stvaranje containera rijetko rješava neslaganje između URL-ova, stanja i ovisnosti.

Ovaj vodič koristi jedan konkretan kriterij dovršenosti — nacrtajte i izvezite dijagram, podijelite poveznicu za suradnju putem konfiguriranog room servisa i ponovno povežite drugi preglednik. Svaki se odabir konfiguracije procjenjuje prema tom kriteriju, a ne prema zelenoj oznaci containera.

Vratite Excalidraw na prazan host

Za osnovnu implementaciju Excalidrawa sloj containera je potrošan i nije potreban podatkovni volumen. Manifest za oporavak ne sadrži podatke poslužitelja u osnovnoj slici; sigurnosno kopirajte svaki zasebni servis za suradnju. Digest slike, konfiguraciju i svu zasebno održavanu imovinu držite pod kontrolom promjena.

Obrišite i ponovno izradite servis u čistom okruženju, a zatim dokažite da se klijent ponovno izgrađuje iz svoje zaključane slike te da zasebni room servis vraća svako stanje suradnje koje obećava zadržati. Ovdje je relevantan vodič od Git repozitorija do produkcije: ponovno izgradite artefakt i sigurnosno kopirajte samo vanjsko stanje koje doista postoji.

Direktorij nemojte označiti trajnim ako Excalidraw u njega ne zapisuje smislene podatke. Prazni ili neiskorišteni mountovi stvaraju lažan osjećaj sigurnosti i kasnijim operatorima otežavaju pronalaženje stanja na pravom mjestu.

Mapirajte Excalidraw prije rada s Dockerom

HTTP proces Excalidrawa osluškuje port 80; taj port zadržite na aplikacijskoj mreži i objavite samo platformsku rutu. Lokalni runtime zahtijeva zaseban room server i sloj pohrane za trajnu suradnju. Njegov životni ciklus držite eksplicitnim kako premještanje Excalidrawa između hostova ne bi neprimjetno promijenilo ponašanje.

Granice zapišite kao kratak ugovor: tko je odgovoran za zahtjev, koja se vjerodajnica koristi, koje je prihvatljivo vremensko ograničenje i kako se kvar manifestira. Zatim provedite ovu transakciju: nacrtajte i izvezite dijagram, podijelite poveznicu za suradnju putem konfiguriranog room servisa i ponovno povežite drugi preglednik. Tijekom izvođenja promatrajte isporuku statičkih resursa osnovne slike, dok WebSocket veze i stanje prostorija pripadaju zasebnom servisu za suradnju, jer takvo opterećenje pruža korisniju početnu veličinu od neaktivnog containera.

Produkcijski test prihvaćanja za Excalidraw

Kandidat za izdanje Excalidrawa dobiva promet dovršavanjem fiksnog scenarija: nacrtajte i izvezite dijagram, podijelite poveznicu za suradnju putem konfiguriranog room servisa i ponovno povežite drugi preglednik. Za taj scenarij zabilježite digest slike, učinkovitu konfiguraciju bez tajni, javno izvorište i vremenske oznake. Testni podaci trebaju biti potrošni, ali dovoljno realistični da aktiviraju isti put kojim se koriste korisnici.

Pokrenite ga nakon zamjene runtimea, a zatim ponovno izgradite servis bez podataka poslužitelja u osnovnoj slici; sigurnosno kopirajte svaki zasebni servis za suradnju. Oporavak je uspješan kada se klijent ponovno izgradi iz svoje zaključane slike, a zasebni room servis vrati svako stanje suradnje koje obećava zadržati. Usporedite mjerenja resursa za isporuku statičkih resursa osnovne slike, dok WebSocket veze i stanje prostorija pripadaju zasebnom servisu za suradnju, s prethodnim izdanjem te istražite značajna odstupanja prije puštanja u rad.

Na kraju provedite ovaj kontrolirani kvar: pošaljite bezopasan unos blizu ograničenja resursa ili formata povezanog s ovom granicom: sučelje se prikazuje, ali suradnja ne uspijeva jer je njegova WebSocket krajnja točka pogrešna. Provjerite objašnjava li Excalidraw kvar, ne oštećuje li postojeće stanje i nastavlja li s radom nakon ponovne uspostave valjanog uvjeta. Spremite redigirani isječak zapisnika i vrijeme oporavka. Ove provjere zajedno obuhvaćaju ponašanje, trajnost i operativnost, a ne samo dostupnost procesa.

Pretvorite lokalnu naredbu u servis koji se može nadzirati

Pokretanje nalik produkcijskom namjerno je dosadno: imenovano stanje, eksplicitan port i bez tajni unutar slike.

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

Primjer je početna osnova, a ne potpuni prateći stack. Prije izlaganja potvrdite lokalni zahtjev: zaseban room server i sloj pohrane za trajnu suradnju. Provjerite učinkovite mountove i listener, a zatim pokušajte nacrtati i izvesti dijagram, podijeliti poveznicu za suradnju putem konfiguriranog room servisa i ponovno povezati drugi preglednik. Zaključajte radnu sliku prije sljedećeg ponovnog pokretanja.

Sigurnosne odluke specifične za Excalidraw

Kod Excalidrawa rotacija računa nije zadatak hardeninga jer standardna slika nema spremište računa. Usredotočite se na pretpostavku da sama statička slika osigurava trajnu pohranu zajedničkih prostorija, zaštitite privatne prostorije za suradnju i nemojte tvrditi da je suradnja trajna kada je implementirana samo web-slika Excalidrawa.

Koristite HTTPS, neobaveznu autentikaciju platforme i provjereni digest slike. Nemojte mountati nepovezane podatke s hosta i ograničite opterećenje koje predstavlja isporuka statičkih resursa osnovne slike, dok WebSocket veze i stanje prostorija pripadaju zasebnom servisu za suradnju. Čisti vanjski klijent trebao bi vidjeti predviđenu verziju, dok neovlašteni klijent treba biti odbijen prije dolaska do containera kada je pristup ograničen.

Usmjerite Excalidraw bez lažnog prikaza HTTPS-a

Izdavanje TLS-a samo je polovica rute za Excalidraw. Poslužujte klijenta putem HTTPS-a i zasebno konfigurirajte krajnje točke za suradnju. Interno šaljite promet na port 80 i proslijedite vanjsku shemu kako bi generirani URL-ovi i sigurni kolačići ostali usklađeni.

Potpuni scenarij za Excalidraw provedite s čiste mreže, a ne samo učitavanjem korijenske stranice. Pogrešku 502 ili problem s certifikatom možete izolirati pomoću automatskog postavljanja domene i TLS-a. Ako promet dolazi do procesa, a sučelje se učitava, ali suradnja ne uspijeva jer je njegova WebSocket krajnja točka pogrešna, dijagnosticirajte uvjet ondje gdje se pojavljuje umjesto da slažete dodatna preusmjeravanja.

Nadogradite Excalidraw bez nagađanja

Korisni pokazatelj uspješnosti servisa Excalidraw jest uspješno dovršavanje radnje „nacrtajte i izvezite dijagram, podijelite poveznicu za suradnju putem konfiguriranog room servisa i ponovno povežite drugi preglednik“. Taj rezultat uparite s isporukom statičkih resursa osnovne slike, dok WebSocket veze i stanje prostorija pripadaju zasebnom servisu za suradnju; zelena korijenska stranica ne govori ništa o kompatibilnosti izlaza ni iscrpljivanju resursa.

Prije zamjene slike uzmite u obzir ovaj rizik: verzije frontenda, room servera i pohrane treba testirati zajedno, umjesto pretpostavke da statički klijent upravlja zajedničkim podacima. Reprezentativne unose i unose na granici testirajte u obje verzije, a stari digest zadržite dok kandidat ne prođe provjeru. Ako se sučelje učitava, ali suradnja ne uspijeva jer je njegova WebSocket krajnja točka pogrešna, pregledajte format zahtjeva, ponašanje klijenta i runtime zapisnike prije promjene postavki rute ili pohrane.

Koristite Dockup za platformni sloj

Predložak Excalidrawa za pokretanje jednim klikom trebao bi sadržavati digest slike, port 80, vremenska ograničenja health checka, domenu i TLS. Budući da je osnovni servis bez stanja, Dockup ga može izravno ponovno stvoriti na Dockup computeu ili priključenom računalu, bez pretvaranja praznog volumena u sigurnosnu kopiju.

Nakon pokretanja poslužujte klijenta putem HTTPS-a i zasebno konfigurirajte krajnje točke za suradnju. Dockup bi trebao sačuvati runtime postavke Excalidrawa, dok operator potvrđuje ovaj lokalni zahtjev: zaseban room server i sloj pohrane za trajnu suradnju. Provjerite ovaj ishod: nacrtajte i izvezite dijagram, podijelite poveznicu za suradnju putem konfiguriranog room servisa i ponovno povežite drugi preglednik. Svako kasnije proširenje sa stanjem mora deklarirati vlastiti mount, tajnu i test vraćanja, umjesto da neprimjetno mijenja značenje osnovnog predloška.

Često postavljana pitanja

Što je Excalidrawu potrebno za produkcijsku implementaciju?

Usmjerite Excalidraw container na portu 80 kroz jedno HTTPS izvorište. Lokalni runtime zahtijeva zaseban room server i sloj pohrane za trajnu suradnju. Nemojte Excalidraw smatrati spremnim dok ne možete nacrtati i izvesti dijagram, podijeliti poveznicu za suradnju putem konfiguriranog room servisa i ponovno povezati drugi preglednik.

Koji podaci Excalidrawa pripadaju sigurnosnoj kopiji?

Standardna slika Excalidrawa nema obavezan mount za aplikacijske podatke. Sačuvajte konfiguraciju implementacije i zasebno sigurnosno kopirajte svako povezano stanje; oporavak je uspješan kada se klijent ponovno izgradi iz svoje zaključane slike, a zasebni room servis vrati svako stanje suradnje koje obećava zadržati.

Zahtijeva li Excalidraw HTTPS iza reverse proxya?

Za javno izvorište Excalidrawa koristite HTTPS, a port 80 zadržite na internoj ruti. Ispravno primijenite postavku Excalidrawa: poslužujte klijenta putem HTTPS-a i zasebno konfigurirajte krajnje točke za suradnju. Za Excalidraw HTTPS štiti vjerodajnice ili korisnički sadržaj tijekom prijenosa i održava dosljedno ponašanje klijenta osjetljivo na izvorište.

Kako treba testirati nadogradnju Excalidrawa?

Implementirajte kandidata za Excalidraw uz trenutačnu verziju i ponovite transakciju prihvaćanja s poznatim unosom. Obratite posebnu pozornost jer verzije frontenda, room servera i pohrane treba testirati zajedno, umjesto pretpostavke da statički klijent upravlja zajedničkim podacima. Standardni container nema migraciju podataka, stoga zadržite prethodni digest dok provjere izlaza i kompatibilnosti ne budu uspješne.