Portalite: lekki Portal Go SDK oparty na wielorelayowym wiązaniu i standardowym net.Listener

Wcześniej, przedstawiając Portal, poruszyliśmy problem współczesnej sieci. Wraz z pojawieniem się narzędzi do kodowania wspomaganego AI każdy może stworzyć stronę internetową, lecz samo jej udostępnienie światu nadal pozostaje domeną wielkich platform i chmur. Portal oddziela hostowanie w sieci od tworzenia treści i łączy lokalne usługi jednostki z całym światem za pośrednictwem szyfrowanego end-to-end przekaźnika, zwracając jednostkom prawo do udostępniania ich z powrotem w ich własne ręce.
Przedstawiamy Portalite
Dziś mam przyjemność zaprezentować Portalite. Portalite to ultralekki klient Portal oraz SDK dla Go, zbudowany z minimalną liczbą zależności.
Jeśli Portal jest filozofią tego, jak zmienić sieć, to Portalite jest najcieńszym spoiwem łączącym tę filozofię z aplikacjami deweloperów. Deweloper nie potrzebuje skomplikowanej konfiguracji chmury ani potoku wdrożeniowego: wystarczy zaimportować SDK i dodać kilka linijek kodu, aby umieścić portalowy ingress w swojej aplikacji. Gdy aplikacja zostaje uruchomiona, serwer, który dotąd żył wyłącznie lokalnie, staje się publicznie dostępną usługą, osiągalną z dowolnego miejsca w Internecie.
1. Publiczny Ingress gotowy w dwóch linijkach kodu
Portalite obsługuje net.Listener, standardowy interfejs Go. Wystarczy zastąpić listener w istniejącym frameworku webowym lub kodzie serwera, aby rozwiązanie zadziałało natychmiast.
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)
- Zero-config: nie są wymagane żadne przekierowania portów, stałe adresy IP ani reguły przychodzące zapory sieciowej.
- Zgodność ze standardem: w pełni kompatybilny z
http.Server,grpc.Server, Gin, Echo, Chi oraz każdą biblioteką Go korzystającą ze standardowegonet.Listener.
2. Kluczowa cecha: jednoczesne wiązanie z wieloma przekaźnikami (Multi-Relay Binding)
Większość narzędzi tunelujących opiera się na pojedynczym punkcie końcowym, dlatego awaria serwera przekaźnikowego powoduje również przerwanie usługi. Portalite działa, łącząc się jednocześnie z wieloma serwerami przekaźnikowymi.
- Bezprzerwowa izolacja awarii (Failover): jeśli część przekaźników przestanie działać lub wystąpią opóźnienia sieciowe, pozostałe aktywne przekaźniki nadal przesyłają ruch do tego samego wirtualnego listenera.
- Eliminacja pojedynczego punktu awarii (SPOF): dopóki wszystkie sesje przekaźników nie zostaną jednocześnie przerwane, pętla
Accept()aplikacji nie zostaje zatrzymana. - Szyfrowanie end-to-end (E2EE): ruch jest szyfrowany podczas przekazywania, więc serwery przekaźnikowe nie mogą odczytać ani zmodyfikować danych.
- Automatyczne ponowne połączenie i samonaprawa (Self-Healing): nawet w przypadku chwilowego zerwania sieci lub ponownego uruchomienia przekaźnika, sesje i tokeny są automatycznie renegocjowane w tle, co przywraca połączenie.
3. Natychmiastowe użycie jednym poleceniem CLI
Jeśli nie tworzysz kodu w Go lub potrzebujesz szybkiego testu, wystarczy przekazać numer portu do 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
Natychmiast po uruchomieniu polecenia zostają wygenerowane adresy URL z wieloma przekaźnikami i usługa staje się dostępna z zewnątrz.
4. Lekkość i potężne funkcje
- Minimalna liczba zależności: dzięki ograniczeniu zewnętrznych zależności plik binarny jest lekki, a kompilacja szybka.
- Obsługa TLS i UDP: oprócz ruchu TLS, takiego jak HTTP/gRPC, można także łatwo udostępniać usługi UDP, na przykład serwery gier, za pośrednictwem tunelowania datagramów QUIC.
Rozpoczęcie pracy
- Repozytorium GitHub: https://github.com/gosuda/portalite
- Pakiet Go:
go get gosuda.org/portalite