Wir präsentieren Portalite: Einen ultraleichten, quelloffenen Client sowie ein SDK zur Integration von Portal Ingress in Ihre Applikation
Portal wurde bereits vorgestellt, und bei dieser Gelegenheit wurde die Problematik des modernen Webs erörtert. Durch das Aufkommen von AI-Codierungswerkzeugen ist es zwar jedem möglich, Websites zu erstellen, jedoch verbleibt die eigentliche Veröffentlichung in der Welt nach wie vor im exklusiven Bereich von Megaplattformen und Clouds. Portal ist ein Projekt, das das Hosting des Webs von der Inhaltserstellung trennt und die Veröffentlichungsrechte an das Individuum zurückgibt, indem persönliche lokale Dienste über eine end-to-end-verschlüsselte Relay-Verbindung weltweit vernetzt werden.
Wir stellen Portalite vor
Heute kündige ich Portalite an. Portalite ist ein ultraleichter Portal-Client und Go-SDK mit minimalen Abhängigkeiten.
Wenn Portal eine Philosophie darstellt, die fragt, "wie das Web verändert werden soll", so ist Portalite der schmalste Klebstoff, um diese Philosophie in die Anwendungen von Entwicklern zu integrieren. Ohne komplexe Cloud-Konfigurationen oder Deployment-Pipelines können Entwickler das SDK importieren und durch das Hinzufügen von nur wenigen Zeilen Code eine Portal-Ingress in ihre eigene App einbetten. In dem Moment, in dem die App ausgeführt wird, wird aus einem Server, der zuvor nur lokal existierte, ein öffentlich zugänglicher Dienst, der von jedem Ort des Internets aus erreichbar ist.
1. Öffentliche Ingress mit zwei Zeilen Code
Portalite unterstützt Go-Standard-Interfaces wie net.Listener. Durch den bloßen Austausch des Listeners in bestehenden Web-Frameworks oder Server-Codes funktioniert es unmittelbar.
1// Identität für den Dienst generieren
2identity, err := portalite.GenerateIdentity("my-service")
3
4// Lokalen Dienst über das Portal-Netzwerk exponieren
5listener, err := portalite.Expose(ctx, portalite.ExposeConfig{
6 Relays: portalite.DefaultRelays(),
7 Identity: identity,
8})
9
10// HTTP-Server mit dem Portal-Listener starten
11http.Serve(listener, handler)
- Zero-config: Es ist absolut keine Konfiguration von Port-Forwarding, statischen IPs oder Firewall-Inbound-Regeln erforderlich.
- Standardkonformität: 100-prozentige Kompatibilität mit allen Go-Bibliotheken, die standardmäßige
net.Listenerverwenden, wiehttp.Server,grpc.Server, Gin, Echo, Chi und weiteren.
2. Kernkonzept: Multi-Relay Binding (Multi-Relay-Bindung)
Da die meisten Tunnelling-Tools von einem einzigen Endpoint abhängen, bricht der Dienst zusammen, sobald der Relay-Server ausfällt. Portalite arbeitet, indem es gleichzeitig mit mehreren Relay-Servern verbunden ist.
- Unterbrechungsfreie Fehlertrennung (Failover): Selbst wenn einige der mehreren Relays ausfallen oder Netzwerkverzögerungen auftreten, leiten die verbleibenden aktiven Relays den Traffic über denselben virtuellen Listener kontinuierlich weiter.
- Beseitigung des Single Point of Failure (SPOF): Solange nicht alle Relay-Sessionen gleichzeitig getrennt werden, wird die
Accept()-Schleife der Anwendung nicht unterbrochen. - End-to-End-Verschlüsselung (E2EE): Da der Traffic verschlüsselt weitergeleitet wird, können die Relay-Server die Daten weder einsehen noch manipulieren.
- Automatische Wiederverbindung und Self-Healing: Selbst bei vorübergehenden Netzwerkunterbrechungen oder Neustarts von Relays werden Sessionen und Token im Hintergrund automatisch neu ausgehandelt, um die Verbindung wiederherzustellen.
3. Sofort einsatzbereit mit einem einzigen CLI-Befehl
Falls es sich nicht um Go-Code handelt oder ein schneller Test erforderlich ist, genügt es, die Portnummer an das CLI zu übergeben.
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
Unmittelbar nach der Ausführung des Befehls werden URLs für mehrere Relays ausgestellt, wodurch der Dienst sofort von extern zugänglich wird.
4. Leichtgewichtig und dennoch leistungsstark
- Minimale Abhängigkeiten: Durch den Verzicht auf Drittanbieter-Abhängigkeiten ist das Binary leichtgewichtig und der Build-Vorgang schnell.
- TLS- & UDP-Unterstützung: Neben TLS-Traffic wie HTTP/gRPC können auch UDP-Dienste wie Game-Server über QUIC-Datagram-Backhauls mühelos exponiert werden.
Erste Schritte
- GitHub-Repository: https://github.com/gosuda/portalite
- Go-Paket:
go get gosuda.org/portalite