dsh web http://127.0.0.1:3080 hatası ve çözümü
dsh web arayüzü varsayılan olarak localhost üzerinde çalışır. Uzak sunucuda 3080 portuna erişmek için SSH tüneli kurmanız gerekir. Güvenlik riski nedeniyle portu dış dünyaya açmayın.
dsh web: http://127.0.0.1:3080 ne anlama gelir
DeepSeek Harness web profilini bir VPS üzerinde başlattığınızda, iki satır çıktı verir ve beklemeye geçer:
dsh web: http://127.0.0.1:3080
Ready.127.0.0.1, loopback adresidir. Bir makinenin kendi kendisiyle iletişim kurmak için kullandığı adrestir. 127.0.0.1 adresine bağlı bir soket, yalnızca aynı makine üzerindeki süreçlerden gelen bağlantıları kabul eder, başka hiçbir yerden bağlantı almaz. Dolayısıyla bu satır size aynı anda iki şey söyler: Web arayüzünün nerede dinleme yaptığı ve ona kimlerin erişebileceği. Yalnızca dsh üzerinde çalışan makine.
URL'yi dizüstü bilgisayarınızdaki tarayıcıya yapıştırdığınızda hiçbir şey olmamasının nedeni budur. Dizüstü bilgisayarınızın 127.0.0.1 adresi, dizüstü bilgisayarınızın kendisidir. Harness ise VPS'in 127.0.0.1 adresinde dinleme yapmaktadır; bu, farklı bir loopback yığınına sahip farklı bir makinedir. Hiçbir şey bozuk değildir. Bağlantıyı taşımanız gerekir.
Resmi README dosyası varsayılan durumu açıkça belirtir: "Komut, varsayılan olarak http://127.0.0.1:3080 adresinde sunulan Web arayüzünü başlatır." Bağlama adresi, host anahtarı "Dinleme ana bilgisayarı; desteklenen iki değer loopback ve all-interfaces şeklindedir" şeklinde belgelenen web sunucusu ana bilgisayar eklentisi @deepseek-ai/dsh-host-webserver'dan gelir. Siz gidip değiştirmediğiniz sürece elde edeceğiniz değer loopback'tir. Portlar sizin için yeniyse, Linux'ta portlar nasıl çalışır başlıklı bölüm, tüm bu yapının dayandığı adres artı port modelini açıklar.
Web arayüzünün neden yalnızca localhost üzerinde dinleme yaptığı
dsh bir aracı (agent) donanımıdır. Tarayıcı sekmesi; kabuk komutlarını çalıştıran, seçtiğiniz çalışma dizinindeki dosyaları okuyup yazan ve model API anahtarınızı harcayan bir sürecin kontrol yüzeyidir. Bu sayfayı yükleyebilen herkes, dsh uygulamasını çalıştıran kullanıcı yetkileriyle tüm bu işlemleri gerçekleştirebilir.
Dolayısıyla 3080 numaralı port, salt okunur bir kontrol paneli değildir. Bu sayfayı yüklemek, sunucu üzerinde komut yürütme yetkisi verir.
Web arayüzünü açtığınızda doğrudan oturum listesine yönlendirilirsiniz. Herhangi bir giriş ekranı yoktur; çünkü geliştirici önizleme sürümü kullanıcı hesapları veya uzak kimlik doğrulama mekanizmaları içermez. Loopback üzerinde bu durum tutarlıdır: işletim sistemi erişim kontrolünü sağlar ve yalnızca yerel süreçlerin bağlantı kurmasına izin verir. Aynı sunucuyu genel IP adresine sahip bir VPS üzerinde 0.0.0.0 adresine bağlarsanız, aynı sayfa hiçbir koruma olmaksızın tüm internete yanıt verir. Otomatik tarayıcılar yaygın olmayan portları sürekli olarak tarar; bu nedenle dışa açılmış bir 3080 portunu "bulunmuş" kabul edin.
Güvenlik duvarınızda 3080 numaralı portu açmayın ve genel bir VPS üzerinde web sunucusuhostayarını0.0.0.0olarak yapılandırmayın. Bu kombinasyon, sunucunuza bağlanan ilk kişiye komut yürütme yetkisi verir.
Aynı mantık, sunucunuza kurduğunuz her aracı çalışma zamanı için geçerlidir. Bu nedenle bir VPS üzerinde kodlama aracısını güvenli bir şekilde çalıştırmak konusu aynı kural ile başlar: aracının kontrol portu özel kalmalı ve ona erişim, güvendiğiniz bir yöntemle sağlanmalıdır.
dsh Web arayüzünü dizüstü bilgisayarımdan nasıl açabilirim?
Bunun üç güvenilir yolu vardır ve her biri harness'ın loopback üzerinde kalmasını sağlar.
- Bir SSH tüneli. Genel arayüzde yeni hiçbir şey dinlemeye başlanmaz ve kimlik bilgilerine zaten sahipsinizdir. Kullanılması gereken yöntem budur.
- Özel bir overlay ağı; böylece arayüz kendi cihazlarınızdan erişilebilir olur ve diğer herkes için görünmez kalır.
- TLS (taşıma katmanı güvenliği) sonlandırması yapan ve herhangi bir yönlendirme yapmadan önce parola talep eden bir reverse proxy.
Bu yöntemler arasındaki fark, tarayıcınızı loopback'e neyin taşıdığıdır. Bunların hiçbiri harness'ın loopback dışına çıkarılmasını gerektirmemelidir.
SSH tüneli ile erişim
Bunu VPS üzerinde değil, dizüstü bilgisayarınızda çalıştırın:
ssh -N -L 3080:127.0.0.1:3080 you@your-vpsÇalışmaya bırakın, ardından yerel tarayıcınızda http://127.0.0.1:3080 adresini açın. Web arayüzü yüklenecektir.
-L argümanı iki nokta üst üste ile ayrılmış üç alan içerir. İlki, dizüstü bilgisayarınızda açılacak porttur. İkinci ve üçüncü alanlar, her bağlantının yönlendirileceği adres ve porttur. Önemli detay şudur: Orta alandaki 127.0.0.1, trafiğiniz oraya ulaştıktan sonra VPS üzerindeki SSH sunucusu tarafından çözümlenir. Bu, sizin değil, VPS'in loopback adresini ifade eder. dsh çıktısının tam olarak bu adresi vermesinin ve doğrudan tarayıcı bağlantısı çalışmazken tünelin çalışmasının nedeni budur.
-N, SSH'e uzak bir komut çalıştırmamasını söyler; böylece kabuk (shell) olmadan sadece yönlendirme elde edersiniz. Sessizce değil, hata durumunda belirgin şekilde başarısız olan bir arka plan tüneli için:
ssh -N -f -o ExitOnForwardFailure=yes -o ServerAliveInterval=30 -L 3080:127.0.0.1:3080 you@your-vps-f, kimlik doğrulamasından sonra süreci arka plana atar. ExitOnForwardFailure=yes göründüğünden daha önemlidir: bu olmadan, yönlendirme kurulamasa bile SSH başarılı bir şekilde bağlanır; böylece çalışan bir oturumunuz olur ancak tünel hiçbir uyarı vermeden ölü kalır. ServerAliveInterval=30, boşta kalan bir tünelin kafe ve otel yönlendiricilerindeki NAT (ağ adresi çevirisi) zaman aşımlarından etkilenmemesi için her 30 saniyede bir keepalive gönderir.
Ne görmelisiniz
VPS üzerinde, gerçekte neyin dinlemede olduğunu doğrulayın:
ss -ltnp | grep 3080Sağlıklı bir sonuç, loopback adresini belirtir:
LISTEN 0 511 127.0.0.1:3080 0.0.0.0:* users:(("node",pid=1042,fd=21))Eğer yerel adres sütununda 0.0.0.0:3080 yazıyorsa, Web arayüzü genel arayüz dahil tüm arayüzlerde dinleme yapıyordur. Başka bir şey yapmadan önce servisi durdurun ve bind ayarını düzeltin. Eğer ss soketi listeliyor ancak users: alanını boş bırakıyorsa, komutu sudo ile çalıştırın; aksi takdirde başka bir kullanıcıya ait soketin süreç adı gizli kalır.
Tünel başlatılamadığında
SSH şu çıktıyı verir ve sonlanır:
bind [127.0.0.1]:3080: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 3080Bu durum sunucuyla değil, dizüstü bilgisayarınızla ilgilidir. Yerel bir süreç zaten 3080 portunu kullanıyordur; bu genellikle unuttuğunuz eski bir tüneldir. Bunun yerine boş bir yerel port seçin:
ssh -N -L 3081:127.0.0.1:3080 you@your-vpsSadece ilk alan değişti, bu yüzden artık http://127.0.0.1:3081 adresine göz atabilirsiniz; tünel ise 3080 üzerinde dinlemeye devam eder. İki numaranın birbiriyle eşleşmesi gerekmez.
Tünel kuruluyor ancak tarayıcı bağlantının reddedildiğini veya boş bir yanıt döndüğünü bildiriyorsa, trafik VPS'e ulaşmış ancak karşı tarafta hiçbir şey bulamamıştır. Ya dsh sonlanmıştır ya da farklı bir portta dinleme yapıyordur. Sunucu üzerinde ss -ltnp | grep 3080 ile kontrol edin.
Burada insanları zorlayan bir diğer konu şudur: Ön planda çalışan bir npx @deepseek-ai/dsh web, kabuk kapandığında sonlanır; bu nedenle oturumu kapattığınız anda tünel de durur. Bunu tmux içinde veya bir systemd kullanıcı servisi altında başlatın; bu, VPS üzerinde bir kodlama aracını çalışır durumda tutma konusunda çözülen sorunun aynısıdır. SSH tarafında çalışırken, VPS üzerinde SSH güvenliğini sıkılaştırma işlemini önceden yapmakta fayda vardır, çünkü tünel SSH girişinizi araca açılan tek kapı haline getirir.
Özel bir overlay ağı üzerinden erişim
Bir overlay ağı, VPS'nize ve dizüstü bilgisayarınıza yalnızca kendi cihazlarınızın katılabildiği özel bir ağ üzerinde adresler atar. Tailscale yaygın bir tercihtir ve serve komutu bu durum için tam olarak uygundur: tailscaled, VPS üzerinde çalışır ve localhost:3080 ile bağlantı kurar; böylece altyapı loopback üzerinde kalır ve dsh yapılandırmasında herhangi bir değişiklik yapmanız gerekmez.
tailscale serve --bg localhost:3080
tailscale serve statusArayüze, tailnet'iniz içindeki makine adınız üzerinden, HTTPS ile ve genel arayüzde hiçbir port açmadan erişilebilir. Bunun için tailnet'inizde HTTPS sertifikalarının etkinleştirilmiş olması gerekir, aksi takdirde serve sunacak bir sertifika bulamaz. Servisi tekrar kapatmak için komutu off ile tekrarlayın:
tailscale serve --https=443 offserve kullanın, asla funnel kullanmayın. Funnel, aynı hedefi genel internete açar ve sizi tekrar açık bir port üzerinde kimlik doğrulaması olmayan bir aracı çalışma zamanına döndürür. İki komut neredeyse aynı görünür ancak zıt işlevlere sahiptir; bu nedenle herhangi birini yazmadan önce Tailscale Serve ve Funnel arasındaki fark konusunu okuyun. Özel bir ağ olarak Tailscale kurulumun kendisini kapsar.
Parola denetimi yapan bir reverse proxy üzerinden erişim
Bu seçenek, bir portu doğrudan internete açtığı için, sunucunuzdaki komut yürütme yetkisi ile yabancı bir kullanıcı arasındaki tek engel kimlik doğrulamadır. Arayüze birden fazla kişinin erişmesi gerektiğinde ve her biri için ayrı bir tünel kurmak pratik olmadığında bu yöntemi tercih edin.
Harness, 127.0.0.1:3080 üzerinde çalışmaya devam eder. nginx aynı sunucuda çalıştığı için loopback adresine erişebilir; 443 numaralı portu bir sertifika ve parola dosyası ile dinler.
server {
listen 443 ssl;
server_name dsh.example.com;
ssl_certificate /etc/letsencrypt/live/dsh.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dsh.example.com/privkey.pem;
auth_basic "dsh";
auth_basic_user_file /etc/nginx/dsh.htpasswd;
location / {
proxy_pass http://127.0.0.1:3080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 3600s;
proxy_buffering off;
}
}Parola dosyasını oluşturun ve yeniden yükleyin:
sudo apt install -y apache2-utils
sudo htpasswd -c /etc/nginx/dsh.htpasswd you
sudo nginx -t && sudo systemctl reload nginxnginx -t komutu, syntax is ok ve ardından test is successful çıktısını vermelidir. Hatalı bir dosya ile yapılan yeniden yükleme işlemi başarısız olur ve çalışan yapılandırmayı korur; bu nedenle körü körüne yeniden başlatmak yerine hata mesajını okuyun.
Proxy satırlarındaki üç ifade yalnızca süsleme değildir. Upgrade ve Connection başlıkları, WebSocket el sıkışmasına izin verir; bunlar olmadan sayfa yüklenir ancak hiçbir zaman güncellenmez. proxy_read_timeout 3600s, aksi takdirde uzun süren bir agent çalışmasını yanıtın ortasında kesen ve arayüzün donmuş görünmesine neden olan 60 saniyelik varsayılan süreyi değiştirir. proxy_buffering off, model çıktısını yanıt tamamlanana kadar bekletmek yerine tarayıcıya ulaştığı anda gönderir. Satır satır bir nginx reverse proxy yapılandırması geri kalanını açıklar ve nginx, Caddy ve Traefik arasında seçim yapma konusu, aynı işlemin otomatik sertifikalarla nasıl yapılacağını ele alır.
Hangi proxy'yi seçerseniz seçin, 3080 numaralı portu güvenlik duvarında kapalı tutun; böylece içeriye giden tek yol kimlik doğrulamalı olan kalacaktır. ufw güvenlik duvarı temelleri kuralları kapsar. TLS üzerinden temel kimlik doğrulama bir taban seviyesidir, nihai bir güvenlik modeli değildir: o parolaya sahip olan kişi, sunucunuzda bir shell erişimine sahip olur. Mümkün olduğunda tünel yöntemini tercih edin.
dsh web arayüzünün dinlediği portu nasıl değiştiririm?
--port, başlatıcıya (launcher) değil, web uygulamasına aittir. CLI dokümantasyonu bu örneği doğrudan vermektedir:
dsh --profile web --port 8080dsh web, --profile web komutunun bir takma adıdır, dolayısıyla dsh web --port 8080 aynı komuttur. Başlatıcı yalnızca kendi bayraklarını ayrıştırır ve bunların ardından gelen her şeyi başlatılan profile aktarır. Bu nedenle başlatıcı bayrakları önce gelir ve başlatıcının tanımadığı ilk belirteç, uygulamanın argümanlarını başlatır. --port bayrağını profilin önüne değil, mutlaka arkasına yerleştirin.
Komutun yazdırdığı URL'yi varsayımlarda bulunmak yerine doğrudan okuyun; çünkü bu satır, sunucunun gerçekten bağlandığı adresi rapor eder. Ardından tünelinizin son alanını buna uyacak şekilde güncelleyin:
ssh -N -L 3080:127.0.0.1:8080 you@your-vpsKalıcı bir değişiklik için port, komut satırı yerine profil yapılandırmasında tutulur. web ve headless profilleri, ilk kullanımda ~/.dsh altındaki yüklü şablonlardan otomatik olarak başlatılır. Tüm katmanlar birleştirildikten sonra hangi ayarın geçerli olduğunu görmek için:
dsh --dump-configWeb sunucusu eklentisi tam olarak iki anahtar sunar: host ve port. port değerini 0 olarak ayarlamak, işletim sisteminden boş bir port talep eder; bu durum "sıfır, işletim sistemi tarafından atanan bir port talep eder" şeklinde belgelenmiştir. Bu, bir çakışma yaşamanızı engeller ancak her yeniden başlatmada numara değişeceği için tünel kullanımı için uygun bir yöntem değildir.
dsh neden address already in use hatası verir?
Başka bir süreç halihazırda ilgili adresi ve portu kullandığı için çekirdek ikinci bind işlemini reddeder. Düğüm bu durumu şu şekilde raporlar:
Error: listen EADDRINUSE: address already in use 127.0.0.1:3080Herhangi bir değişiklik yapmadan önce portu tutan süreci bulun:
sudo ss -ltnp | grep 3080users:(("node",pid=1042,fd=21)) alanı süreci ve PID numarasını belirtir. Genellikle karşılaşılan durum, durdurulduğu sanılan ancak arka planda çalışan bir dsh sürecinin, sıklıkla da kopuk bir tmux penceresinde hala aktif olmasıdır. Bu süreci kill 1042 ile sonlandırın veya yeni örneği farklı bir port üzerinde başlatın. 127.0.0.1:3080 ve 0.0.0.0:3080 süreçlerinin de birbiriyle çakıştığını unutmayın; çünkü tüm arayüzlere (all interfaces) bind işlemi, loopback adresini de kapsar.
Sürümü sabitleyin, çünkü bu bir geliştirici önizlemesidir
README dosyası bu konuda net bir ifade kullanmaktadır: DeepSeek Harness geliştirici önizleme aşamasındadır ve hızla güncellenmektedir; bu süreçte uyumluluğu bozan değişiklikler yaşanacaktır.
npx @deepseek-ai/dsh web, çalıştırdığınız her seferde yayınlanan en yeni sürüme çözümlenir. Bir haftadır dokunmadığınız bir sunucu, bir sonraki başlatmada farklı bayraklarla ve farklı bir CLI ile çalışmaya başlayabilir. Yeniden başlatmanın bir yükseltme anlamına gelmemesi için sürümü sabitleyin:
npx @deepseek-ai/dsh@0.1.0-rc.7 webAğustos 2026 itibarıyla yayınlanan paket 0.1.0-rc.7 sürümüdür. Kabul etmeden önce, yalın bir npx komutunun hangi sürümü çekeceğini kontrol edin:
npm view @deepseek-ai/dsh versionÖnizleme sürümleri arasında bayraklar, başlatıcı ile web uygulaması arasında yer değiştirebilir. Eğer --port bu kılavuzda anlatıldığı gibi davranmayı bırakırsa, tahmin yürütmek yerine uygulamanın kendi bayrak listesini isteyin:
dsh --profile web --helpKurulumun kendisi, çalışma alanı yapılandırması ve model anahtarı için DeepSeek Harness'in bir VPS üzerine kurulması bölümüne bakın. Yalnızca erişim adımı için daha kısa bir kılavuz isterseniz, dsh Web arayüzüne bir VPS üzerinden erişim bölümü, mantıksal açıklamalar olmaksızın tünel kurulumunu ele almaktadır.
FAQ
Neden dizüstü bilgisayarımın tarayıcısında http://127.0.0.1:3080 adresini açamıyorum?
Çünkü 127.0.0.1, üzerinde işlem yaptığınız makineyi ifade eder. DeepSeek Harness Web arayüzü, VPS'in loopback adresine bağlıdır; bu nedenle yalnızca VPS üzerindeki süreçler ona bağlanabilir. Dizüstü bilgisayarınızın kendine ait ayrı bir loopback adresi vardır ve orada 3080 numaralı portu dinleyen herhangi bir servis bulunmamaktadır. Portu ssh -N -L 3080:127.0.0.1:3080 you@your-vps ile SSH üzerinden yönlendirin ve ardından yerel olarak http://127.0.0.1:3080 adresini yükleyin. -L argümanının orta alanı sunucu tarafında çözümlenir; bu da onun harness'a yönlenmesini sağlar.
dsh Web arayüzünü halka açık bir VPS üzerinde 0.0.0.0 adresine bağlamak güvenli midir?
Hayır. Web arayüzü, dsh kullanıcısı yetkileriyle kabuk komutları çalıştıran ve dosyaları düzenleyen bir aracın kontrol yüzeyidir; geliştirici önizleme sürümü herhangi bir giriş ekranı içermemektedir. Genel bir IP adresi üzerinde tüm arayüzlere bağlanmak, 3080 numaralı porta erişen herkesin sunucunuzda komut çalıştırmasına olanak tanır. Bağlantıyı 127.0.0.1 üzerinde tutun, güvenlik duvarında 3080 numaralı portu kapalı bırakın ve SSH tüneli, özel bir overlay ağı veya parola korumalı bir reverse proxy kullanın.
SSH oturumumu kapattıktan sonra dsh Web arayüzünün çalışmaya devam etmesini nasıl sağlarım?
Ön planda çalışan bir npx @deepseek-ai/dsh web, giriş yaptığınız kabuğun bir alt sürecidir; bu nedenle kabuk kapandığında süreç de sonlandırılır. Uygulamayı bir tmux oturumu içinde başlatıp Ctrl-b d ile ayırın veya "lingering" özelliği etkinleştirilmiş bir systemd kullanıcı servisi olarak çalıştırın. Tünel ve harness birbirinden bağımsızdır: Harness'ın kendisi oturumunuzdan daha uzun ömürlü bir ebeveyn sürece sahip olduğu sürece, çalışan harness'a dokunmadan SSH tünelini dilediğiniz sıklıkta kapatıp yeniden oluşturabilirsiniz.
Uzun süren bir aracı çalışması sırasında dsh Web arayüzü neden nginx arkasında donuyor?
Çünkü nginx'in varsayılan proxy_read_timeout değeri 60 saniyedir; bu nedenle bir dakika boyunca veri üretmeyen bağlantıları kapatır ki uzun süren bir araç adımı bunu kolaylıkla yapabilir. location bloğu içerisinde proxy_read_timeout 3600s; değerini ayarlayın. Çıktının tarayıcıya ulaştığı anda akması için proxy_buffering off; ekleyin ve WebSocket el sıkışmasının başarılı olması için proxy_http_version 1.1; ile Upgrade ve Connection başlıklarını iletin. Bu başlıklar olmadan sayfa yüklenir ancak hiçbir güncelleme almaz.