Indexul jurnaluluiDockup / notă de teren
Note / self-host-excalidraw

Cum să găzduiești Excalidraw pe propriul server în 2026: colaborare, TLS și limitele datelor

Un ghid practic pentru găzduirea Excalidraw pe propriul server, care acoperă Docker, porturi, date persistente, TLS, securitate, backupuri și problemele care împiedică utilizarea în producție. În 2026.

Dacă ai încercat deja să găzduiești Excalidraw pe propriul server, probabil cunoști această situație frustrantă: interfața apare, dar se încarcă fără ca funcția de colaborare să meargă, deoarece endpointul WebSocket este configurat greșit. Recrearea containerului rezolvă rareori o neconcordanță între URL-uri, stare și dependențe.

Acest ghid folosește un singur criteriu concret de finalizare — desenează și exportă o diagramă, partajează un link de colaborare prin room service-ul configurat și reconectează un al doilea browser. Fiecare alegere de configurare este evaluată în funcție de acest criteriu, nu în funcție de o insignă verde a containerului.

Restaurează Excalidraw pe un host gol

Pentru deploymentul de bază al Excalidraw, nivelul containerului este dispensabil și nu este necesar niciun data volume. Manifestul de recuperare nu conține date de server în imaginea de bază; creează backup pentru orice serviciu separat de colaborare. Păstrează digestul imaginii, configurația și orice asset-uri întreținute separat sub controlul schimbărilor.

Șterge și recreează serviciul într-un mediu curat, apoi demonstrează că clientul este reconstruit folosind imaginea fixată și că room service-ul separat restaurează orice stare de colaborare pe care promite să o păstreze. Ghidul de la repository Git la deployment în producție este modelul relevant aici: reconstruiește artifactul și creează backup doar pentru starea externă care există efectiv.

Nu eticheta un director ca persistent decât dacă Excalidraw scrie date relevante în acel loc. Mount-urile goale sau neutilizate creează o falsă senzație de siguranță și îi fac pe operatorii ulteriori să caute starea în locul greșit.

Cartografiază Excalidraw înainte să atingi Docker

Procesul HTTP al Excalidraw ascultă pe portul 80; păstrează acest port în application network și publică doar ruta platformei. Cerința locală de runtime este un room server separat și un storage layer pentru colaborare persistentă. Păstrează explicit ciclul său de viață, astfel încât mutarea Excalidraw între hosturi să nu schimbe comportamentul în mod neașteptat.

Notează limita într-un contract scurt: cine deține cerința, ce credential este folosit, ce timeout este acceptabil și cum este afișată eroarea. Apoi execută această tranzacție: desenează și exportă o diagramă, partajează un link de colaborare prin room service-ul configurat și reconectează un al doilea browser. Observă livrarea asset-urilor statice pentru imaginea de bază, iar conexiunile WebSocket și starea camerelor să aparțină serviciului separat de colaborare în timpul rulării, deoarece acest workload oferă o dimensiune inițială mai utilă decât un container inactiv.

Un test de acceptanță pentru Excalidraw în producție

Un release candidate pentru Excalidraw primește trafic după ce finalizează un scenariu fix: desenează și exportă o diagramă, partajează un link de colaborare prin room service-ul configurat și reconectează un al doilea browser. Capturează digestul imaginii, configurația efectivă care nu conține secrete, originea publică și timestamp-urile pentru scenariul respectiv. Datele de test ar trebui să fie dispensabile, dar suficient de realiste pentru a exercita același traseu ca utilizatorii.

Rulează testul după înlocuirea runtime-ului, apoi reconstruiește serviciul fără date de server în imaginea de bază; creează backup pentru orice serviciu separat de colaborare. Recuperarea este validată când clientul este reconstruit folosind imaginea fixată, iar room service-ul separat restaurează orice stare de colaborare pe care promite să o păstreze. Compară măsurătorile de resurse pentru livrarea asset-urilor statice pentru imaginea de bază, cu conexiunile WebSocket și starea camerelor aparținând serviciului separat de colaborare, cu release-ul anterior și investighează orice variație relevantă înainte de promovare.

În cele din urmă, execută acest failure controlat: trimite date inofensive în apropierea limitei de resurse sau de format asociate acestei limite: interfața se încarcă, dar colaborarea eșuează deoarece endpointul WebSocket este configurat greșit. Verifică dacă Excalidraw explică eroarea, nu deteriorează starea existentă și își reia funcționarea după revenirea condiției valide. Salvează un fragment de log redactat și timpul de recuperare. Împreună, aceste verificări acoperă comportamentul, durabilitatea și operabilitatea, nu doar uptime-ul procesului.

Transformă comanda locală într-un serviciu ușor de inspectat

O pornire conformă cu producția este intenționat lipsită de surprize: stare denumită, port explicit și niciun secret în imagine.

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

Exemplul este un punct de pornire, nu un supporting stack complet. Confirmă cerința locală înainte de expunere: un room server separat și un storage layer pentru colaborare persistentă. Verifică mount-urile și listenerul efective, apoi încearcă să desenezi și să exporți o diagramă, să partajezi un link de colaborare prin room service-ul configurat și să reconectezi un al doilea browser. Fixează imaginea funcțională înainte de următorul restart.

Decizii de securitate specifice pentru Excalidraw

În cazul Excalidraw, rotirea conturilor nu este sarcina de hardening, deoarece imaginea standard nu are un account store. Concentrează-te pe presupunerea că imaginea statică, de una singură, oferă storage persistent pentru camerele partajate și protejează camerele private de colaborare; nu declara că există colaborare persistentă atunci când este deployată doar imaginea web Excalidraw.

Folosește HTTPS, autentificare opțională la nivelul platformei și un digest de imagine verificat. Nu monta date de pe host care nu au legătură cu serviciul și limitează workload-ul reprezentat de livrarea asset-urilor statice pentru imaginea de bază, cu conexiunile WebSocket și starea camerelor aparținând serviciului separat de colaborare. Un client extern curat ar trebui să vadă buildul dorit, iar un client neautorizat ar trebui respins înainte de a ajunge la container atunci când accesul este restricționat.

Rutează Excalidraw fără să induci în eroare în privința HTTPS

Emiterea certificatelor TLS este doar jumătate din ruta Excalidraw. Servește clientul prin HTTPS și configurează separat endpointurile de colaborare. Trimite traficul intern către portul 80 și transmite schema externă, astfel încât URL-urile generate și cookie-urile secure să rămână consecvente.

Folosește scenariul complet pentru Excalidraw dintr-o rețea curată, nu doar pagina root. O eroare 502 sau o problemă de certificat poate fi izolată cu configurarea automată a domeniului și TLS. Dacă traficul ajunge la proces, iar interfața se încarcă, dar colaborarea eșuează deoarece endpointul WebSocket este configurat greșit, diagnostichează problema acolo unde apare, în loc să adaugi redirecturi succesive.

Actualizează Excalidraw fără presupuneri

Indicatorul util pentru serviciul Excalidraw este finalizarea cu succes a acțiunii „desenează și exportă o diagramă, partajează un link de colaborare prin room service-ul configurat și reconectează un al doilea browser”. Corelează acest rezultat cu livrarea asset-urilor statice pentru imaginea de bază, cu conexiunile WebSocket și starea camerelor aparținând serviciului separat de colaborare; o pagină root verde nu spune nimic despre compatibilitatea outputului sau epuizarea resurselor.

Înainte de a înlocui imaginea, ține cont de acest risc: versiunile frontendului, room serverului și storage-ului ar trebui testate împreună, în loc să presupui că clientul static deține datele partajate. Testează date reprezentative și date aflate la limită în ambele versiuni și păstrează digestul vechi până când candidatul trece testele. Dacă interfața se încarcă, dar colaborarea eșuează deoarece endpointul WebSocket este configurat greșit, inspectează formatul requestului, comportamentul clientului și logurile runtime înainte de a modifica setările de rutare sau storage.

Folosește Dockup pentru nivelul platformei

Un template Excalidraw one-click ar trebui să includă digestul imaginii, portul 80, timpii de health check, domeniul și TLS. Deoarece serviciul de bază este stateless, Dockup îl poate recrea direct pe compute-ul Dockup sau pe o mașină atașată, fără să pretindă că un volum gol este un backup.

După lansare, servește clientul prin HTTPS și configurează separat endpointurile de colaborare. Dockup ar trebui să păstreze setările runtime ale Excalidraw, în timp ce operatorul confirmă această cerință locală: un room server separat și un storage layer pentru colaborare persistentă. Verifică următorul rezultat: desenează și exportă o diagramă, partajează un link de colaborare prin room service-ul configurat și reconectează un al doilea browser. Orice extensie ulterioară cu stare persistentă trebuie să își declare propriul mount, secret și test de restaurare, fără să schimbe în mod implicit sensul template-ului de bază.

Întrebări frecvente

De ce are nevoie Excalidraw pentru un deployment în producție?

Rutează containerul Excalidraw pe portul 80 printr-o singură origine HTTPS. Cerința locală de runtime este un room server separat și un storage layer pentru colaborare persistentă. Nu considera Excalidraw pregătit până când nu poți să desenezi și să exporți o diagramă, să partajezi un link de colaborare prin room service-ul configurat și să reconectezi un al doilea browser.

Ce date Excalidraw trebuie incluse într-un backup?

Imaginea standard Excalidraw nu are un mount obligatoriu pentru datele aplicației. Păstrează configurația de deployment și creează backup separat pentru orice stare conectată; recuperarea este validată când clientul este reconstruit folosind imaginea fixată, iar room service-ul separat restaurează orice stare de colaborare pe care promite să o păstreze.

Are Excalidraw nevoie de HTTPS în spatele unui reverse proxy?

Folosește HTTPS pentru originea publică Excalidraw și păstrează portul 80 pe ruta internă. Aplică corect setarea Excalidraw: servește clientul prin HTTPS și configurează separat endpointurile de colaborare. Pentru Excalidraw, HTTPS protejează credentialele sau conținutul utilizatorilor în tranzit și menține consecvent comportamentul clientului dependent de origine.

Cum ar trebui testat un upgrade Excalidraw?

Deployează imaginea Excalidraw candidat alături de cea curentă și repetă tranzacția de acceptanță folosind date de intrare cunoscute. Acordă o atenție deosebită acestui aspect, deoarece versiunile frontendului, room serverului și storage-ului ar trebui testate împreună, în loc să presupui că clientul static deține datele partajate. Containerul standard nu are migrare de date, așa că păstrează digestul anterior până când verificările de output și compatibilitate trec cu succes.