GoSuda

Presentamos Portalite: un cliente y SDK de código abierto ultraligero para incorporar Portal Ingress en aplicaciones

By Lemon Mint
views ...

Al presentar previamente Portal, abordamos los problemas de la web moderna. Con la aparición de las herramientas de codificación basadas en IA, cualquier persona puede crear un sitio web, pero su publicación al mundo sigue perteneciendo al ámbito exclusivo de las grandes plataformas y la nube. Portal es un proyecto que separa el alojamiento web de la creación de contenido y devuelve el derecho de publicación al individuo al conectar servicios locales personales a todo el mundo a través de un relé cifrado de extremo a extremo.

Anuncio de Portalite

Hoy anuncio Portalite. Portalite es un cliente de Portal ultraligero y SDK de Go creado con dependencias mínimas.

Si Portal representa la filosofía de "cómo cambiará la web", Portalite es el adhesivo más delgado para aplicar dicha filosofía a las aplicaciones de los desarrolladores. Sin configuraciones complejas en la nube ni canalizaciones de despliegue, los desarrolladores pueden importar el SDK y añadir tan solo unas pocas líneas de código para integrar un portal ingress en su propia aplicación. En el momento en que se ejecuta la aplicación, el servidor que antes existía únicamente a nivel local se convierte en un servicio público accesible desde cualquier lugar de internet.

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

Portalite es compatible con net.Listener, la interfaz estándar de Go. Funciona de manera inmediata con solo reemplazar el listener del código de servidor o de los frameworks web existentes.

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 en absoluto reenvío de puertos, IP estáticas ni configuración de reglas de entrada en el cortafuegos.
  • Compatible con estándares: 100% compatible con cualquier librería de Go que utilice un net.Listener estándar, como http.Server, grpc.Server, Gin, Echo, Chi, entre otras.

2. Núcleo: Enlace simultáneo de múltiples relés (Multi-Relay Binding)

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

  • Aislamiento de fallos sin interrupciones (Failover): Incluso si algunos de los múltiples relés caen o experimentan latencia de red, los relés restantes que siguen activos continúan introduciendo tráfico a través del mismo listener virtual.
  • Eliminación del punto único de fallo (SPOF): A menos que todas las sesiones de relé se desconecten simultáneamente, el bucle Accept() de la aplicación no se interrumpe.
  • Cifrado de extremo a extremo (E2EE): Como el tráfico se transmite cifrado, los servidores de relé no pueden inspeccionar ni alterar los datos.
  • Reconexión automática y autorreparación (Self-Healing): Incluso durante cortes temporales de red o reinicios de relés, las sesiones y los tokens se renegocian automáticamente en segundo plano para restaurar la conexión.

3. Uso inmediato con un solo comando de CLI

Si no utiliza código de Go o necesita realizar una prueba rápida, basta con pasar el número de puerto a través de 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

Tan pronto como se ejecuta el comando, se emiten URLs de múltiples relés y el servicio queda accesible desde el exterior de forma instantánea.

4. Funcionalidades ligeras pero potentes

  • Dependencias mínimas: Al prescindir de dependencias de terceros, el binario es ligero y la compilación es rápida.
  • Soporte para TLS y UDP: Además de tráfico TLS como HTTP/gRPC, es posible exponer fácilmente servicios UDP como servidores de juegos mediante el backhaul de datagramas QUIC.

Comenzar