2026'da Excalidraw'ı Self-Host Etme: Collaboration, TLS ve Veri Sınırları
Docker, portlar, kalıcı veriler, TLS, güvenlik, yedekler ve production kullanımını engelleyen sorunları kapsayan pratik bir Excalidraw self-hosting rehberi. 2026.
Excalidraw'ı daha önce self-host etmeyi denediyseniz, muhtemelen şu can sıkıcı duruma aşinasınızdır: UI görünür, ancak WebSocket endpoint'i yanlış olduğu için collaboration çalışmaz. Container'ı yeniden oluşturmak, URL'ler, state ve dependency'ler arasındaki uyuşmazlığı nadiren çözer.
Bu walkthrough tek bir somut tamamlanma kriteri kullanır: bir diyagram çizin ve dışa aktarın, yapılandırılmış room service üzerinden bir collaboration link'i paylaşın ve ikinci bir browser ile yeniden bağlanın. Her yapılandırma seçimi, yeşil bir container badge'ine göre değil, bu kritere göre değerlendirilir.
Boş bir host'ta Excalidraw'ı geri yükleme
Temel Excalidraw deployment'ı için container katmanı disposable'dır ve data volume gerekmez. Recovery manifest'inde temel image'da server data bulunmaz; ayrı bir collaboration service'teki verileri yedekleyin. Image digest'ini, yapılandırmayı ve ayrıca yönetilen asset'leri change control altında tutun.
Service'i temiz bir ortamda silip yeniden oluşturun; ardından client'ın pinned image'dan yeniden build edildiğini ve ayrı room service'in korumayı taahhüt ettiği collaboration state'ini geri yüklediğini doğrulayın. Git repository'den production deployment'a rehberi burada kullanılacak modeldir: artifact'ı yeniden build edin ve yalnızca gerçekten mevcut olan external state'i yedekleyin.
Excalidraw'ın anlamlı veriler yazmadığı bir dizini persistent olarak etiketlemeyin. Boş veya kullanılmayan mount'lar yanlış bir güven duygusu oluşturur ve sonraki operatörlerin state'i yanlış yerde aramasına neden olur.
Docker'a dokunmadan önce Excalidraw'ı haritalandırma
Excalidraw HTTP process'i 80 portunu dinler; bu portu application network'te tutun ve yalnızca platform route'unu publish edin. Local runtime requirement, persistent collaboration için ayrı bir room server ve storage layer'dır. Excalidraw'ı host'lar arasında taşırken davranışın sessizce değişmemesi için lifecycle'ını açıkça yönetin.
Sınırı kısa bir contract olarak yazın: requirement'ın sahibi kim, hangi credential kullanılıyor, kabul edilebilir timeout nedir ve hata nasıl görünür? Ardından şu transaction'ı çalıştırın: bir diyagram çizin ve dışa aktarın, yapılandırılmış room service üzerinden bir collaboration link'i paylaşın ve ikinci bir browser ile yeniden bağlanın. Çalışma sırasında temel image için static asset delivery'yi; WebSocket bağlantıları ve room state'i ise ayrı collaboration service'e ait olacak şekilde gözlemleyin. Çünkü bu workload, idle bir container'dan daha faydalı bir başlangıç boyutu sağlar.
Excalidraw için production acceptance run
Excalidraw için bir release candidate, sabit bir senaryoyu tamamlayarak traffic almaya hak kazanır: bir diyagram çizin ve dışa aktarın, yapılandırılmış room service üzerinden bir collaboration link'i paylaşın ve ikinci bir browser ile yeniden bağlanın. Bu senaryo için image digest'ini, secret içermeyen effective configuration'ı, public origin'i ve timestamp'leri kaydedin. Test verileri disposable olmalı, ancak kullanıcıların izlediği path'i çalıştıracak kadar gerçekçi olmalıdır.
Runtime'ı değiştirdikten sonra bu testi çalıştırın; ardından temel image'da server data bulunmayan service'i yeniden build edin ve ayrı collaboration service'teki verileri yedekleyin. Recovery, client'ın pinned image'dan yeniden build edilmesi ve ayrı room service'in korumayı taahhüt ettiği collaboration state'ini geri yüklemesiyle başarılı olur. Temel image için static asset delivery'yi; WebSocket bağlantıları ve room state'i ise ayrı collaboration service'e ait olacak şekilde resource ölçümlerini önceki release ile karşılaştırın ve promotion öncesinde anlamlı sapmaları araştırın.
Son olarak şu kontrollü hatayı test edin: bu sınırla ilişkili resource veya format limitinin yakınında zararsız bir input gönderin: UI yüklenir, ancak WebSocket endpoint'i yanlış olduğu için collaboration çalışmaz. Excalidraw'ın hatayı açıkladığını, mevcut state'e zarar vermediğini ve geçerli koşul geri döndüğünde devam ettiğini doğrulayın. Redact edilmiş bir log alıntısını ve recovery süresini kaydedin. Bu kontroller birlikte yalnızca process uptime'ını değil; davranışı, durability'yi ve operability'yi de kapsar.
Local command'ı inspect edilebilir bir service'e dönüştürme
Production'a uygun bir launch bilerek sıkıcıdır: named state, açıkça belirtilmiş port ve image içinde secret bulunmaması.
docker run -d \
--name excalidraw \
--restart unless-stopped \
-p 127.0.0.1:80:80 \
excalidraw/excalidraw:latest
Bu örnek, eksiksiz bir supporting stack'ten ziyade baseline'dır. Dış erişime açmadan önce local requirement'ı doğrulayın: persistent collaboration için ayrı bir room server ve storage layer. Effective mount'ları ve listener'ı kontrol edin; ardından bir diyagram çizmeyi ve dışa aktarmayı, yapılandırılmış room service üzerinden bir collaboration link'i paylaşmayı ve ikinci bir browser ile yeniden bağlanmayı deneyin. Bir sonraki restart'tan önce çalışan image'ı pinleyin.
Excalidraw'a özgü security kararları
Excalidraw'da account rotation bir hardening görevi değildir; çünkü standard image'da account store bulunmaz. Static image'ın tek başına kalıcı shared-room storage sağladığını varsaymamaya odaklanın; private collaboration room'ları koruyun ve yalnızca Excalidraw web image'ı deploy edilmişken kalıcı collaboration olduğunu iddia etmeyin.
HTTPS, isteğe bağlı platform authentication ve gözden geçirilmiş bir image digest kullanın. İlişkisiz host verilerini mount etmeyin ve temel image için static asset delivery'yi; WebSocket bağlantıları ve room state'i ise ayrı collaboration service'e ait olan workload'u sınırlandırın. Temiz bir external client beklenen build'i görmeli; yetkisiz bir client ise erişim kısıtlıysa container'a ulaşmadan önce reddedilmelidir.
HTTPS hakkında yanıltmadan Excalidraw'ı route etme
TLS issuance, Excalidraw route'unun yalnızca yarısıdır. Client'ı HTTPS üzerinden sunun ve collaboration endpoint'lerini ayrı yapılandırın. Traffic'i dahili olarak 80 portuna gönderin ve generated URL'lerin ve secure cookie'lerin tutarlı kalması için external scheme'i forward edin.
Temiz bir network'ten eksiksiz Excalidraw senaryosunu çalıştırın; yalnızca root page'i kontrol etmekle yetinmeyin. Bir 502 veya certificate failure, automatic domain and TLS setup ile izole edilebilir. Traffic process'e ulaşıyor ve UI yükleniyor, ancak WebSocket endpoint'i yanlış olduğu için collaboration çalışmıyorsa, redirect'leri üst üste eklemek yerine bu durumu oluştuğu noktada teşhis edin.
Tahmin yürütmeden Excalidraw'ı upgrade etme
Excalidraw için faydalı service göstergesi, “bir diyagram çizin ve dışa aktarın, yapılandırılmış room service üzerinden bir collaboration link'i paylaşın ve ikinci bir browser ile yeniden bağlanın” işleminin başarıyla tamamlanmasıdır. Bu sonucu, temel image için static asset delivery'yle; WebSocket bağlantıları ve room state'i ise ayrı collaboration service'e ait olacak şekilde birlikte değerlendirin. Yeşil bir root page, output compatibility veya resource exhaustion hakkında hiçbir şey söylemez.
Image'ı değiştirmeden önce şu riski hesaba katın: frontend, room-server ve storage version'ları, static client'ın shared data'nın sahibi olduğunu varsaymak yerine birlikte test edilmelidir. Temsili ve sınır input'larını her iki version'a karşı test edin ve candidate başarılı olana kadar eski digest'i saklayın. UI yükleniyor, ancak WebSocket endpoint'i yanlış olduğu için collaboration çalışmıyorsa route veya storage ayarlarını değiştirmeden önce request format'ını, client davranışını ve runtime log'larını inceleyin.
Platform katmanı için Dockup kullanma
Tek tıklamayla çalışan bir Excalidraw template'i image digest'ini, 80 portunu, health timing'i, domain'i ve TLS'i kodlamalıdır. Temel service stateless olduğu için Dockup, boş bir volume'u backup gibi göstermeden service'i doğrudan Dockup compute üzerinde veya bağlı bir machine'de yeniden oluşturabilir.
Launch sonrasında client'ı HTTPS üzerinden sunun ve collaboration endpoint'lerini ayrı yapılandırın. Dockup, Excalidraw runtime ayarlarını korurken operatör şu local requirement'ı doğrulamalıdır: persistent collaboration için ayrı bir room server ve storage layer. Şu sonucu doğrulayın: bir diyagram çizin ve dışa aktarın, yapılandırılmış room service üzerinden bir collaboration link'i paylaşın ve ikinci bir browser ile yeniden bağlanın. Daha sonra eklenen her stateful extension, temel template'in anlamını sessizce değiştirmek yerine kendi mount'unu, secret'ını ve restore test'ini tanımlamalıdır.
Sık sorulan sorular
Excalidraw'ın production deployment'ı için ne gerekir?
Excalidraw container'ını tek bir HTTPS origin üzerinden 80 portuna route edin. Local runtime requirement, persistent collaboration için ayrı bir room server ve storage layer'dır. Bir diyagram çizip dışa aktaramıyor, yapılandırılmış room service üzerinden collaboration link'i paylaşamıyor ve ikinci bir browser ile yeniden bağlanamıyorsanız Excalidraw'ı hazır kabul etmeyin.
Hangi Excalidraw verileri backup'a dahil edilmelidir?
Standard Excalidraw image'ı zorunlu bir application-data mount'una sahip değildir. Deployment configuration'ını koruyun ve bağlı state'i ayrı olarak yedekleyin; recovery, client'ın pinned image'dan yeniden build edilmesi ve ayrı room service'in korumayı taahhüt ettiği collaboration state'ini geri yüklemesiyle başarılı olur.
Excalidraw reverse proxy arkasında HTTPS gerektirir mi?
Public Excalidraw origin'i için HTTPS kullanın ve 80 portunu internal route'ta tutun. Excalidraw ayarını doğru uygulayın: client'ı HTTPS üzerinden sunun ve collaboration endpoint'lerini ayrı yapılandırın. Excalidraw için HTTPS, credentials veya user content'in transit sırasında korunmasını ve origin'e duyarlı client davranışının tutarlı kalmasını sağlar.
Excalidraw upgrade'i nasıl test edilmelidir?
Candidate Excalidraw image'ını mevcut image'ın yanında deploy edin ve acceptance transaction'ı bilinen input'larla tekrarlayın. Özellikle dikkatli olun; frontend, room-server ve storage version'ları, static client'ın shared data'nın sahibi olduğunu varsaymak yerine birlikte test edilmelidir. Standard container'da data migration bulunmaz; bu nedenle output ve compatibility kontrolleri başarılı olana kadar önceki digest'i saklayın.
