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
Hacker News görüşleri
'deploy' teriminin kullanımı kafa karıştırıcı
Sıfır kesintili dağıtım için tüm sistemi kurmak aşırıya kaçıyor
Kamal proxy, Docker Swarm'ın sorunlarını çözmek için var
Kamal'ın neden Swarm'ı seçtiği merak ediliyor
Kamal proxy kullanılmamış olsa da, destek sorunları nedeniyle şüpheyle yaklaşılıyor
Bu, HAProxy'nin kolayca yapabileceği bir iş gibi görünüyor
'trafiği geçici olarak duraklatma' desenini uygulayıp uygulamadığı merak ediliyor
Sıfır kesintili dağıtımın (ZDD) nasıl çalıştığı 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
docker compose up --build --force-recreate webkomutu her şeyi geçersiz kılıyorTimeout ayarlamanın bir yolu olup olmadığı merak ediliyor
Bu bir NIH (Not Invented Here) sendromu