Portalite: Çoklu Relay Bağlama ve Standart net.Listener Tabanlı Hafif Portal Go SDK'sı

Daha önce Portal projesini tanıtırken modern webin sorunlarını ele almıştık. AI kodlama araçlarının ortaya çıkmasıyla herkes bir web sitesi oluşturabilir hale geldi; ancak bu siteleri dünyaya açma işi hâlâ büyük platformların ve bulut hizmetlerinin tekelinde kalmaktadır. Portal, webin barındırılması ile içerik üretimini birbirinden ayırır ve bireylerin yerel hizmetlerini uçtan uca şifrelenmiş röleler aracılığıyla dünya genelinde erişilebilir kılarak yayınlama yetkisini yeniden bireylere geri verir.
Portalite'ı tanıtıyoruz
Bugün Portalite projesini tanıtıyorum. Portalite, minimum bağımlılıkla geliştirilmiş, ultra hafif bir Portal istemcisi ve Go SDK'sıdır.
Portal "webin nasıl değiştirilmesi gerektiği" felsefesiyse, Portalite bu felsefeyi geliştiricinin uygulamasına bağlayan en ince yapıştırıcıdır. Geliştirici karmaşık bulut yapılandırmaları ya da dağıtım hatları olmadan, SDK'yı içe aktarıp birkaç satır kod ekleyerek uygulamasına bir portal ingress'i ekleyebilir. Uygulama çalıştığı anda, yalnızca yerelde çalışan sunucu internetin herhangi bir yerinden erişilebilen herkese açık bir servise dönüşür.
1. İki satır kodla tamamlanan herkese açık Ingress
Portalite, Go'nun standart arayüzü olan net.Listener arayüzünü destekler. Mevcut web çerçevesinin veya sunucu kodunun listener'ını değiştirmeniz yeterlidir, ardından sistem hemen çalışır.
1identity, err := portalite.GenerateIdentity("my-service")
2
3listener, err := portalite.Expose(ctx, portalite.ExposeConfig{
4 Relays: portalite.DefaultRelays(),
5 Identity: identity,
6})
7
8http.Serve(listener, handler)
- Sıfır yapılandırma (Zero-config): Port yönlendirme, sabit IP ve güvenlik duvarı gelen trafik kurallarının ayarlanması kesinlikle gerekmez.
- Standart uyumluluk:
http.Server,grpc.Server, Gin, Echo, Chi ve standartnet.Listenerkullanan tüm Go kütüphaneleriyle %100 uyumludur.
2. Temel özellik: Çoklu röle eşzamanlı bağlama (Multi-Relay Binding)
Çoğu tünelleme aracı tek bir uç noktaya bağımlı olduğundan, röle sunucusu çöktüğünde hizmet de birlikte kesilir. Portalite, aynı anda birden fazla röle sunucusuna bağlanarak çalışır.
- Kesintisiz arıza izolasyonu (Failover): Röleler arasından bazıları devre dışı kalsa veya ağ gecikmesi yaşansa bile, çalışmaya devam eden diğer röleler aynı sanal listener üzerinden trafik almayı sürdürür.
- Tek arıza noktasının (SPOF) ortadan kaldırılması: Tüm röle oturumları aynı anda kesilmedikçe uygulamanın
Accept()döngüsü durmaz. - Uçtan uca şifreleme (E2EE): Trafik şifrelenmiş olarak iletildiğinden, röle sunucuları verileri inceleyemez veya değiştiremez.
- Otomatik yeniden bağlanma ve kendi kendini onarma (Self-Healing): Geçici ağ kesintilerinde ya da röle yeniden başlatmalarında bile, oturumlar ve tokenlar arka planda otomatik olarak yeniden müzakere edilerek bağlantı geri kazanılır.
3. Tek satırlık CLI komutuyla anında kullanım
Go kodu kullanmıyorsanız ya da hızlı bir test yapmanız gerekiyorsa, yalnızca port numarasını CLI'ye vermeniz yeterlidir.
1$ go install gosuda.org/portalite/cmd/portalite@latest && portalite expose --name "my-service" 3000
2URL https://my-service.rly.best
3URL https://my-service.s-h.day
4
Komut çalıştırıldığı anda çoklu röle URL'leri oluşturulur ve servis hemen dış dünyadan erişilebilir hale gelir.
4. Hafif ama güçlü özellikler
- Minimum bağımlılık: Üçüncü taraf bağımlılıkların azaltılması sayesinde ikili dosya hafif olur ve derleme hızlanır.
- TLS ve UDP desteği: HTTP/gRPC gibi TLS trafiğinin yanı sıra, QUIC datagram backhaul üzerinden oyun sunucusu gibi UDP servisleri de kolayca açığa çıkarılabilir.
Başlarken
- GitHub deposu: https://github.com/gosuda/portalite
- Go paketi:
go get gosuda.org/portalite