GoSuda

Apresentando o Portalite: Um cliente e SDK open-source ultraleve para adicionar portais do Ingress aos aplicativos

By Lemon Mint
views ...

Ao apresentar o Portal anteriormente, discutimos os problemas da web moderna. Com o surgimento de ferramentas de codificação baseadas em IA, qualquer pessoa tornou-se capaz de criar um site, mas o ato de publicá-lo para o mundo permanece restrito ao domínio exclusivo de grandes plataformas e da nuvem. O Portal é um projeto que separa a hospedagem web da criação de conteúdo, conectando serviços locais individuais ao redor do mundo por meio de relays criptografados de ponta a ponta, devolvendo assim aos indivíduos o direito de publicação.

Apresentando o Portalite

Hoje, anuncio o Portalite. O Portalite é um cliente Portal ultraleve construído com dependências mínimas e um SDK em Go.

Se o Portal representa a filosofia de "como o Portal mudará a web", o Portalite atua como a cola mais fina para aplicar essa filosofia aos aplicativos dos desenvolvedores. Sem a necessidade de configurações complexas de nuvem ou pipelines de deployment, os desenvolvedores podem importar o SDK e adicionar apenas algumas linhas de código para inserir um ingress do portal em sua própria aplicação. No momento em que o aplicativo é executado, um servidor que antes residia apenas localmente transforma-se em um serviço público acessível de qualquer lugar na internet.

1. Ingress Público Concluído com Duas Linhas de Código

O Portalite oferece suporte à interface padrão do Go, net.Listener. Ele opera instantaneamente ao substituir apenas o listener do código de servidor ou framework web existente.

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)
  • Sem configuração (Zero-config): Não há absolutamente nenhuma necessidade de configurar encaminhamento de porta (port forwarding), IPs estáticos ou regras de entrada de firewall.
  • Compatibilidade com Padrões: 100% compatível com todas as bibliotecas Go que utilizam o net.Listener padrão, tais como http.Server, grpc.Server, Gin, Echo, Chi, entre outras.

2. O Núcleo: Binding de Múltiplos Relays Simultâneos (Multi-Relay Binding)

Como a maioria das ferramentas de tunelamento depende de um único endpoint, se o servidor relay falhar, o serviço também será interrompido. O Portalite opera conectando-se simultaneamente a vários servidores relay.

  • Isolamento de Falhas Sem Interrupções (Failover): Mesmo que alguns dos relays fiquem inativos ou ocorra latência de rede, os relays restantes ativos continuam a direcionar o tráfego através do mesmo listener virtual.
  • Eliminação de Ponto Único de Falha (SPOF): O loop Accept() da aplicação não é interrompido, a menos que todas as sessões de relay sejam desconectadas simultaneamente.
  • Criptografia de Ponta a Ponta (E2EE): Uma vez que o tráfego é retransmitido de forma criptografada, os servidores relay não podem inspecionar ou adulterar os dados.
  • Reconexão Automática e Auto-recuperação (Self-Healing): Mesmo durante interrupções temporárias de rede ou reinicializações de relay, as sessões e os tokens são renegociados automaticamente em segundo plano para restabelecer a conexão.

3. Uso Imediato com um Único Comando CLI

Se você não estiver utilizando código Go ou se precisar de um teste rápido, basta fornecer o número da porta 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

Imediatamente após a execução do comando, URLs de múltiplos relays são emitidas e o serviço torna-se acessível externamente sem demora.

4. Recursos Leves, porém Poderosos

  • Dependências Mínimas: A eliminação de dependências de terceiros resulta em um binário leve e em uma compilação rápida.
  • Suporte a TLS e UDP: Além de tráfego TLS como HTTP/gRPC, serviços UDP, tais como servidores de jogos, podem ser expostos facilmente através do backhaul de datagramas QUIC.

Introdução