Presentazione di Portalite: un client open source ultraleggero e SDK per aggiungere portali Ingress alle applicazioni
Presentando Portal in precedenza, abbiamo discusso delle problematiche del web moderno. Con l'avvento degli strumenti di codifica basati su intelligenza artificiale, chiunque è in grado di realizzare siti web, tuttavia il compito di renderli pubblici al mondo rimane confinato nell'ambito del monopolio delle grandi piattaforme e del cloud. Portal rappresenta un progetto volto a separare l'hosting web dalla creazione di contenuti, restituendo agli individui il diritto alla pubblicazione mediante il collegamento dei servizi locali personali al panorama globale attraverso un relay crittografato end-to-end.
Annuncio di Portalite
Oggi presento Portalite. Portalite costituisce un client Portal ultraleggero realizzato con dipendenze minime e un Go SDK.
Se Portal incarna la filosofia di "come trasformare il web", Portalite funge da adesivo più sottile per applicare tale filosofia alle applicazioni degli sviluppatori. Senza la necessità di configurazioni complesse del cloud o di pipeline di distribuzione, gli sviluppatori possono importare l'SDK e aggiungere poche righe di codice per inserire un ingress di portal nella propria applicazione. Nel momento stesso in cui l'app viene eseguita, un server precedentemente confinato alla dimensione locale si trasforma in un servizio pubblico accessibile da qualsiasi punto di Internet.
1. Ingress pubblico risolto in due righe di codice
Portalite supporta net.Listener, l'interfaccia standard di Go. Sostituendo semplicemente il listener nel codice dei framework web o dei server esistenti, il sistema entra immediatamente in funzione.
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: Non è richiesta alcuna impostazione per port forwarding, IP statici o regole di inbound del firewall.
- Compatibilità standard: Pienamente compatibile al 100% con qualsiasi libreria Go che utilizzi i
net.Listenerstandard, comehttp.Server,grpc.Server, Gin, Echo e Chi.
2. Il nucleo: Multi-Relay Binding simultaneo
Poiché la maggior parte degli strumenti di tunneling dipende da un singolo endpoint, l'interruzione di un server di relay compromette l'operatività del servizio. Portalite opera connettendosi simultaneamente a molteplici server di relay.
- Isolamento dei guasti senza interruzioni (Failover): Qualora parte dei relay subisca un arresto anomalo o un ritardo di rete, i relay rimanenti attivi continuano a convogliare il traffico attraverso il medesimo listener virtuale.
- Eliminazione del Single Point of Failure (SPOF): Il ciclo
Accept()dell'applicazione non si interrompe a meno che tutte le sessioni di relay non vengano disconnesse contemporaneamente. - Crittografia End-to-End (E2EE): Il traffico viene trasmesso in forma crittografata, impedendo al server di relay di ispezionare o alterare i dati.
- Riconnessione automatica e auto-riparazione (Self-Healing): In caso di interruzioni temporanee della rete o di riavvio del relay, le sessioni e i token vengono rinegoziati automaticamente in background per ripristinare la connessione.
3. Utilizzo immediato tramite un singolo comando CLI
Qualora non si utilizzi codice Go o si necessiti di un test rapido, è sufficiente passare il numero di porta tramite la 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
Subito dopo l'esecuzione del comando vengono generati gli URL multi-relay, rendendo il servizio immediatamente accessibile dall'esterno.
4. Funzionalità leggere ma potenti
- Dipendenze minime: L'eliminazione delle dipendenze di terze parti garantisce un eseguibile leggero e una compilazione rapida.
- Supporto TLS e UDP: Oltre al traffico TLS come HTTP e gRPC, è possibile esporre agevolmente servizi UDP come i server di gioco mediante il backhaul dei datagrammi QUIC.
Per iniziare
- Repository GitHub: https://github.com/gosuda/portalite
- Pacchetto Go:
go get gosuda.org/portalite