Günlük diziniDockup / saha notu
Note / self-host-jupyterlab

2026'da JupyterLab Kendi Sunucunda Nasıl Barındırılır: Token'lar, Kernel'lar ve Kalıcı Notebook'lar

JupyterLab'ı doğru port, kalıcı depolama, TLS, kimlik doğrulama ve yedeklemelerle dağıtın. Production ortamında proxy, kernel'ların WebSocket bağlantılarını kestiğinde sorunu giderin.

En kısa JupyterLab demosu, bir process'in 8888 portunu dinlediğini kanıtlar. Production ortamı ise daha güçlü kanıtlar gerektirir. Container değiştirildikten sonra bile şu senaryoyu başarıyla tamamlamalıdır: token ile giriş yapma, kernel başlatma, bir notebook hücresi çalıştırma, çıktıyı kaydetme, WebSocket bağlantısını yeniden kurma ve notebook'u yeniden açma.

JupyterLab belirli bir amaçla dağıtılır: data ve compute kaynaklarının yanında browser tabanlı notebook'lar sunmak. En yaygın deployment tuzağı, proxy'nin kernel'ların WebSocket bağlantılarını kesmesi veya mount edilen notebook'ların root'a ait olmasıdır. Bu nedenle public URL yönetimi ve kalıcı state, image'ın başlatılması kadar dikkat gerektirir.

JupyterLab'ın değişiklikten sonra çalışmaya devam ettiğini kanıtlayın

Tüm kalıcı artifact'lerin envanterini çıkarın: notebook'lar, data, environment'lar ve yeniden üretilebilir dependency dosyaları. Bootstrap işleminden önce /home/jovyan/work yolunu mount edin, zararsız örnek data yazın ve bu yolun gerçekten kalıcı olduğunu kanıtlamak için container'ı değiştirin. Yalnızca en büyük dizini değil, saklanan data'nın nasıl yorumlandığını değiştiren configuration'ı da dahil edin.

Retention ayarlayın, backup'ları host dışına kopyalayın ve temiz bir ortamda restore işlemi gerçekleştirin. JupyterLab tatbikatı; notebook'lar, data ve environment specification'ları geri geldiğinde ve temsili bir hücre beklenen sonucu ürettiğinde tamamlanır. Snapshot'lar planın parçasıysa, her mekanizmanın neleri kurtarabileceğini belgelemek için PITR ve snapshot karşılaştırması rehberini kullanın.

Önce JupyterLab için başarı ölçütlerini tanımlayın

JupyterLab image'ının production mimarisini yanlışlıkla belirlemesine izin vermeyin. Image, 8888 üzerinde çalışan bir process sağlar; storage, routing ve harici gereksinimler yine bilinçli lifecycle'lar gerektirir. Local runtime gereksinimi, notebook workload'ları için boyutlandırılmış açık data mount'ları ve compute kaynaklarıdır. JupyterLab'ı host'lar arasında taşırken davranışın sessizce değişmemesi için lifecycle'ını açıkça yönetin.

Deployment; token ile giriş yapabildiğinde, kernel başlatabildiğinde, bir notebook hücresi çalıştırabildiğinde, çıktıyı kaydedebildiğinde, WebSocket bağlantısını yeniden kurabildiğinde ve notebook'u yeniden açabildiğinde daha kapsamlı testlere hazırdır. Log'larda transaction'ı izleyin; JupyterLab'ın web UI'ı yerine kernel RAM ve CPU kullanımını, data kopyalama işlemlerini, model training'i ve language-server process'lerini gözlemleyin. Bu gözlemler, mevcut topolojinin doğru component'i izole edip etmediğini ortaya çıkarır.

Container health kontrolünden daha güçlü beş kontrol

JupyterLab için release kaydı “iyi görünüyor” gibi ifadeler değil, somut bilgiler içermelidir. Seçilen image digest'ini, configuration checksum'ını, public hostname'i ve şu adımların timestamp içeren sonuçlarını kaydedin: token ile giriş yapma, kernel başlatma, bir notebook hücresi çalıştırma, çıktıyı kaydetme, WebSocket bağlantısını yeniden kurma ve notebook'u yeniden açma. Kontrolün her deployment sonrasında çalıştırılabilmesi için production dışı örnek data kullanın.

İki lifecycle olayını ayrı ayrı kanıtlayın. Container değişimi normal çalışmayı korumalıdır; temiz bir recovery ise notebook'ların, data'nın ve environment specification'larının geri geldiğini ve temsili bir hücrenin beklenen sonucu ürettiğini göstermelidir. Kontroller çalışırken JupyterLab'ın web UI'ı yerine kernel RAM ve CPU kullanımını, data kopyalama işlemlerini, model training'i ve language-server process'lerini ölçün; sonucu bu sürüm için beklenen envelope olarak saklayın.

Reddedilen veya geçersiz bir koşulu da test edin: şu sınırla ilişkili resource ya da format limitinin yakınında zararsız bir input gönderin: proxy kernel'ların WebSocket bağlantılarını kesiyor veya mount edilen notebook'lar root'a ait. JupyterLab anlaşılır biçimde fail etmeli ve sağlıklı state'in üzerine yazmamalıdır. Geçerli koşula dönün, örneği yeniden çalıştırın ve ilgili redacted log'ları ekleyin. Bu artifact'ler, gelecekteki rollback kararlarına somut kanıt sağlar.

JupyterLab'ı gözlemlenebilir varsayılanlarla başlatın

İlk container kolayca silinip yeniden oluşturulabilmelidir. Data'yı writable layer'ın dışında tutun, 8888 portunu yalnızca proxy'nin erişebileceği yerde bind edin ve configuration'ı runtime sırasında iletin.

docker run -d \
  --name jupyterlab \
  --restart unless-stopped \
  -p 127.0.0.1:8888:8888 \
  -v jupyterlab-data:/home/jovyan/work \
  -e JUPYTER_TOKEN=replace-with-a-long-random-value \
  quay.io/jupyter/minimal-notebook:latest

İlk testten sonra image'ı pin'leyin. Son restart mesajı yerine en erken startup error'ını okuyun, her mount'ı docker inspect ile doğrulayın ve token ile giriş yaparken, kernel başlatırken, notebook hücresi çalıştırırken, çıktıyı kaydederken, WebSocket bağlantısını yeniden kurarken ve notebook'u yeniden açarken log'ları takip edin. Bu sıra, hatalı bir image command'ını dependency veya permission probleminden ayırır.

JupyterLab'a tüm host'u vermeyin

İlk güvenilir administrator oluşturulduktan hemen sonra bootstrap penceresini kapatın. JupyterLab'ın somut tuzağı, internet'e açık bir notebook'ta token'ı devre dışı bırakmak veya geniş host path'lerini mount etmektir; daha güvenli sınır, token authentication'ı etkin tutmak, yalnızca amaçlanan data'yı mount etmek ve privileged bir host terminalini gelişigüzel açmamaktır.

JUPYTER_TOKEN'ı JupyterLab'daki rolüne uygun şekilde ele alın: hassas değerleri Git dışında tutun, rotation etkilerini belgeleyin ve production'da asla public bir örneği kullanmayın. Private networking, dependency credential'larını taşımalı; JupyterLab içindeki roller ise gerekli en küçük eylem iznini vermelidir. Hassas request body'lerini ve provider response'larını rutin log'ların dışında tutun.

JupyterLab'ı server dışından test edin

Kullanıcılar callback veya client ayarlarını kaydetmeden önce nihai JupyterLab hostname'ini seçin, ardından notebook server'ı WebSocket desteğiyle HTTPS üzerinden route edin. Platform route'u TLS'i bir kez terminate etmeli ve private 8888 portunu hedeflemelidir.

Acceptance transaction'ını dışarıdan çalıştırın. Client JupyterLab'a hiç ulaşamıyorsa DNS ve certificate kontrolleri için SSL validation checklist listesini kullanın. Request JupyterLab'a ulaşıyor ancak proxy kernel'ların WebSocket bağlantılarını kesiyor veya mount edilen notebook'lar root'a ait oluyorsa proxy redirect'lerini değiştirmeyi bırakın ve bunun yerine application-specific boundary'yi inceleyin.

Bir sonraki soruyu yanıtlayan log'lar

Her deployment sonrasında JupyterLab smoke test'i olarak token ile giriş yapma, kernel başlatma, bir notebook hücresi çalıştırma, çıktıyı kaydetme, WebSocket bağlantısını yeniden kurma ve notebook'u yeniden açma adımlarını kullanın. Bunu destekleyen metrikler, JupyterLab'ın web UI'ı değil; kernel RAM ve CPU kullanımı, data kopyalama işlemleri, model training ve language-server process'leridir. Alert'leri, bu kaynakların kullanıcı eylemini bozacak bir noktaya yaklaştığı yerde oluşturun.

Temel değişiklik riski, base-image package'larının, notebook extension'larının ve environment dosyalarının upgrade öncesinde reproducibility testi gerektirmesidir. Güvenli bir release, restore edilebilir bir snapshot ile başlar ve traffic yönlendirilmeden önce tek yönlü state değişikliklerini doğrular. Proxy kernel'ların WebSocket bağlantılarını kestiğinde veya mount edilen notebook'lar root'a ait olduğunda, configuration'ını ve ilk error'ını okuyabilmek için başarısız container'ı yeterince uzun süre koruyun.

Dockup deployment'ı yine de bir JupyterLab acceptance testi gerektirir

JupyterLab için platform katmanı 8888 portu, ingress, TLS, runtime configuration, storage ve dependency erişilebilirliğinden oluşur. Dockup bu parçaları kendi altyapısı veya müşterinin bağladığı bir server için yeniden oluşturabilir.

Ardından operator product katmanını tamamlar: notebook server'ı WebSocket desteğiyle HTTPS üzerinden route edin; şu access rule'u uygulayın — token authentication'ı etkin tutun, yalnızca amaçlanan data'yı mount edin ve privileged bir host terminalini gelişigüzel açmayın — ve “token ile giriş yapma, kernel başlatma, bir notebook hücresi çalıştırma, çıktıyı kaydetme, WebSocket bağlantısını yeniden kurma ve notebook'u yeniden açma” işlemlerini çalıştırın. Bu testi deployment'ın yanında kaydetmek, automated provisioning ile application readiness kavramlarının karıştırılmasını önler.

Sık sorulan sorular

Production deployment için JupyterLab'ın nelere ihtiyacı vardır?

JupyterLab container'ını tek bir HTTPS origin üzerinden 8888 portuna route edin. Local runtime gereksinimi, notebook workload'ları için boyutlandırılmış açık data mount'ları ve compute kaynaklarıdır. Token ile giriş yapana, kernel başlatana, bir notebook hücresi çalıştırana, çıktıyı kaydedene, WebSocket bağlantısını yeniden kurana ve notebook'u yeniden açana kadar JupyterLab'ı hazır kabul etmeyin.

Hangi JupyterLab data'sı backup'a dahil edilmelidir?

/home/jovyan/work yolunu kalıcı hale getirin ve notebook'ları, data'yı, environment'ları ve yeniden üretilebilir dependency dosyalarını aynı recovery manifest'ine dahil edin. Temiz bir JupyterLab restore işlemi yalnızca notebook'lar, data ve environment specification'ları geri geldiğinde ve temsili bir hücre beklenen sonucu ürettiğinde başarılı sayılır.

Reverse proxy arkasında JupyterLab için HTTPS gerekir mi?

Public JupyterLab origin'i için HTTPS kullanın ve 8888 portunu internal route üzerinde tutun. JupyterLab ayarını doğru uygulayın: notebook server'ı WebSocket desteğiyle HTTPS üzerinden route edin. JupyterLab için HTTPS, credential'ları veya kullanıcı içeriğini transit sırasında korur ve origin'e duyarlı client davranışının tutarlı kalmasını sağlar.

JupyterLab upgrade'i nasıl test edilmelidir?

Mevcut JupyterLab state'ini izole bir deployment'a restore edin, aday sürümü uygulayın ve acceptance transaction'ını tekrarlayın. Özellikle dikkatli olun; çünkü base-image package'ları, notebook extension'ları ve environment dosyaları upgrade öncesinde reproducibility testi gerektirir. Data migration ve rollback sınırı anlaşılana kadar önceki JupyterLab image'ını saklayın.