Представляем Portalite: сверхлегкий клиент с открытым исходным кодом и SDK для добавления порталов Ingress в ваши приложения
Ранее, представляя 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.
Начало работы
- Репозиторий на GitHub: https://github.com/gosuda/portalite
- Пакет Go:
go get gosuda.org/portalite