Apresentando o Portalite: Um cliente e SDK open-source ultraleve para adicionar portais do Ingress aos aplicativos
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.Listenerpadrão, tais comohttp.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
- Repositório no GitHub: https://github.com/gosuda/portalite
- Pacote Go:
go get gosuda.org/portalite