Portalite ile Tanışın: Uygulamalara Portal Ingress eklemek için ultra hafif, açık kaynaklı bir client ve SDK
Portal projesini tanıtırken modern webin problemlerini ele almıştık. AI kodlama araçlarının ortaya çıkmasıyla birlikte herkes web sitesi oluşturabilir hale geldi ancak bu siteleri dünyaya sunma süreci hala büyük platformların ve bulut sağlayıcılarının tekelinde kalmaya devam ediyor. Portal, web hosting ve içerik oluşturmayı birbirinden ayıran ve kişisel yerel servisleri uçtan uca şifrelenmiş (end-to-end encrypted) bir röle (relay) aracılığıyla tüm dünyaya bağlayarak yayınlama yetkisini yeniden bireylere veren bir projedir.
Portalite'yi Sunuyoruz
Bugün Portalite projesini duyuruyorum. Portalite, minimum bağımlılıkla tasarlanmış ultra hafif bir Portal istemcisi ve Go SDK'sıdır.
Portal "web'i nasıl değiştireceğiz" sorusuna verilen bir felsefe ise, Portalite bu felsefenin bir geliştiricinin uygulamasına entegre edilmesini sağlayan en ince katmandır. Geliştiriciler, karmaşık bulut yapılandırmalarına veya dağıtım (deployment) süreçlerine ihtiyaç duymadan SDK'yı içe aktarabilir (import) ve yalnızca birkaç satır kod ekleyerek kendi uygulamalarına bir portal ingress ekleyebilirler. Uygulamanın çalıştırıldığı anda, yalnızca yerelde varlığını sürdüren sunucu, internetin herhangi bir yerinden erişilebilen herkese açık (public) bir servise dönüşür.
1. İki Satır Kodla Tamamlanan Public Ingress
Portalite, Go dilinin standart arayüzü olan net.Listener bileşenini desteklemektedir. Mevcut web çatıları (framework) veya sunucu kodlarındaki dinleyici (listener) mekanizmasını değiştirmek anında çalışması için yeterlidir.
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)
- Yapılandırmasız (Zero-config): Port yönlendirme (port forwarding), statik IP ve güvenlik duvarı (firewall) gelen (inbound) kural yapılandırmalarına hiçbir şekilde gerek yoktur.
- Standart Uyumluluğu:
http.Server,grpc.Server, Gin, Echo, Chi gibi standartnet.Listeneryapısını kullanan tüm Go kütüphaneleri ile %100 uyumludur.
2. Temel Özellik: Çoklu Röle Eşzamanlı Bağlantısı (Multi-Relay Binding)
Tünelleme (tunneling) araçlarının büyük bir kısmı tek bir uç noktaya (endpoint) güvendiği için röle sunucusu çöktüğü anda servis de kesintiye uğrar. Portalite ise aynı anda birden fazla röle sunucusuna bağlanarak çalışır.
- Kesintisiz Hata İzolasyonu (Failover): Birden fazla röleden bazıları devre dışı kalsa veya ağ gecikmesi yaşansa bile ayakta kalan diğer röleler aynı sanal dinleyici üzerinden trafik akışını sürdürmeye devam eder.
- Tek Noktadan Hata (SPOF) Durumunun Ortadan Kaldırılması: Tüm röle oturumları aynı anda kopmadığı sürece uygulamanın
Accept()döngüsü kesintiye uğramaz. - Uçtan Uca Şifreleme (E2EE): Trafik şifrelenmiş olarak aktarıldığından röle sunucuları verileri inceleyemez veya değiştireemez.
- Otomatik Yeniden Bağlanma ve Kendi Kendini İyileştirme (Self-Healing): Geçici ağ kesintilerinde veya röle yeniden başlatmalarında dahi arka planda oturumları ve token değerlerini otomatik olarak yeniden müzakere ederek bağlantıyı kurtarır.
3. Komut Satırından (CLI) Tek Komutla Anında Kullanım
Go diliyle geliştirme yapmıyorsanız veya hızlı bir test gerçekleştirmek istiyorsanız CLI aracılığıyla yalnızca port numarasını belirtmeniz 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
Komutun çalıştırılmasıyla birlikte çoklu röle URL adresleri anında oluşturulur ve dış dünyadan erişilebilir duruma gelir.
4. Hafif Ama Güçlü Yetenekler
- Minimum Bağımlılık: Üçüncü taraf bağımlılıkların en aza indirilmesi sayesinde ikili dosya (binary) boyutu küçüktür ve derleme (build) süreci hızlıdır.
- TLS ve UDP Desteği: HTTP/gRPC gibi TLS trafiğinin yanı sıra QUIC datagram backhaul mekanizması sayesinde oyun sunucuları gibi UDP servisleri de zahmetsizce dış dünyaya açılabilir.
Başlarken
- GitHub Deposu: https://github.com/gosuda/portalite
- Go Paketi:
go get gosuda.org/portalite