GoSuda

Íme a Portalite: egy pehelysúlyú, nyílt forráskódú Client és SDK, amely portálokat ad az Ingress alkalmazáshoz

By Lemon Mint
views ...

Portal korábbi bemutatásakor a modern web problémáiról értekeztünk. Az AI kódolási eszközök megjelenésével bárki képes weboldalakat készíteni, ám maga a nyilvánosság elé tárásuk továbbra is a hatalmas platformok és a felhő monopóliumának területén marad. A Portal egy olyan projekt, amely elválasztja a web hosztolását a tartalomkészítéstől, és a végpontok között titkosított (end-to-end encrypted) relay-n keresztül a világra kapcsolja a személyes lokális szolgáltatásokat, ezáltal visszaadva az egyéneknek a nyilvánosságra hozatal jogát.

Bemutatkozik a Portalite

Ma bemutatom a Portalite-ot. A Portalite minimális függőséggel megalkotott ultrakönnyű Portal kliens és Go SDK.

Ha a Portal a "Hogyan változtassuk meg a webet?" filozófiáját képviseli, akkor a Portalite a legvékonyabb ragasztóanyag, amely ezt a filozófiát a fejlesztők alkalmazásaihoz kapcsolja. A fejlesztők bonyolult felhőbeli beállítások vagy deployment pipeline-ok nélkül, az SDK importálásával és néhány sor kód hozzáadásával beilleszthetik a portal ingress-t a saját alkalmazásukba. Az alkalmazás futtatásának pillanatában a korábban kizárólag lokálisan létező szerver az internet bárely pontjáról elérhető publikus szolgáltatássá válik.

1. Publikus Ingress mindössze két sor kódban

A Portalite támogatja a Go standard interfészét, a net.Listener-t. Elegendő a meglévő webes keretrendszer vagy szerverkód listenerét lecserélni, és az azonnal működésbe lép.

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 (Beállításmentes): Porttovábbítás, statikus IP-cím vagy tűzfal bejövő (inbound) szabályainak megadása semmilyen formában nem szükséges.
  • Standard-kompatibilis: 100%-os kompatibilitást mutat minden olyan Go könyvtárral, amely standard net.Listener-t használ, mint például az http.Server, a grpc.Server, a Gin, az Echo vagy a Chi.

2. A lényeg: Többszörös relay egyidejű kötése (Multi-Relay Binding)

A legtöbb tunneling eszköz egyetlen végpontra támaszkodik, így amennyiben a relay szerver leáll, a szolgáltatás is megszakad. A Portalite egyszerre több relay szerverhez kapcsolódva működik.

  • Leállásmentes hibatűrés (Failover): Amennyiben a relay-k közül néhány leáll vagy hálózati késés (latency) lép fel, a fennmaradó aktív relay-k továbbra is bevezetik a forgalmat ugyanazon a virtuális listeneren keresztül.
  • Egyszerű meghibásodási pont (SPOF) megszüntetése: Az alkalmazás Accept() ciklusa nem szakad meg mindaddig, amíg az összes relay-munkamenet (session) egyszerre meg nem szűnik.
  • Végpontok közötti titkosítás (E2EE): Mivel a forgalom titkosítva továbbítódik, a relay szerverek képtelenek betekinteni az adatokba vagy módosítani azokat.
  • Automatikus újracsatlakozás és öngyógyulás (Self-Healing): Ideiglenes hálózati megszakadás vagy a relay újraindulása esetén is a háttérben automatikusan újratárgyalja a munkameneteket és a tokeneket a kapcsolat helyreállítása érdekében.

3. Azonnali használat egyetlen CLI paranccsal

Amennyiben nem Go kódról van szó, vagy csupán gyors tesztelésre van szükség, elegendő a portszámot átadni a CLI-nek.

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

A parancs futtatását követően azonnal generálódnak a többszörös relay URL-ek, és a szolgáltatás nyomban külsőleg elérhető állapotba kerül.

4. Könnyű, mégis erőteljes funkciók

  • Minimális függőség: A harmadik féltől származó függőségek minimalizálásának köszönhetően a bináris állomány könnyű, a buildelés pedig gyors.
  • TLS & UDP támogatás: Az olyan TLS forgalmak mellett, mint az HTTP vagy a gRPC, a QUIC datagram backhaul révén az olyan UDP alapú szolgáltatások is roppant egyszerűen publikussá tehetők, mint például a játékszerverek.

Kezdő lépések