Ко всем статьям
20 мая 2026 г.7 мин

Ghost VPN: собственный VPN-сервис под ключ — сайт, бот, мониторинг

Полностью самописный VPN-сервис на VLESS + Reality: Telegram-бот с автоплатежами, сайт с прямой оплатой, мониторинг доступности к целевым ресурсам и failover за 10 минут.

Полностью самописный VPN-сервис: от настройки протоколов на сервере до Telegram-бота и сайта с автоматической оплатой. Запущен в продакшене, работает без простоя.

Это не обёртка вокруг стороннего API и не реселл-кабинет. Мы собрали стек сами — серверная часть, биллинг, бот, сайт, мониторинг — и довели до состояния, когда от покупки тарифа до готового QR-кода в чате клиент не встречает ни одного человека. Под капотом — современный VLESS+Reality, под морду — два независимых канала продаж (сайт и Telegram), под надёжность — мониторинг с алертами и failover как infrastructure-as-code.

Что внутри

Протокол: VLESS + Reality

Снаружи трафик неотличим от обычного TLS-подключения к стороннему сайту — DPI не видит разницы и не может заблокировать конкретно нашу инфраструктуру без блокировки тысяч безобидных подключений. Серверный сертификат не используется: Reality переиспользует сертификат прикрываемого домена, что лишает активного зондирования основного признака.

Управление пользователями

Marzban-панель с единой БД пользователей: лимиты по трафику и сроку действия, выдача подписок, ротация ключей. Подписка клиента — один URL, который автоматически тянет актуальную конфигурацию.

Telegram-бот

Python + aiogram. Покупка тарифа, продление, статус подписки, поддержка. Платежи — через ЮKassa с идемпотентной обработкой webhook'ов: дублирующие уведомления от платёжной системы не дублируют продление, оплата атомарно фиксируется в БД.

Ghost VPN — личный кабинет в Telegram-боте: тариф, трафик, дата истечения, кнопки действий
Кабинет в боте: статус, трафик, действия

Сайт

Next.js 15 (App Router) + Tailwind + TypeScript. Cyberpunk-дизайн, оплата напрямую с сайта без перехода в бота, выдача QR-кода подписки сразу после успешного платежа. Два канала — один процесс.

Ghost VPN — главная страница сайта с тарифами «Терминалы доступа»
Витрина тарифов: оплата напрямую с сайта без перехода в бота

Мониторинг

Постоянная проверка доступности сервера и качества VPN-канала к конкретным целевым ресурсам — не «пингуем 8.8.8.8», а реально измеряем латенси и доступность того, ради чего пользователи подключаются:

  • Google, YouTube, Instagram, TikTok — основной поток
  • Discord, Telegram (web-версия) — связь
  • Игровые сервисы — латенси-чувствительный трафик

Замеры идут с внешних точек, дашборды показывают состояние сервисов. Оповещения помогают заметить инцидент и перейти к диагностике.

Failover и переезд

Вся конфигурация — сервера, маршрутизации, бота, сайта, мониторинга — версионируется как infrastructure-as-code. При попадании IP-адреса в блок-листы или резке трафика конкретным провайдером поднимается новый сервер и переключаются подписки за ≤ 10 минут. Без переписки с поддержкой, без выдачи новых конфигов клиентам — подписки динамические, тянут актуальный конфиг сами.

Технологический стек

  • VPN-ядро Xray-core, VLESS + Reality, Marzban, Docker с host networking
  • Бэкенд бота Python 3, aiogram, SQLAlchemy, SQLite
  • Платежи ЮKassa API, идемпотентные webhook-обработчики, статус-машина в БД
  • Сайт Next.js 15 (App Router), React 19, Tailwind CSS, TypeScript
  • Reverse-proxy nginx-proxy-manager, Let's Encrypt
  • Инфраструктура Docker Compose, systemd, отдельный VPS под весь стек
  • Мониторинг Внешние пробы к целевым ресурсам, дашборды, алерты в реальном времени

Что заняло больше всего работы

Reality fallback на легитимный домен

Настройка маскировки через nginx так, чтобы при ошибке SNI Reality-handshake уходил в реальный HTTPS-сайт, а не в пустоту. Это убирает один из главных признаков для активного зондирования — попытка пробить наш порт извне видит обычный сайт, отдающий нормальный TLS-ответ.

Идемпотентность платежей

Webhook ЮKassa может прийти несколько раз — сетевые ретраи на их стороне, наша задача — не продлить подписку дважды. Решено через статус-машину в БД с уникальными ID платежей и атомарными апдейтами. Каждое уведомление — идемпотентная операция, повторный вызов с тем же ID не делает ничего лишнего.

Полный self-service

От покупки до подключения — без участия администратора. Покупка → автоплатёж → создание пользователя в Marzban → выдача подписки → готовый QR-код в чате. Каждый шаг автоматизирован, каждая ошибка — обработана, каждый сбой — алертит, а не теряется.

Результат

Работающий сервис с реальными пользователями. Для эксплуатации предусмотрены мониторинг, биллинг и инструменты управления. Доступность сервиса и корректность операций требуют постоянного контроля.

Нужен сервис под ключ — с ботом, сайтом и платежами?

Делаем полный стек: бэкенд, бот, сайт, оплаты, мониторинг. Без коробочных шаблонов — каждое решение под конкретный сценарий. От бриф до продакшена — обычно 1–2 месяца.

Обсудить проект

Поделиться статьёй

Ещё в журнале

Продолжить чтение

10 сент. 2026 г.

Что входит в IT-аутсорсинг компании: компьютеры, серверы, сеть и 1С

Как согласовать обслуживание IT-инфраструктуры: состав работ, границы ответственности, порядок обращений и данные для расчёта сметы. Для компаний в Перми и удалённой поддержки.

Читать

10 сент. 2026 г.

Сколько стоит монтаж ЛВС и СКС в Перми: из чего складывается смета

Кабельные трассы, розетки, патч-панели, шкафы и проверки: какие сведения нужны для оценки монтажа. Три выполненных проекта с известным составом работ и стоимостью.

Читать