3 puan yazan GN⁺ 2024-09-22 | 1 yorum | WhatsApp'ta paylaş

Kamal Proxy - Minimal bir HTTP proxy ile kesintisiz dağıtımı destekler

Özellikler

  • Kamal Proxy, kesintisiz dağıtımları kolayca orkestre etmek için tasarlanmış bir HTTP proxy'dir
  • Web uygulamanızı Kamal Proxy'nin arkasında çalıştırırsanız, devam eden trafiği kesmeden değişiklikleri dağıtabilirsiniz
  • Uygulamanın özel bir iş birliği olmadan da çalışabilir
  • Kamal'ın bir parçası olarak tasarlanmıştır, ancak bağımsız olarak veya başka dağıtım araçlarıyla birlikte kullanılabilir

Kısa genel bakış

  • Proxy örneğini çalıştırmak için kamal-proxy run komutu kullanılır
  • Yapılandırma dosyası yoktur, ancak varsayılanlar uygulamanıza uymuyorsa seçenekler belirtilebilir
  • Örneğin, proxy'yi varsayılan 80 portu yerine başka bir portta çalıştırmak için: kamal-proxy run --http-port 8080
  • Tüm seçeneklerin listesini görmek için kamal-proxy help run komutunu çalıştırın

Trafik yönlendirme

  • Trafiği proxy üzerinden web uygulamasına yönlendirmek için uygulama örneğini proxy'ye deploy edersiniz
  • Bir örnek dağıtıldığında proxy tarafından kullanılabilir hale gelir ve daha önce kullanılan örneğin yerini alır
  • Örneği belirtirken hostname:port biçimi kullanılır
  • Örneğin: kamal-proxy deploy service1 --target web-1:3000
  • Proxy, web-1:3000 adresini service1 hizmet adıyla kaydeder ve hemen HTTP sağlık kontrollerine başlar
  • Örnek belirli bir süre içinde sağlıklı duruma gelmezse, deploy komutu dağıtımı durdurur ve hatalı çıkış kodu döndürür
  • Her dağıtım, daha önce dağıtılmış örneğin tüm trafiğini devralır
  • Yeni örnek sağlıklı hale geldiğinde tüm yeni trafiği o örneğe yönlendirir
  • deploy komutu, önceki örnekteki trafiğin tamamen boşalmasını bekler
  • Bu nedenle, deploy başarıyla döndüğünde önceki örneği kaldırmanız devam eden istekleri kesmez
  • Trafik, yeni örnek sağlıklı hale gelene kadar yönlendirilmez ve önceki örnek ancak trafik tamamen boşaldıktan sonra kaldırıldığı için kesintisiz dağıtım mümkün olur

Host tabanlı yönlendirme

  • Host tabanlı yönlendirme ile aynı sunucuda birden fazla uygulama çalıştırabilirsiniz
  • Bir örneği dağıtırken trafiğin sunulacağı host'u belirtebilirsiniz
  • Örneğin: kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com
  • Bu şekilde dağıtılan örnek yalnızca belirtilen host için trafik alır
  • Her host için benzersiz bir örnek dağıtarak aynı sunucuda port çakışması olmadan birden fazla uygulama çalıştırabilirsiniz
  • Belirli bir host aynı anda yalnızca tek bir hizmete yönlendirilebilir
  • Örneğin: kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com sonrasında kamal-proxy deploy service2 --target web-2:3000 --host app1.example.com çalıştırılırsa hata oluşur
  • kamal-proxy remove service1 sonrasında kamal-proxy deploy service2 --target web-2:3000 --host app1.example.com çalıştırılırsa başarılı olur

Otomatik TLS

  • Kamal Proxy, uygulamalar için TLS sertifikalarını otomatik olarak alabilir ve yenileyebilir
  • Bir örnek dağıtılırken --tls bayrağı eklenerek etkinleştirilebilir
  • Örneğin: kamal-proxy deploy service1 --target web-1:3000 --host app1.example.com --tls

run seçeneklerini ortam değişkenleriyle belirtme

  • Docker container içinde çalıştırma gibi ortamlarda, run seçeneklerini ortam değişkenleriyle belirtmek kullanışlı olabilir
  • Örneğin HTTP portunu ayarlamak için: kamal-proxy run --http-port 8080 veya HTTP_PORT=8080 kamal-proxy run
  • Ortam değişkenleri başka şeylerle çakışıyorsa, ayırt etmek için KAMAL_PROXY_ öneki eklenebilir
  • Örneğin: KAMAL_PROXY_HTTP_PORT=8080 kamal-proxy run

Derleme

  • Go ortamı ayarlanmışsa Kamal Proxy'yi yerelde derleyebilirsiniz: make
  • Ya da bir Docker container olarak derleyebilirsiniz: make docker

Deneyin

  • Örnek klasördeki Docker Compose yapılandırmasına bakarak proxy komutlarını deneyebilirsiniz

GN⁺ özeti

  • Kamal Proxy, kesintisiz dağıtımı destekleyen minimal bir HTTP proxy'dir ve uygulamanın özel bir iş birliği olmadan da çalışır
  • Host tabanlı yönlendirme ve otomatik TLS özellikleri sunarak birden fazla uygulamanın aynı sunucuda çalışmasını sağlar
  • run seçenekleri ortam değişkenleriyle belirtilebilir, bu da Docker gibi ortamlarda kullanışlıdır
  • Kesintisiz dağıtım için trafiği yeni örneğe yönlendirir ve önceki örnekteki trafik tamamen boşalana kadar bekler
  • Benzer işlevler sunan projeler arasında NGINX ve HAProxy bulunur

1 yorum

 
GN⁺ 2024-09-22
Hacker News görüşleri
  • 'deploy' teriminin kullanımı kafa karıştırıcı

    • 'bind', 'intercept', 'proxy' gibi terimler daha uygun görünüyor
  • Sıfır kesintili dağıtım için tüm sistemi kurmak aşırıya kaçıyor

    • Unix soketlerini destekleyen bir uygulama + web proxy ile de sıfır kesintili dağıtım mümkün
  • Kamal proxy, Docker Swarm'ın sorunlarını çözmek için var

    • Cloud 66'da Caddy ve Traefik kullanılmıştı
  • Kamal'ın neden Swarm'ı seçtiği merak ediliyor

    • Bunun nedeni basitlik olabilir
    • Karmaşıklık gizlenemez ve sonunda kendi proxy'nizi yapmak zorunda kalırsınız
  • Kamal proxy kullanılmamış olsa da, destek sorunları nedeniyle şüpheyle yaklaşılıyor

    • WebSockets, SSE, HTTP/3, çeşitli sıkıştırma ve şifreleme desteği gerekiyor
  • Bu, HAProxy'nin kolayca yapabileceği bir iş gibi görünüyor

    • hitless reload özelliği var
  • 'trafiği geçici olarak duraklatma' desenini uygulayıp uygulamadığı merak ediliyor

    • Trafik birkaç saniyeliğine duraklatılarak altyapı değişiklikleri yapılabilir
  • Sıfır kesintili dağıtımın (ZDD) nasıl çalıştığı merak ediliyor

    • Uygulamanın iki sürümü aynı anda çalışır ve yeni trafik yeni sürüme yönlendirilir
    • Veritabanı migration sorunlarının nasıl ele alındığı merak ediliyor
  • Kamal 2, auto-SSL destekleyecek ve tek sunucuda birden fazla uygulamayı kolayca çalıştırmayı sağlayacak

  • Nasıl kullanıldığı anlaşılmıyor

    • Örneğe göre 'web' servisinin 4 kopyası başlatılıyor
    • Sıfır kesintili dağıtım için yeni hedefe dağıtım yapılmalı
    • docker compose up --build --force-recreate web komutu her şeyi geçersiz kılıyor
    • Daha net yönergeler gerekli
  • Timeout ayarlamanın bir yolu olup olmadığı merak ediliyor

  • Bu bir NIH (Not Invented Here) sendromu