Indeks dziennikaDockup / notatka terenowa
Note / self-host-excalidraw

Jak hostować Excalidraw samodzielnie w 2026 roku: współpraca, TLS i granice danych

Praktyczny przewodnik po samodzielnym hostowaniu Excalidraw, obejmujący Docker, porty, dane trwałe, TLS, bezpieczeństwo, kopie zapasowe oraz problemy blokujące użycie produkcyjne. Stan na 2026 rok.

Jeśli próbowałeś już hostować Excalidraw samodzielnie, prawdopodobnie znasz ten frustrujący scenariusz: interfejs się wyświetla, ale współpraca nie działa, ponieważ endpoint WebSocket jest nieprawidłowy. Ponowne utworzenie kontenera rzadko naprawia niespójność między adresami URL, stanem i zależnościami.

W tym poradniku przyjmujemy jedno konkretne kryterium ukończenia — narysowanie i wyeksportowanie diagramu, udostępnienie linku do współpracy za pośrednictwem skonfigurowanej usługi pokoi oraz ponowne połączenie drugiej przeglądarki. Każda decyzja konfiguracyjna jest oceniana względem tego kryterium, a nie na podstawie zielonej plakietki kontenera.

Odtwarzanie Excalidraw na pustym hoście

W podstawowym wdrożeniu Excalidraw warstwa kontenera jest nietrwała i nie wymaga wolumenu danych. Manifest odtwarzania zakłada brak danych serwera w podstawowym obrazie; wykonuj kopie zapasowe każdej oddzielnej usługi współpracy. Obraz, konfigurację i wszelkie osobno utrzymywane zasoby obejmij kontrolą zmian.

Usuń usługę i utwórz ją ponownie w czystym środowisku, a następnie sprawdź, czy klient jest odbudowywany z przypiętego obrazu oraz czy oddzielna usługa pokoi odtwarza każdy stan współpracy, który ma przechowywać. Odpowiednim wzorcem jest przewodnik od repozytorium Git do produkcji: odbuduj artefakt i wykonuj kopie zapasowe wyłącznie zewnętrznego stanu, który rzeczywiście istnieje.

Nie określaj katalogu jako trwałego, dopóki Excalidraw nie zapisuje w nim istotnych danych. Puste lub nieużywane mounty tworzą fałszywe poczucie bezpieczeństwa i sprawiają, że kolejni operatorzy szukają stanu w niewłaściwym miejscu.

Zmapuj Excalidraw przed uruchomieniem Dockera

Proces HTTP Excalidraw nasłuchuje na porcie 80; pozostaw ten port w sieci aplikacji i publikuj wyłącznie trasę platformy. Lokalne wymaganie środowiska uruchomieniowego to oddzielny serwer pokoi i warstwa przechowywania danych na potrzeby trwałej współpracy. Cykl życia tych elementów powinien być jawny, aby przeniesienie Excalidraw między hostami nie zmieniało po cichu jego działania.

Zapisz granicę odpowiedzialności w formie krótkiego kontraktu: kto odpowiada za dane wymaganie, które poświadczenie jest używane, jaki timeout jest akceptowalny i jak objawia się awaria. Następnie wykonaj tę transakcję: narysuj i wyeksportuj diagram, udostępnij link do współpracy za pośrednictwem skonfigurowanej usługi pokoi oraz ponownie połącz drugą przeglądarkę. Podczas testu obserwuj dostarczanie zasobów statycznych podstawowego obrazu, przy czym połączenia WebSocket i stan pokoi powinny należeć do oddzielnej usługi współpracy, ponieważ taki przebieg daje bardziej użyteczny punkt wyjścia do określenia rozmiaru zasobów niż bezczynny kontener.

Produkcyjny test akceptacyjny Excalidraw

Kandydat do wydania Excalidraw zasługuje na obsługę ruchu dopiero po pomyślnym przejściu ustalonego scenariusza: narysowaniu i wyeksportowaniu diagramu, udostępnieniu linku do współpracy za pośrednictwem skonfigurowanej usługi pokoi oraz ponownym połączeniu drugiej przeglądarki. Zapisz digest obrazu, efektywną konfigurację niezawierającą sekretów, publiczne źródło oraz znaczniki czasu dla tego scenariusza. Dane testowe powinny być nietrwałe, ale wystarczająco realistyczne, by przećwiczyć tę samą ścieżkę, z której korzystają użytkownicy.

Uruchom test po wymianie środowiska uruchomieniowego, a następnie odbuduj usługę bez danych serwera w podstawowym obrazie; wykonuj kopie zapasowe każdej oddzielnej usługi współpracy. Odtwarzanie kończy się powodzeniem, gdy klient jest odbudowywany z przypiętego obrazu, a oddzielna usługa pokoi odtwarza każdy stan współpracy, który ma przechowywać. Porównaj pomiary zasobów dla dostarczania zasobów statycznych podstawowego obrazu, przy czym połączenia WebSocket i stan pokoi powinny należeć do oddzielnej usługi współpracy, z poprzednim wydaniem i zbadaj istotne odchylenia przed wdrożeniem.

Na koniec przeprowadź kontrolowaną awarię: wyślij nieszkodliwe dane wejściowe w pobliżu limitu zasobów lub formatu powiązanego z tą granicą: interfejs się ładuje, ale współpraca nie działa, ponieważ endpoint WebSocket jest nieprawidłowy. Sprawdź, czy Excalidraw wyjaśnia przyczynę awarii, nie uszkadza istniejącego stanu i wznawia działanie po przywróceniu prawidłowych warunków. Zapisz zredagowany fragment logu oraz czas odtworzenia działania. Łącznie testy te obejmują zachowanie, trwałość i obsługiwalność, a nie tylko działanie procesu.

Przekształć lokalne polecenie w usługę możliwą do sprawdzenia

Uruchomienie przypominające środowisko produkcyjne powinno być celowo nudne: nazwany stan, jawny port i żadnych sekretów w obrazie.

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

Przykład stanowi punkt wyjścia, a nie kompletny stos pomocniczy. Przed udostępnieniem usługi potwierdź lokalne wymaganie: oddzielny serwer pokoi i warstwę przechowywania danych na potrzeby trwałej współpracy. Sprawdź efektywne mounty i listener, a następnie spróbuj narysować i wyeksportować diagram, udostępnić link do współpracy za pośrednictwem skonfigurowanej usługi pokoi oraz ponownie połączyć drugą przeglądarkę. Przed kolejnym restartem przypnij działający obraz.

Decyzje dotyczące bezpieczeństwa właściwe dla Excalidraw

W przypadku Excalidraw rotacja kont nie jest zadaniem związanym z hardeningiem, ponieważ standardowy obraz nie ma magazynu kont. Skup się na założeniu, że sam statyczny obraz zapewnia trwałe przechowywanie współdzielonych pokoi, i chroń prywatne pokoje współpracy. Nie deklaruj trwałej współpracy, jeśli wdrożony jest wyłącznie webowy obraz Excalidraw.

Używaj HTTPS, opcjonalnego uwierzytelniania platformy i zweryfikowanego digestu obrazu. Nie montuj niezwiązanych danych hosta i ogranicz zasoby obciążenia reprezentowanego przez dostarczanie zasobów statycznych podstawowego obrazu, przy czym połączenia WebSocket i stan pokoi powinny należeć do oddzielnej usługi współpracy. Czysty klient zewnętrzny powinien otrzymać zamierzoną wersję, a nieautoryzowany klient powinien zostać odrzucony przed dotarciem do kontenera, jeśli dostęp jest ograniczony.

Skonfiguruj trasowanie Excalidraw bez udawania HTTPS

Wystawienie certyfikatu TLS to tylko połowa konfiguracji trasy Excalidraw. Udostępniaj klienta przez HTTPS i konfiguruj endpointy współpracy oddzielnie. Kieruj ruch wewnętrznie na port 80 i przekazuj zewnętrzny schemat, aby generowane adresy URL oraz bezpieczne cookies pozostały spójne.

Uruchom kompletny scenariusz Excalidraw z czystej sieci, a nie tylko stronę główną. Błąd 502 lub problem z certyfikatem można odizolować za pomocą automatycznej konfiguracji domeny i TLS. Jeśli ruch dociera do procesu, interfejs się ładuje, ale współpraca nie działa, ponieważ endpoint WebSocket jest nieprawidłowy, diagnozuj ten problem w miejscu jego wystąpienia, zamiast dokładać kolejne przekierowania.

Aktualizuj Excalidraw bez zgadywania

Przydatnym wskaźnikiem działania usługi Excalidraw jest pomyślne wykonanie scenariusza „narysuj i wyeksportuj diagram, udostępnij link do współpracy za pośrednictwem skonfigurowanej usługi pokoi oraz ponownie połącz drugą przeglądarkę”. Połącz ten wynik z dostarczaniem zasobów statycznych podstawowego obrazu, przy czym połączenia WebSocket i stan pokoi powinny należeć do oddzielnej usługi współpracy; zielona strona główna nie mówi nic o zgodności danych wyjściowych ani wyczerpaniu zasobów.

Przed wymianą obrazu uwzględnij to ryzyko: wersje frontendu, serwera pokoi i warstwy przechowywania danych należy testować razem, zamiast zakładać, że współdzielone dane należą do statycznego klienta. Sprawdź reprezentatywne dane wejściowe oraz wartości graniczne w obu wersjach i zachowaj stary digest do momentu przejścia testów przez kandydata. Jeśli interfejs się ładuje, ale współpraca nie działa, ponieważ endpoint WebSocket jest nieprawidłowy, przed zmianą ustawień trasy lub przechowywania danych sprawdź format żądania, zachowanie klienta i logi środowiska uruchomieniowego.

Użyj Dockup jako warstwy platformy

Szablon Excalidraw uruchamiany jednym kliknięciem powinien definiować digest obrazu, port 80, czasy sprawdzania kondycji, domenę i TLS. Ponieważ usługa bazowa jest bezstanowa, Dockup może odtworzyć ją bezpośrednio na infrastrukturze Dockup lub dołączonej maszynie, nie udając, że pusty wolumen jest kopią zapasową.

Po uruchomieniu udostępniaj klienta przez HTTPS i konfiguruj endpointy współpracy oddzielnie. Dockup powinien zachować ustawienia środowiska uruchomieniowego Excalidraw, a operator powinien potwierdzić lokalne wymaganie: oddzielny serwer pokoi i warstwę przechowywania danych na potrzeby trwałej współpracy. Zweryfikuj ten rezultat: narysuj i wyeksportuj diagram, udostępnij link do współpracy za pośrednictwem skonfigurowanej usługi pokoi oraz ponownie połącz drugą przeglądarkę. Każde późniejsze rozszerzenie stanowe musi jawnie określać własny mount, sekret i test odtwarzania, zamiast po cichu zmieniać znaczenie podstawowego szablonu.

Często zadawane pytania

Czego Excalidraw potrzebuje do wdrożenia produkcyjnego?

Skieruj kontener Excalidraw na porcie 80 przez jedno źródło HTTPS. Lokalne wymaganie środowiska uruchomieniowego to oddzielny serwer pokoi i warstwa przechowywania danych na potrzeby trwałej współpracy. Nie uznawaj Excalidraw za gotowy, dopóki nie możesz narysować i wyeksportować diagramu, udostępnić linku do współpracy za pośrednictwem skonfigurowanej usługi pokoi oraz ponownie połączyć drugiej przeglądarki.

Które dane Excalidraw powinny znaleźć się w kopii zapasowej?

Standardowy obraz Excalidraw nie wymaga mountu z danymi aplikacji. Zachowaj konfigurację wdrożenia i wykonuj kopie zapasowe każdego podłączonego stanu osobno; odtwarzanie kończy się powodzeniem, gdy klient jest odbudowywany z przypiętego obrazu, a oddzielna usługa pokoi odtwarza każdy stan współpracy, który ma przechowywać.

Czy Excalidraw wymaga HTTPS za reverse proxy?

Używaj HTTPS dla publicznego źródła Excalidraw i pozostaw port 80 na trasie wewnętrznej. Zastosuj prawidłowo ustawienie Excalidraw: udostępniaj klienta przez HTTPS i konfiguruj endpointy współpracy oddzielnie. W przypadku Excalidraw HTTPS chroni poświadczenia lub treści użytkowników podczas przesyłania i zapewnia spójność zachowania klienta zależnego od źródła.

Jak testować aktualizację Excalidraw?

Wdróż kandydata na obraz Excalidraw obok bieżącej wersji i powtórz transakcję akceptacyjną ze znanymi danymi wejściowymi. Zwróć szczególną uwagę na to, że wersje frontendu, serwera pokoi i warstwy przechowywania danych należy testować razem, zamiast zakładać, że współdzielone dane należą do statycznego klienta. Standardowy kontener nie ma migracji danych, dlatego zachowaj poprzedni digest do czasu pomyślnego przejścia testów danych wyjściowych i zgodności.