---
id: 33b4cfbec34c4d839daf853bf4a39b3e
author: Lemon Mint
title: 'Portalite: легковесный Go SDK для Portal с привязкой к нескольким ретрансляторам и поддержкой стандартного net.Listener'
description: Облегчённый клиент и CLI для Portal, совместимый с стандартным интерфейсом net.Listener из Go, поддерживающий одновременную привязку к нескольким ретрансляторам, сквозное шифрование (E2EE) и автоматическое восстановление сеанса.
language: ru
date: 2026-08-26T14:05:55.212694445Z
path: /portalite
go_package: gosuda.org/portalite
go_repourl: https://github.com/gosuda/portalite.git
category: network
---

Ранее, представляя [Portal](https://github.com/gosuda/portal), мы говорили о проблемах современной сети. С появлением инструментов ИИ для программирования каждый может создать веб-сайт, однако сам процесс его публикации по-прежнему остаётся монополией крупных платформ и облачных сервисов. Portal представляет собой проект, который отделяет хостинг веба от создания контента и, соединяя локальные сервисы отдельных людей с миром через сквозное шифрованные релеи, возвращает право на публикацию самим пользователям.

## Представляем Portalite

Сегодня я представляю [Portalite](https://github.com/gosuda/portalite). Portalite является **сверхлёгким клиентом Portal и Go SDK, построенным с минимальным количеством зависимостей**.

Если Portal воплощает философию о том, как изменить веб, то Portalite является тонким связующим звеном, которое переносит эту философию в приложения разработчиков. Разработчику не нужны сложные настройки облака или конвейеры развёртывания: достаточно подключить SDK, добавить несколько строк кода, и в приложение можно будет встроить портальный ingress. Как только приложение запускается, сервер, который существовал только локально, становится публичным сервисом, доступным из любой точки интернета.

## 1. Публичный Ingress, настраиваемый в два строки кода

Portalite поддерживает [`net.Listener`](https://pkg.go.dev/net#Listener), стандартный интерфейс Go. Достаточно заменить listener в существующем веб-фреймворке или серверном коде, и всё начинает работать сразу.

```go
identity, err := portalite.GenerateIdentity("my-service")

listener, err := portalite.Expose(ctx, portalite.ExposeConfig{
    Relays:   portalite.DefaultRelays(),
    Identity: identity,
})

http.Serve(listener, handler)
```

- **Нулевая конфигурация (Zero-config):** не требуются проброс портов, статический IP или настройка правил входящего трафика на брандмауэре.
- **Стандартная совместимость:** полная совместимость с `http.Server`, `grpc.Server`, Gin, Echo, Chi и любыми другими библиотеками Go, которые используют стандартный `net.Listener`.

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

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

- **Бесперебойная изоляция сбоев (Failover):** если часть релеев выходит из строя или возникает сетевая задержка, оставшиеся работающие релеи продолжают принимать трафик через тот же виртуальный listener.
- **Устранение единой точки отказа (SPOF):** цикл `Accept()` приложения не прерывается, пока все релейные сессии одновременно не разорваны.
- **Сквозное шифрование (E2EE):** трафик передаётся в зашифрованном виде, поэтому релейные серверы не могут просматривать или изменять данные.
- **Автоматическое переподключение и самовосстановление (Self-Healing)**: даже при временных сетевых разрывах или перезагрузке релея сессии и токены в фоновом режиме автоматически пересогласовываются, восстанавливая соединение.

## 3. Немедленное использование одной командой CLI

Если вам не нужен Go-код или требуется быстрое тестирование, достаточно передать CLI номер порта.

```sh
$ go install gosuda.org/portalite/cmd/portalite@latest && portalite expose --name "my-service" 3000
URL https://my-service.rly.best
URL https://my-service.s-h.day

```

Сразу после выполнения команды выдаются URL нескольких релеев, и сервис становится доступен извне.

## 4. Лёгкость и мощь

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

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

- Репозиторий GitHub: [https://github.com/gosuda/portalite](https://github.com/gosuda/portalite)
- Пакет Go: `go get gosuda.org/portalite`
