GoSuda

Представляем Portalite: сверхлегкий клиент с открытым исходным кодом и SDK для добавления порталов Ingress в ваши приложения

By Lemon Mint
views ...

Ранее, представляя Portal, мы говорили о проблемах современного интернета. С появлением инструментов искусственного интеллекта для написания кода создавать веб-сайты может каждый, однако задача их публикации в сети по-прежнему остается в ведении крупных платформ и облачных монополий. Проект Portal возвращает частным лицам право на публикацию, разделяя хостинг веб-ресурсов и создание контента, а также связывая локальные сервисы пользователей со всем миром посредством сквозного зашифрованного ретранслятора (relay).

Представляем 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-адрес или настройка правил входящего трафика брандмауэра.
  • Совместимость со стандартами: Обеспечивается стопроцентная совместимость с http.Server, grpc.Server, а также любыми Go-библиотеками вроде Gin, Echo или Chi, использующими стандартный net.Listener.

2. Основа: одновременная привязка к нескольким ретрансляторам (Multi-Relay Binding)

Большинство инструментов туннелирования зависят от единственной конечной точки, поэтому при сбое сервера ретрансляции обрывается и сам сервис. Portalite работает при одновременном подключении к нескольким серверам ретрансляции.

  • Безоткатная изоляция сбоев (Failover): Даже если некоторые из ретрансляторов отключатся или возникнут задержки в сети, оставшиеся работоспособные ретрансляторы продолжат направлять трафик через тот же виртуальный listener.
  • Устранение единой точки отказа (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. Легковесный, но мощный функционал

  • Минимальные зависимости: Сокращение сторонних зависимостей обеспечивает малый вес бинарного файла и высокую скорость сборки.
  • Поддержка TLS и UDP: Помимо трафика TLS вроде HTTP и gRPC, можно с легкостью выставлять наружу UDP-сервисы, например игровые серверы, посредством бэкхола датаграмм QUIC.

Начало работы