GoSuda

Portalite: SDK de Go ligero para Portal con vinculación multirelé y net.Listener estándar

By Lemon Mint views ...

Anteriormente, al presentar Portal, hablamos de los problemas de la web moderna. Con la llegada de las herramientas de programación asistida por IA, cualquiera puede crear un sitio web, pero la tarea de publicarlo en el mundo sigue siendo un ámbito monopolizado por las grandes plataformas y la nube. Portal separa el alojamiento de la web de la creación de contenido y, al conectar los servicios locales de una persona con todo el mundo mediante relés cifrados de extremo a extremo, devuelve a las personas el poder de publicar.

Presentamos Portalite

Hoy presento Portalite. Portalite es un cliente de Portal ultraligero, construido con dependencias mínimas, y también un SDK de Go.

Si Portal es la filosofía de "cómo transformar la web", Portalite es el adhesivo más fino que integra esa filosofía en las aplicaciones de los desarrolladores. Los desarrolladores pueden añadir un ingress de portal a su aplicación sin configuraciones complejas de nube ni canalizaciones de despliegue, simplemente importando el SDK y agregando unas pocas líneas de código. En el instante en que la aplicación se ejecuta, un servidor que solo existía en local se convierte en un servicio público accesible desde cualquier lugar de Internet.

1. Ingress público que se completa con dos líneas de código

Portalite es compatible con net.Listener, la interfaz estándar de Go. Basta con reemplazar el listener de un framework web existente o del código de un servidor para que funcione de inmediato.

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)
  • Sin configuración (Zero-config): no se requiere ninguna configuración de reenvío de puertos, IP fija ni reglas de entrada en el cortafuegos.
  • Compatibilidad estándar: es totalmente compatible con http.Server, grpc.Server, Gin, Echo, Chi y cualquier biblioteca de Go que utilice un net.Listener estándar.

2. Núcleo: vinculación simultánea a múltiples relés (Multi-Relay Binding)

La mayoría de las herramientas de túnel dependen de un único endpoint, por lo que, si el servidor de relé cae, el servicio también se interrumpe. Portalite opera conectándose simultáneamente a varios servidores de relé.

  • Aislamiento de fallos sin interrupciones (Failover): aunque algunos de los relés se caigan o sufran retrasos de red, los relés restantes que siguen activos continúan recibiendo tráfico a través del mismo listener virtual.
  • Eliminación del punto único de fallo (SPOF): mientras no se desconecten todas las sesiones de relé al mismo tiempo, el bucle Accept() de la aplicación no se detiene.
  • Cifrado de extremo a extremo (E2EE): el tráfico se retransmite cifrado, por lo que los servidores de relé no pueden examinar ni alterar los datos.
  • Reconexión automática y autorreparación (Self-Healing): incluso ante cortes temporales de red o reinicios de los relés, las sesiones y los tokens se renegocian automáticamente en segundo plano para restablecer la conexión.

3. Uso inmediato con un solo comando de CLI

Si no está escribiendo código en Go o necesita realizar pruebas rápidas, basta con pasar el número de puerto a 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

Al ejecutar el comando, se emiten de inmediato las URL de los múltiples relés y el servicio queda accesible desde el exterior en ese mismo momento.

4. Ligero pero potente

  • Dependencias mínimas: al prescindir de dependencias de terceros, el binario es ligero y la compilación es rápida.
  • Compatibilidad con TLS y UDP: además del tráfico TLS como HTTP/gRPC, también es posible exponer con facilidad servicios UDP, como servidores de juegos, mediante el backhaul de datagramas QUIC.

Primeros pasos