17 puan yazan GN⁺ 2025-04-12 | 2 yorum | WhatsApp'ta paylaş
  • Geliştirme aşamasındaki web uygulamaları için localhost:4333 gibi portları ezberlemeden, appname.localhost gibi basit adreslerle erişim sağlamayı mümkün kılan kurulum deneyimi paylaşılıyor
  • Bu sistem kullanıldığında yerel web uygulamalarına erişim çok daha sezgisel ve düzenli hale geliyor
  • Her uygulama kendi benzersiz portunda launchd daemon olarak çalıştırılıyor
  • /etc/hosts dosyasında appname.localhost, 127.0.0.1 adresine yönlendiriliyor
    • Örnek: 127.0.0.1 inclouds.localhost
  • Caddy ile ilgili alan adı uygun porta proxy ediliyor

Caddy yapılandırma örneği

  inclouds.localhost {  
    reverse_proxy localhost:5050  
    tls internal  
    encode gzip zstd  
  }  
  • Her .localhost alan adı için Caddyfile içinde ilgili porta proxy ayarı yazılıyor
  • Dahili TLS sertifikaları ve sıkıştırma desteği de buna dahil

Gelecekteki iyileştirme fikirleri

  • Şu anda üç dosyayı (/etc/hosts, Caddyfile, launchd plist) elle düzenlemek gerekiyor
  • Gelecekte, uygulamaları .localhost alan adına tek komutla kurup kaldıran bir otomasyon aracı oluşturmak hedefleniyor

Güncelleme

  • Cristóbal, dnsmasq tabanlı bir komut önererek bu süreci daha da kolaylaştırdı
  • Temel fikir şu şekilde:
    1. Tüm *.localhost adreslerini 127.0.0.1 adresine yönlendirmek
    2. 127.0.0.1 üzerinde belirli portlara reverse proxy yapan bir sunucu yapılandırmak

dnsmasq ile yönlendirme ayarlamak

  • Tüm *.localhost alan adlarını 127.0.0.1 adresine yönlendirmek için dnsmasq kullanılıyor
  • Kurulumdan sonra yapılandırma:
    echo 'port=5353' | sudo tee -a /etc/dnsmasq.conf  
    echo 'address=/localhost/127.0.0.1' | sudo tee -a /etc/dnsmasq.conf  
    sudo systemctl restart dnsmasq  
    
  • dnsmasq portu, systemd-resolved ile çakışmayı önlemek için 5353 olarak ayarlanıyor
  • Varsayılan DNS çözücüsünü dnsmasq yapmak için /etc/resolv.conf dosyasının en üstüne şunu ekleyin:
    nameserver 127.0.0.1  
    

Caddy ve localhost betiğiyle reverse proxy ayarlamak

  • Artık caddy sunucusunu kullanarak her alt alan adını belirli bir porta bağlamak mümkün
  • Caddyfile'ı elle düzenlemek de mümkün, ancak bunu otomatikleştirmek için localhost adlı bir bash betiği oluşturulabiliyor
  • Bu bash betiğini (localhost) PATH'e ekleyin (örnek olarak .zshrc dosyasına ekleme):
    export PATH="$PATH:$HOME/dev/localhost"  
    
  • Şöyle kullanılabiliyor:
    localhost add hello 8000  
    localhost remove hello  
    

Gerçek çalışma testi

  • Yerel sunucuyu çalıştırma örneği:
    echo 'hello.localhost!' > index.html  
    python3 -m http.server 1234  
    
  • Alan adı eşlemesini ayarlama:
    localhost add hello 1234  
    
  • Artık tarayıcıda hello.localhost adresine gidildiğinde bu sunucunun içeriği görüntüleniyor

2 yorum

 
dudlf016 2025-04-12

Ben, dış ağa erişilememe durumu yoksa NIP.IO gibi wildcard DNS kullanırım.

 
GN⁺ 2025-04-12
Hacker News görüşleri
  • Tarayıcılar .localhost alan adı için güvenli bağlam sağlar

    • HTTPS için self-signed sertifika gerekmez
    • Backend API ile frontend SPA aynı anda çalıştığında kullanışlıdır
    • Yakın zamanda onaylanan .internal alan adı kullanılabilir
  • nginx yerel geliştirme yapılandırma snippet'i basittir

    • Unix domain socket üzerinden yerel geliştirme sunucusuna bağlanır
    • Host adı çözümlemesi eklemek gerekir, ancak yapılandırma dosyalarını programatik olarak düzenlemek veya proxy'yi yeniden başlatmak gerekmez
  • Chrome ve Firefox varsayılan olarak tüm <name>.localhost alan adlarını localhost olarak çözümler

    • Tüm istekleri otomatik olarak işlemek için Docker proxy yapılandırılabilir
  • Localias projesi yerel web geliştirme için kullanışlıdır

    • Caddy tabanlıdır ve CLI ile yapılandırma dosyası biçimi kullanışlıdır
    • .local alan adı takma adlarının ağdaki diğer cihazlarda da kullanılmasını sağlar
    • /etc/hosts dosyasını elle düzenlemeye gerek yoktur
  • .localhost alt alan adları Linux, OpenBSD gibi sistemlerde varsayılan olarak çalışır

    • macOS'ta alt alan adlarını /etc/hosts içine açıkça eklemek gerekir
  • Caddy kullanılıyorsa, satın alınmış bir alan adı ve DNS-01 challenge kullanmak iyi bir seçenektir

    • Self-signed sertifikaları güven deposuna eklemek gerekmez
    • Caddy sertifikaları otomatik olarak yeniler
  • Kişisel ağında vanity domain kullananlar da var

    • Smallstep CA, CoreDNS ve Traefik ile SSL sertifikaları otomatik olarak verilir
    • İç ağ yapılandırmasında internal. zone kullanılması önerilir
  • Her yerel olarak barındırılan uygulamaya ayrı bir IP adresi atanabilir

    • 127.0.0/24 aralığındaki IP adresleri kullanılabilir
    • macOS'ta da çalışır, ancak loopback arayüzüne açıkça eklemek gerekebilir
  • Linux sistemlerinde bu, varsayılan olarak systemd-resolved üzerinden çalışır

    • Ters proxy ile CSRF'yi engelleyebilme avantajı vardır