GoSuda

Vi præsenterer Portalite: En ultralet open-source klient og SDK til integration af Portal Ingress i applikationer

By Lemon Mint
views ...

Idet vi tidligere introducerede Portal, diskuterede vi udfordringerne ved det moderne web. Med fremkomsten af AI-kodningsværktøjer er det blevet muligt for enhver at skabe en webside, men selve opgaven med at offentliggøre den for verden forbliver fortsat et monopoliseret område under store platforme og cloud-infrastrukturer. Portal er et projekt, der adskiller webhosting fra indholdsskabelse og giver offentliggørelsesretten tilbage til individet ved at forbinde personlige lokale tjenester til hele verden via end-to-end-krypterede relæer.

Vi præsenterer Portalite

I dag præsenterer jeg Portalite. Portalite er en ultralet Portal-klient og Go SDK skabt med minimale afhængigheder.

Hvis Portal repræsenterer filosofien om, "hvordan webrevolutionen vil finde sted", udgør Portalite den tyndeste klæber, der knytter denne filosofi til udviklerens applikation. Uden behov for kompleks cloud-konfiguration eller udrulningsrørledninger kan udviklere blot importere SDK'en og tilføje nogle få linjer kode for at integrere en portal-ingress i deres egen applikation. I det øjeblik applikationen eksekveres, forvandles en server, som hidtil udelukkende har eksisteret lokalt, til en offentligt tilgængelig tjeneste hvor som helst på internettet.

1. Offentlig Ingress afsluttet med to linjer kode

Portalite understøtter Go's standardgrænseflade net.Listener. Man skal blot udskifte lytteren i eksisterende web-frameworks eller serverkode, hvorefter det fungerer øjeblikkeligt.

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)
  • Nul-konfiguration (Zero-config): Port-forwarding, statiske IP-adresser og konfiguration af firewall-indgående regler er fuldstændig unødvendige.
  • Standardkompatibilitet: 100 % kompatibel med alle Go-biblioteker, der anvender standard net.Listener, såsom http.Server, grpc.Server, Gin, Echo og Chi.

2. Kernen: Samtidig binding af flere relæer (Multi-Relay Binding)

Da de fleste tunelleringsværktøjer er afhængige af et enkelt slutpunkt, afbrydes tjenesten også, hvis relæserveren går ned. Portalite fungerer ved at være forbundet til flere relæservere samtidigt.

  • Uafbrudt fejlisolering (Failover): Selv hvis nogle af de mange relæer går ned eller oplever netværksforsinkelse, fortsætter de resterende aktive relæer med at dirigere trafik ind gennem den samme virtuelle lytter.
  • Fjernelse af enkeltstående fejlpunkter (SPOF): Medmindre alle relæsessioner afbrydes på samme tid, afbrydes applikationens Accept()-løkke ikke.
  • End-to-end-kryptering (E2EE): Da trafikken videresendes i krypteret form, har relæserveren ikke mulighed for at inspicere eller modificere dataene.
  • Automatisk genforbindelse og selvhelbredelse (Self-Healing): Selv ved midlertidige netværksafbrydelser eller genstart af relæer genforhandles sessioner og tokens automatisk i baggrunden for at genoprette forbindelsen.

3. Øjeblikkelig anvendelse med en enkelt CLI-kommando

Hvis der ikke er tale om Go-kode, eller hvis der er behov for en hurtig test, kan man blot overføre portnummeret via 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

Umiddelbart efter udførelsen af kommandoen udstedes URL-adresser til flere relæer, og tjenesten gøres øjeblikkeligt tilgængelig eksternt.

4. Letvægts- og kraftfulde funktioner

  • Minimale afhængigheder: Tredjepartsafhængigheder er reduceret, hvilket gør binærfilen let og byggeprocessen hurtig.
  • TLS- og UDP-understøttelse: Ud over TLS-trafik såsom HTTP/gRPC er det muligt ubesværet at eksponere UDP-tjenester såsom spilservere via QUIC-datagram-backhaul.

Kom i gang