dsh web http://127.0.0.1:3080 hatası ve çözümü
dsh web arayüzü varsayılan olarak localhost üzerinde çalışır. Uzak sunucudaki 3080 portuna erişmek için SSH tüneli kullanın. Güvenlik riski nedeniyle portu dışa 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 ardından 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 kimin erişebileceği. Sadece dsh üzerinde çalışan makine.
Bu yüzden URL'yi dizüstü bilgisayarınızdaki tarayıcıya yapıştırdığınızda hiçbir sonuç alamazsınız. 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. Herhangi bir hata yoktur. 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 makinesi; desteklenen iki değer loopback ve all-interfaces şeklindedir" olarak belgelenen web sunucusu ana makine eklentisi @deepseek-ai/dsh-host-webserver tarafından belirlenir. Siz değiştirmedikçe varsayılan değer loopback'tir. Portlar sizin için yeniyse, Linux'ta portlar nasıl çalışır başlıklı yazı, tüm bu yapının dayandığı adres artı port modelini açıklar.
Web arayüzü neden yalnızca localhost üzerinde dinleme yapar
dsh bir aracı donanımıdır ve modelin etrafına sarılmış programdır: döngünün, araç çağrılarının ve bu çağrıların altında çalıştığı izinlerin sahibidir. Tarayıcı sekmesi; shell 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. O sayfayı yükleyebilen herkes, dsh uygulamasını çalıştıran kullanıcı yetkileriyle tüm bunları yapabilir. Ağ, bu erişime giden tek yol değildir: yüklediğiniz bir eklenti, aynı süreç içinde aynı izinlerle çalışır; bu nedenle bir dsh eklentisini yüklemeden önce incelemek, sunucunun hangi adreste dinleme yapacağına karar vermekle aynı özeni gerektirir.
Dolayısıyla 3080 numaralı port salt okunur bir kontrol paneli değildir. O sayfayı yüklemek, sunucuda komut yürütme yetkisi verir.
Web arayüzünü açtığınızda doğrudan oturum listesine ulaşırsınız. Giriş ekranı yoktur, çünkü geliştirici önizlemesi kullanıcı hesapları ve uzaktan kimlik doğrulama içermez. Loopback üzerinde bu durum tutarlıdır: işletim sistemi erişim kontrolünü sağlar ve yalnızca yerel süreçler içeri girebilir. 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 nadir kullanılan portları sürekli olarak tarar, bu yüzden herkese açık 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, sunucunuzdaki komut yürütme yetkisini ilk bağlanan kişiye verir.
Aynı mantık, bir sunucuya kurduğunuz her aracı çalışma zamanı için geçerlidir; bu yüzden bir kodlama aracını VPS üzerinde güvenli bir şekilde çalıştırmak aynı kuralla başlar: aracın kontrol portu özel kalmalı ve ona yalnızca güvendiğiniz bir yöntemle erişmelisiniz.
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 bir port dinlenmez 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 olurken diğer herkes için görünmez kalır.
- TLS (transport layer security) 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 ulaştıran aracın ne olduğudur. Hiçbiri, harness'ın loopback üzerinden taşınması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-vpsKomutu çalışır durumda bırakın ve 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. Birincisi, dizüstü bilgisayarınızda açılacak porttur. İkinci ve üçüncü alanlar, bağlantının yönlendirileceği adres ve portu belirtir. Önemli detay şudur: Orta alandaki 127.0.0.1, trafiğiniz VPS'e ulaştıktan sonra VPS üzerindeki SSH sunucusu tarafından çözümlenir. Bu, sizin değil, VPS'in loopback adresi anlamına gelir. dsh çıktısında görülen adres tam olarak budur; doğrudan tarayıcı bağlantısı çalışmazken tünelin çalışmasının nedeni de budur.
-N, SSH'e uzak bir komut çalıştırmamasını söyler; böylece kabuk (shell) olmadan yalnızca bir yönlendirici 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 bayrak olmadan, yönlendirme kurulamasa bile SSH başarılı bir şekilde bağlanır; bu da size çalışan bir oturum ancak hiçbir uyarı vermeyen ölü bir tünel bırakır. ServerAliveInterval=30, her 30 saniyede bir keepalive paketi gönderir; böylece boşta duran bir tünel, kafe ve otel yönlendiricilerindeki NAT (ağ adresi çevirisi) zaman aşımlarından etkilenmez.
Görmeniz gerekenler
VPS üzerinde, gerçekte neyin dinlemede olduğunu doğrulayın:
ss -ltnp | grep 3080Sağlıklı bir sonuç, loopback adresini gösterir:
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 işlem 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 işlem adı gizli kalacaktır.
Tünel başlatılamadığında
SSH şu hatayı verir ve sonlanır:
bind [127.0.0.1]:3080: Address already in use
channel_setup_fwd_listener_tcpip: cannot listen to port: 3080Bu sorun 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-vpsYalnızca ilk alan değiştiği için artık http://127.0.0.1:3081 adresine gidersiniz, ancak sunucu tarafındaki süreç 3080 portunu dinlemeye devam eder. İki numaranın birbiriyle eşleşmesi gerekmez.
Tünel kurulur ancak tarayıcı bağlantının reddedildiğini veya boş bir yanıt döndüğünü bildirirse, 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 kullanıcıların sıkça karşılaştığı bir durum daha vardır. Ö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. Komutu tmux içinde veya VPS üzerinde bir kodlama aracını sürekli çalıştırma konusunda çözülen yöntemle, bir systemd kullanıcı servisi altında başlatın. SSH tarafında çalışırken, VPS üzerinde SSH güvenliğini sıkılaştırma işlemini önceden yapmak faydalıdı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 bu konuda 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 harness 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. Bağlantıyı sonlandırmak 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 bu da sizi tekrar açık bir port üzerinde kimlik doğrulaması olmayan bir aracı çalışma zamanına döndürür. İki komut birbirine çok benzer 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, yabancı bir kullanıcı ile sunucunuzda komut çalıştırma yetkisi arasında yalnızca kimlik doğrulama katmanı bulunur. 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 seçin.
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 yapılandırmayı 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 mevcut 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, varsayılan 60 saniyelik süreyi değiştirir; aksi takdirde uzun süren bir agent çalışması yanıtın ortasında kesilir ve arayüz donmuş gibi görünür. proxy_buffering off, model çıktısını yanıt tamamlanana kadar bekletmek yerine ulaştığı anda tarayıcıya 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 başlangıçtır, eksiksiz bir güvenlik modeli değildir: parolaya sahip olan kişi sunucunuzda bir kabuk (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 konuda doğrudan bir örnek sunar:
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ı (flags) ayrıştırır ve bunların ardından gelen her şeyi başlatılan profile aktarır. Bu nedenle başlatıcı bayrakları en başta yer almalıdır; başlatıcının tanımadığı ilk belirteç, uygulamanın argümanlarını başlatır. --port bayrağını her zaman profil isminden sonra yerleştirin, asla öncesinde kullanmayın.
Komutun yazdırdığı URL'yi varsayımlarla tahmin etmek yerine doğrudan okuyun; çünkü o satır, sunucunun gerçekten bağlandığı adresi raporlar. 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 bilgisi komut satırı yerine profil yapılandırmasında tutulur. web ve headless profilleri, ilk kullanımda ~/.dsh dizini altındaki yüklü şablonlardan otomatik olarak başlatılır. API anahtarınız ve model uç noktası ayarlarınız da aynı dizinde yer aldığından, bu dosyaları düzenlerken dsh anahtarlarını, modellerini ve uç noktalarını yapılandırma rehberi tamamlayıcı bir okuma olacaktır. Tüm katmanlar birleştirildikten sonra hangi ayarları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 değeri, işletim sistemi tarafından atanan bir port talep eder" şeklinde belgelenmiştir. Bu yöntem çakışmaları önlemeyi garanti eder ancak her yeniden başlatmada port numarası değişeceği için tünel yapılandırmaları için uygun değildir.
dsh neden "address already in use" hatası veriyor?
Başka bir süreç halihazırda ilgili adresi ve portu kullandığı için çekirdek ikinci bind işlemini reddeder. Node 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 bilgisini belirtir. Genellikle karşılaşılan durum, durdurulduğu düşünülen ancak arka planda çalışan bir dsh sürecinin, sıklıkla da kopuk bir tmux penceresinde yaşamaya devam etmesidir. Bu süreci kill 1042 ile durdurun 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 bind işlemi zaten loopback adresini de kapsar.
Sürümü sabitleyin, çünkü bu bir geliştirici önizlemesidir
README dosyası bu konuda nettir: DeepSeek Harness bir geliştirici önizlemesidir ve hızla gelişmektedir; bu süreçte uyumluluğu bozan değişiklikler olacaktır. Eğer bu hız tereddüt etmenize neden oluyorsa, dsh ile Claude Code ve Omnigent karşılaştırması bölümü, bu aracı aynı eğrinin farklı noktalarındaki iki farklı araçla kıyaslamaktadır.
npx @deepseek-ai/dsh web, her çalıştırdığınızda yayınlanan en yeni sürüme çözümlenir. Bir haftadır dokunmadığınız bir sunucu, bir sonraki başlatmada farklı bayraklarla (flags) farklı bir CLI sürümü çalıştırabilir. Sürümü sabitleyin ki yeniden başlatma bir yükseltme işlemi olmasın:
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 neyi çekeceğini kontrol edin:
npm view @deepseek-ai/dsh versionEğer sabitleme işlemi kuruluma izin vermezse veya siz yeni bir sürümü sabitledikten sonra npx eski derlemeyi çalıştırmaya devam ederse, kurulum ve sürüm hataları bölümü, npx önbelleğinin temizlenmesi ve Node paketlerinizin hangi npm sürümünü kullandığının kontrol edilmesi konularını ele almaktadır.
Önizleme sürümleri arasında bayraklar, başlatıcı (launcher) 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 uygulamadan kendi bayrak listesini isteyin:
dsh --profile web --helpKurulumun kendisi, çalışma alanı yapılandırması ve model anahtarı için DeepSeek Harness'ın bir VPS üzerine kurulması bölümüne bakın. Yalnızca erişim adımı için daha kısa bir rehber isterseniz, bir VPS üzerinde dsh Web arayüzüne erişim bölümü, mantık yürütme kısımları olmadan tünel kurulumunu anlatmaktadır.
FAQ
Neden http://127.0.0.1:3080 adresini dizüstü bilgisayarımın tarayıcısında 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 işaret etmesini sağlar.
dsh Web arayüzünü herkese açık bir VPS üzerinde 0.0.0.0 adresine bağlamak güvenli midir?
Hayır. Web arayüzü, dsh sürecini çalıştıran kullanıcı yetkileriyle kabuk komutları yürüten ve dosyaları düzenleyen bir ajanın kontrol yüzeyidir; geliştirici önizleme sürümü herhangi bir giriş ekranı sunmaz. Herkese açık bir IP ü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, 3080 numaralı portu güvenlik duvarında 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 ebeveyne sahip olduğu sürece, SSH tünelini harness'a dokunmadan dilediğiniz kadar kapatıp yeniden oluşturabilirsiniz.
Nginx arkasında çalışan uzun bir ajan işlemi sırasında dsh Web arayüzü neden 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. Uzun süren ajan adımları bu süreyi kolayca aşabilir. location bloğu içerisinde proxy_read_timeout 3600s; ayarını yapılandırın. Çıktının geldiği anda tarayıcıya akması için proxy_buffering off; ayarını 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.