GoSuda

Представяне на Portalite: ултралек софтуерен клиент с отворен код и SDK за добавяне на портали към приложения Ingress

By Lemon Mint
views ...

Когато представихме Portal, обсъдихме проблемите на съвременния уеб. Възходът на AI кодинг инструментите позволи на всеки да създава уебсайтове, но тяхното публикуване в публичното пространство все още остава в сферата на монопола на големите платформи и облачните инфраструктури. Portal е проект, който отделя хостинга на уеб съдържанието от неговото създаване и връща правото на публикуване обратно на отделния индивид, като свързва локалните лични услуги с целия свят чрез енд-ту-енд (end-to-end) криптирани релета.

Представяме ви Portalite

Днес представям Portalite. Portalite е ултралек Portal клиент и Go SDK, създаден с минимални зависимости.

Ако Portal представлява философията за това "как да променим уеб пространството", то Portalite е най-тънкото лепило, което прикрепва тази философия към приложението на разработчика. Без сложни облачни настройки или пайплайни за деплоймънт, разработчиците могат да импортират SDK-то и да добавят само няколко реда код, за да интегрират портален ingress в своето приложение. В момента, в който приложението се стартира, сървърът, който преди това е съществувал само локално, се превръща в достъпна публична услуга от всяка точка на интернет.

1. Публичен Ingress само с два реда код

Portalite поддържа стандартния интерфейс за Go net.Listener. Необходимо е единствено да замените лиснъра (listener) в съществуващия си уеб фреймуърк или сървърен код и той започва да функционира незабавно.

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)
  • Без конфигуриране (Zero-config): Не се изискват port forwarding, статични IP адреси или каквито и да било настройки на входящи защитни стени (firewall inbound rules).
  • Съвместимост със стандартите: 100% съвместимост с всички Go библиотеки, използващи стандартни net.Listener, като http.Server, grpc.Server, Gin, Echo, Chi и други.

2. Основна характеристика: Мултиреле обвързване (Multi-Relay Binding)

Повечето инструменти за тунелиране разчитат на един единствен краен пункт (endpoint), което означава, че ако реле сървърът спре, услугата също прекъсва. Portalite работи, като се свързва едновременно към множество реле сървъри.

  • Изолация на повреди без прекъсване (Failover): Дори ако някои от релетата се сринат или възникне мрежово забавяне, останалите работещи релета продължават да насочват трафика през същия виртуален лиснър.
  • Елиминиране на единичната точка на откази (SPOF): Accept() цикълът на приложението не прекъсва, освен ако всички реле сесии не бъдат прекъснати едновременно.
  • Енд-ту-енд криптиране (E2EE): Трафикът се предава криптиран, така че реле сървърите не могат да преглеждат или променят данните.
  • Автоматично свързване и самовъзстановяване (Self-Healing): В случай на временни мрежови прекъсвания или рестартиране на релетата, сесиите и токените се договарят автоматично във фонов режим за възстановяване на връзката.

3. Незабавна употреба с една CLI команда

Ако не използвате Go код или се нуждаете от бърз тест, можете просто да подадете номера на порта чрез 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

Веднага след изпълнението на командата се генерират URL адреси за множество релета и услугата става достъпна от външната мрежа.

4. Леки, но мощни функции

  • Минимални зависимости: Премахнати са външните зависимости (third-party dependencies), което прави бинарния файл лек, а компилацията бърза.
  • TLS и UDP поддръжка: Наред с TLS трафика като HTTP/gRPC, лесно могат да бъдат изложени и UDP услуги като например игрови сървъри, използвайки QUIC datagram backhaul.

Начало