Przedstawiamy Portalite: ultralekki, otwartoźródłowy klient oraz SDK do implementacji portali Ingress w aplikacji
Portal przedstawialiśmy już wcześniej, omawiając problemy współczesnej sieci Web. Wraz z pojawieniem się narzędzi do kodowania wspomaganych przez AI każdy może stworzyć witrynę internetową, jednak jej publikacja w sieci pozostaje w dalszym ciągu domeną wielkich platform oraz chmury. Portal to projekt, który oddaje prawo do publikacji w ręce jednostek poprzez oddzielenie hostingu sieciowego od tworzenia treści oraz łączenie lokalnych usług użytkownika z całym światem za pomocą szyfrowanych transmisji typu end-to-end.
Przedstawiamy Portalite
Dzisiaj ogłaszam wydanie Portalite. Portalite to ultralekki klient Portal o minimalnych zależnościach oraz SDK języka Go.
O ile Portal stanowi filozofię odpowiadającą na pytanie, "w jaki sposób zmieni ona sieć Web", o tyle Portalite jest najcieńszą warstwą łączącą tę filozofię z aplikacją programisty. Bez skomplikowanej konfiguracji chmury czy rurociągów wdrażania, programista może zaimportować SDK i dodać zaledwie kilka linii kodu, aby wdrożyć ingress portalu we własnej aplikacji. W momencie uruchomienia aplikacji serwer, który istniał dotąd wyłącznie lokalnie, staje się publiczną usługą dostępną z każdego miejsca w internecie.
1. Publiczny Ingress w dwóch linijkach kodu
Portalite obsługuje standardowy interfejs języka Go net.Listener. Wystarczy wymienić nasłuchiwacz (listener) w istniejącym szkielecie sieciowym lub kodzie serwera, aby natychmiast rozpocząć działanie.
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)
- Bezkonfiguracyjność (Zero-config): Przekierowanie portów, stałe adresy IP oraz konfiguracja reguł zapory sieciowej dla ruchu przychodzącego nie są w żaden sposób wymagane.
- Zgodność ze standardami: Pełna, 100-procentowa kompatybilność ze wszystkimi bibliotekami języka Go wykorzystującymi standardowy
net.Listener, takimi jakhttp.Server,grpc.Server, Gin, Echo czy Chi.
2. Kluczowy element: Jednoczesne wiązanie wielu przekaźników (Multi-Relay Binding)
Większość narzędzi do tworzenia tuneli polega na pojedynczym punkcie końcowym, co sprawia, że awaria serwera przekaźnika powoduje przerwę w świadczeniu usługi. Portalite działa poprzez jednoczesne połączenie z wieloma serwerami przekaźnikowymi.
- Bezawaryjna izolacja błędów (Failover): Nawet w przypadku awarii niektórych przekaźników lub wystąpienia opóźnień sieciowych, pozostałe działające przekaźniki nadal kierują ruch przez ten sam wirtualny nasłuchiwacz.
- Eliminacja pojedynczego punktu awarii (SPOF): Pętla
Accept()aplikacji nie zostanie przerwana, dopóki wszystkie sesje przekaźnikowe nie zostaną przerwane w tym samym czasie. - Szyfrowanie end-to-end (E2EE): Ruch jest przesyłany w formie zaszyfrowanej, co uniemożliwia serwerom przekaźnikowym wgląd w dane lub ich modyfikację.
- Automatyczne ponowne łączenie oraz autoleczenie (Self-Healing): W przypadku tymczasowego odcięcia sieci lub ponownego uruchomienia przekaźnika, sesje i tokeny są automatycznie negocjowane w tle w celu przywrócenia połączenia.
3. Natychmiastowe użycie za pomocą jednego polecenia CLI
Jeżeli nie korzystasz z języka Go lub potrzebujesz szybkiego testu, wystarczy przekazać numer portu za pomocą interfejsu CLI.
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
Adresy URL wielu przekaźników są generowane natychmiast po wykonaniu polecenia, co pozwala na natychmiastowy dostęp z zewnątrz.
4. Lekkość połączona z potężnymi możliwościami
- Minimalne zależności: Ograniczenie zewnętrznych zależności sprawia, że plik binarny jest lekki, a proces kompilacji przebiega szybko.
- Obsługa TLS oraz UDP: Z łatwością można udostępniać nie tylko ruch TLS, taki jak HTTP czy gRPC, lecz także usługi UDP, w tym serwery gier, za pośrednictwem protokołu zaplecza datagramów QUIC.
Rozpoczęcie pracy
- Repozytorium GitHub: https://github.com/gosuda/portalite
- Pakiet Go:
go get gosuda.org/portalite