Продукт студии
Живчик
Ускоритель зарубежных сервисов: свой парк серверов, два входа в один аккаунт, биллинг, поддержка и переключение на запасной сервер.
- одновременных подключений
- 1 000+
- пользователей
- 700
- локаций на выбор
- 11

Продукт студии: сервис доступа к зарубежным ресурсам со своим парком серверов, биллингом, личным кабинетом, ботом и поддержкой. Сейчас сервис закрыт. В активный период держал больше тысячи одновременных подключений при семистах пользователях.
Ниже — только инженерная часть: что было сделано и почему именно так.
Протокол выбран не по моде
Начиналось всё на WireGuard — и на нём же упёрлось. WireGuard узнаётся по форме трафика, и там, где фильтрация смотрит не только на адрес, он перестаёт работать целиком.
Рабочая версия построена на VLESS + Reality. Разница принципиальная: Reality не шифрует «как-то по-своему», а представляется настоящим сайтом с настоящим TLS-сертификатом. Для наблюдателя со стороны это обращение к обычному ресурсу, а не к сервису доступа. Отсюда и скорость: не остаётся ни обфускации поверх обфускации, ни туннеля в туннеле.
WireGuard в коде остался — выключенным и помеченным как унаследованный. Убирать его не стали: работающая запасная дорога дороже чистоты репозитория.
Российский прокси перед основным сервером
Основной сервер стоял за границей, но домен вёл на nginx-прокси внутри России, который и проксировал всё на основной. Смысл в том, что до основного адреса фильтрация не доходит: снаружи виден только прокси.
Разделение попутно решило вторую задачу — платёжные системы и внешние сервисы обращались к российскому адресу, а не к зарубежному.
Одна ссылка вместо инструкции на страницу
Главная точка отказа таких сервисов — настройка у пользователя. Поэтому клиент получал не файл конфигурации и не инструкцию, а подписочную ссылку: один адрес, который отдаёт готовый конфиг в формате, понятном всем распространённым клиентам.
Сменился сервер, добавилась локация, перевыпустились ключи — ссылка та же, клиент подтянет новое сам. Пользователю ничего переустанавливать не нужно.
Парк серверов и синхронизация по SSH
Поддерживалось до одиннадцати локаций. Список живёт в базе, а конфигурация Xray разъезжается по удалённым нодам через SSH — смена локации доступна и из бота, и из личного кабинета.
Отсюда следует неочевидная вещь: обновление конфигурации на десятке серверов занимает около минуты. Поэтому при регистрации синхронизация уходит в фон: человек получает рабочий доступ сразу, а не смотрит минуту на крутилку. Это одно из тех решений, которые не видно в интерфейсе и которые целиком определяют впечатление от продукта.
Два входа в один аккаунт
Войти можно было через Telegram-бота и через сайт по почте. Это два разных хранилища учётных записей — и они связываются шестизначным кодом: человек нажимает «Привязать Telegram» в кабинете, отправляет код боту, и подписки объединяются.
Регистрация на сайте сразу выдавала трёхдневный пробный период, создавала клиента и отдавала рабочую ссылку — без писем с подтверждением и без ожидания.
Биллинг на три системы
Три платёжных канала: карты и СБП, альтернативный рублёвый и криптовалюты через Telegram. Платёж проходит один и тот же путь: запись со статусом «ожидается» → переход на страницу оплаты → обратный вызов с проверкой подписи → продление подписки.
Подписка продлевается и у telegram-аккаунта, и у веб-аккаунта — по тому, откуда платёж пришёл. Плюс реферальная система, промокоды и бонус за подписку на канал.
Поддержка отдельным ботом
Тикеты, а не переписка в общем чате. Пользователь пишет боту, в группе администраторов появляется карточка обращения. Администратор берёт тикет, получает историю диалога и переписывается с человеком через бота.
Важная деталь — тикет можно отпустить обратно в пул вместе со всей историей: если обращение попало не к тому, следующий администратор начинает не с чистого листа. На закрытии пользователю приходит запрос оценки.
Переключение на запасной сервер
Аварийный маршрут переключения намеренно не использует аутентификацию через базу данных: весь его смысл в том, что основная база может быть недоступна. Проверка идёт по отдельному общему секрету.
Это ровно тот случай, когда «сделать как везде» означает получить механизм, который не работает именно тогда, когда он нужен.
Как это стояло
Без Docker: systemd держит бэкенд, фронтенд и Xray отдельными сервисами. База — SQLite одним файлом, миграции выполняются при старте приложения.
Фронтенд и бэкенд выкладываются независимо: правка в интерфейсе не перезапускает бота и не рвёт активные подключения. Выкладка идёт через собственный обработчик на сервере, который принимает архив сборки и перезапускает только свой сервис.
Python · FastAPI · aiogram 3 · SQLite · Xray (VLESS + Reality) · Next.js 16 · React 19 · TypeScript · nginx · systemd