Portalite : SDK Go léger pour Portal, reposant sur des liaisons multi-relais et un net.Listener standard

Plus tôt, en présentant Portal, nous avons abordé les problèmes du web moderne. Avec l'arrivée des outils de codage assistés par l'IA, n'importe qui peut désormais créer un site web, mais la mise en ligne de celui-ci demeure pourtant un domaine réservé aux grandes plateformes et aux fournisseurs de cloud. Portal sépare l'hébergement du web de la production de contenu et, en reliant les services locaux d'un individu au reste du monde via un relais chiffré de bout en bout, redonne à chacun le pouvoir de publier.
Nous présentons Portalite
Aujourd'hui, j'ai le plaisir de présenter Portalite. Portalite est un client Portal ultra-léger, conçu avec un minimum de dépendances, ainsi qu'un SDK Go.
Si Portal représente la philosophie selon laquelle « il faut transformer le web », Portalite en est la colle la plus fine, celle qui intègre cette philosophie dans les applications des développeurs. Sans configuration cloud complexe ni pipeline de déploiement, les développeurs peuvent importer le SDK, ajouter quelques lignes de code et doter leur application d'un ingress Portal. Dès que l'application s'exécute, le serveur qui n'existait jusqu'alors qu'en local devient un service public accessible depuis n'importe où sur Internet.
1. Un Ingress public en deux lignes de code
Portalite prend en charge l'interface standard de Go, net.Listener. Il suffit de remplacer le listener existant dans un framework web ou un code serveur pour que cela fonctionne immédiatement.
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)
- Zéro configuration (Zero-config) : aucune redirection de port, adresse IP fixe ni règle de pare-feu entrante n'est nécessaire.
- Compatibilité standard : compatibilité totale avec
http.Server,grpc.Server, Gin, Echo, Chi et toutes les bibliothèques Go utilisant lenet.Listenerstandard.
2. Point central : liaison simultanée à plusieurs relais (Multi-Relay Binding)
La plupart des outils de tunnelisation reposent sur un point de terminaison unique : lorsque le serveur relais tombe, le service s'interrompt avec lui. Portalite fonctionne en se connectant simultanément à plusieurs serveurs relais.
- Isolation des pannes sans interruption (Failover) : si certains relais tombent en panne ou subissent une latence réseau, les autres relais encore actifs continuent de recevoir le trafic via le même listener virtuel.
- Suppression du point de défaillance unique (SPOF) : tant que toutes les sessions relais ne sont pas coupées simultanément, la boucle
Accept()de l'application ne s'interrompt pas. - Chiffrement de bout en bout (E2EE) : le trafic est chiffré pendant son relais, de sorte que les serveurs relais ne peuvent ni consulter ni altérer les données.
- Reconnexion automatique et auto-réparation (Self-Healing) : en cas de coupure réseau temporaire ou de redémarrage d'un relais, les sessions et les jetons sont renégociés automatiquement en arrière-plan afin de rétablir la connexion.
3. Utilisation immédiate en une seule commande CLI
Si vous n'utilisez pas de code Go ou si vous avez besoin d'un test rapide, il suffit de transmettre le numéro de port à 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
Dès l'exécution de la commande, des URL de plusieurs relais sont émises et le service devient immédiatement accessible de l'extérieur.
4. Léger mais puissant
- Dépendances minimales : en réduisant les dépendances tierces, le binaire est plus léger et la compilation plus rapide.
- Prise en charge de TLS et UDP : outre le trafic TLS tel que HTTP/gRPC, il est également possible d'exposer facilement des services UDP, comme des serveurs de jeux, grâce au backhaul de datagrammes QUIC.
Pour commencer
- Dépôt GitHub : https://github.com/gosuda/portalite
- Package Go :
go get gosuda.org/portalite