Skip to content

Latest commit

 

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VPN_service_for_3X-UI - полноценный VPN-сервис для коммерческих VPN-проектов

Stars Issues License PRs Welcome Status

🐛 Сообщить о баге • 💡 Предложить идею

Советую также посмотреть тематические репозитории: рабочие и стабильные конфигурации для XRay, панели 3X-UI и настройки клиентских приложений и продвинутый бот-Inviter для пиара всеми способами


📖 Описание проекта

Идея и концепция

VPN_service_for_3X-UI - это проект, созданный для решения конкретной задачи: автоматизация, упрощение и удешивление VPN-бизнеса.

Проект разработан и поддерживается единственным владельцем и основателем VPN-сервиса Major Woolfi. Основная идея родилась из необходимости иметь бота для собственного VPN-проекта. Проект воплощает подход автоматизации, упрощения, ускорения и удешивления рутинных задач, что позволяет добиться максимально комфортной и быстрой работы.

Полное описание

Проект ориентирован на владельца VPN-проекта и помогает автоматизировать управление сервисом:

  • Автоматизация сервиса
  • Снижение ручной нагрузки на владельца проекта
  • Упрощение UX до комфортного уровня

Ключевые принципы проекта:

  1. Простота - упрощение сложных процессов
  2. Удобство - сделать выполнение задачи максимально удобным
  3. Надёжность - максимальная устойчивость к любому сценарию использования
  4. Гибкость - максимально гибкие настройки

Для кого этот проект

  • Владельцы VPN-проектов
  • Разработчики собственных ботов и сайтов

Но на этом аудитория не ограничивается. Она ограничивается лишь вашей фантазией.


✨ Реализованные фичи

🤖 Bot

Основное меню

Главное меню бота (через build_main_keyboard) доступно всем пользователям. Владелец сервиса имеет доступ к функциям управления:

  • Купить - покупка/продление подписки
  • Моя подписка - статус, трафик, VPN-ссылки (sub + JSON), продление
  • Настройка клиента - инструкции и ссылки на приложения (INCY, v2RayTun)
  • FAQ - часто задаваемые вопросы
  • Реферальная система - ваша реферальная ссылка
  • Стать партнёром - заявка на партнёрство
  • Язык - смена языка интерфейса (7 языков)
  • Сайт - ссылка на веб-интерфейс
  • Поддержка - ссылка на Telegram-чат поддержки
  • Публичная оферта / Политика конфиденциальности / Условия ИПП - юридические ссылки (для владельца: дополнительно "Ожидающие платежи", "Партнёрские заявки", "Инструменты отладки")

Подписки

  • Бесплатный trial - тестовая подписка автоматически создаётся при первом взаимодействии
  • 6 готовых тарифов: Try!, Simple, Medium, Medium +, Premium, Unlimited (см. bot/data/tarifs.json)
  • Кастомный тариф - пошаговый мастер (4 шага): трафик (1-36500 ГБ), IP-лимит (1-30), срок (1-365 дней), локации (выбор из доступных inbound'ов). Цена рассчитывается по формуле: total = base + GB × gb_coef + IP × D × ip_day_coef + ΣLOC × D
  • Продление - обновление конфигурации с сохранением данных пользователя
  • Удаление подписки - очистка истекших/неактивных подписок (cleanup)

VPN-конфиги

  • Протоколы: VLESS/REALITY (XRay 26.7.28+ с XHTTP-транспортом и REALITY-плагином)
  • Файлы конфигураций: все популярные клиенты собраны в посте Telegram-канала
  • Настройка клиентов:
    • INCY (рекомендуется): скачайте файл INCY для вашей ОС, откройте INCY, выберите "Настройки" -> "Резервное копирование" -> "Выбрать файл", укажите конфиг из поста, выберите "Заменить" и нажмите "Применить". Затем откройте "Настройки" -> "Прокси по приложениям", выберите все пророссийские приложения и вставьте подписку из бота @off_PhantomVPN_bot.
    • v2RayTun (устаревшее ядро, возможны проблемы): скачайте файл v2RayTun, откройте "Настройки" -> "Настройки приложения" -> "Восстановление настроек", выберите конфиг из поста. Затем откройте "Настройки" -> "Маршрутизация", выберите все пророссийские приложения и вставьте подписку из бота @off_PhantomVPN_bot.
    • Для помощи с другим клиентом или дополнительной помощи по INCY и v2RayTun обращайтесь в поддержку @Phantom_OFFNET.

Статистика трафика

  • Отображение трафика по устройству и в агрегате
  • Ручной и автоматический сброс (через меню владельца)

Платёжные системы

  • Перевод на карту (P2P) - оплата через create-checkout с возвратом payment_details.card_number, проверка вручную (рекомендуется писать в поддержку через 5-10 минут с чеком)
  • ЮMoney (Быстрый платёж) - оплата через create-checkout с возвратом checkout_url (YooMoney для некириллических языков, ЮMoney для RU/BE)
  • Общий флоу: POST /api/v1/payments/create-checkout → получает payment_id, amount_rub, discount_percent, payment_details (для карты) или checkout_url (для ЮMoney) → пользователь оплачивает → админ подтверждает через POST /api/v1/payments/verify/{payment_id} со status=confirmed|rejected (legacy /confirm и /reject deprecated)

Очки доверия (Trust Score)

  • Включение: управляется параметром TRUST_SCORE_ENABLED; при значении false отключаются начисления, штрафы, скидки и управление очками через debug-меню
  • Начисление: 5% от суммы платежа за каждую покупку (максимум 100 очков)
  • Скидка: TRUST_SCORE_DISCOUNT_PERCENT_PER_POINT процентов за каждое очко, автоматически применяется ко всем тарифам; итог ограничен 100%
  • Штрафы: -5 очков при исчерпании трафика, -10 при отклонённом платеже
  • Бан: обнуляет очки доверия до 0
  • Настройка: TRUST_SCORE_ENABLED, TRUST_SCORE_MIN, TRUST_SCORE_MAX, TRUST_SCORE_EARN_PERCENT, TRUST_SCORE_DISCOUNT_PERCENT_PER_POINT, TRUST_SCORE_PENALTY_TRAFFIC_EXHAUSTED, TRUST_SCORE_PENALTY_PAYMENT_REJECTED (в .env)
  • Управление админом: добавление/убавление очков через debug-меню

Партнёрская программа

  • Реферальные ссылки - ссылка для привлечения новых пользователей (бонус: +7 дней)
  • Партнёрство - заявка с указанием соцсетей (Telegram, YouTube, TikTok), минимум 1000 подписчиков (по умолчанию, настраивается через PARTNER_MIN_FOLLOWERS в .env)
  • Личный кабинет партнёра: баланс, статистика рефералов, вывод средств через СБП, бонусные дни (PARTNER_BONUS_DAYS_MIN-PARTNER_BONUS_DAYS_MAX) и очки доверия (PARTNER_TRUST_POINTS_MIN-PARTNER_TRUST_POINTS_MAX)
  • Период партёрства: PARTNER_MIN_PERIOD_MONTHS-PARTNER_MAX_PERIOD_MONTHS месяцев
  • Комиссия: PARTNER_COMMISSION_PERCENT% от суммы оплаты каждого привлечённого пользователя

Поддержка

  • Переписка - прямой чат с администратором через Telegram (кнопка "Поддержка" в меню)

Уведомления

  • Напоминание об окончании подписки - за EXPIRY_ALERT_DAYS дней (по умолчанию 7; настраивается в .env)
  • Рассылки - администратор может отправить уведомление всем пользователям или только активным подписчикам

Технические особенности

  • Мультиязычность - 7 языков (ru, en, de, pl, ja, zh, be)
  • FSM - 30+ состояний для многошаговых сценариев (покупка, вывод, отладка, верификация платежа)
  • Фоновые задачи: проверка подписок (SUBSCRIPTION_CHECK_INTERVAL_SEC, по умолчанию 3600 с), ежедневный ABUSE-скан (TRAFFIC_ABUSE_CHECK_INTERVAL_SEC, 86400 с), очистка старых платежей (PAYMENT_CLEANUP_INTERVAL_SEC, 259200 с), sync панелей 3X-UI, бэкапы БД, daily-статистика. Обработка платежа ограничена PAYMENT_PROCESSING_TIMEOUT_SEC (по умолчанию 900 с).
  • 3X-UI интеграция - синхронизация клиентов/трафика, управление inbounds, health check панелей
  • Отладочное меню - cleanup подписок, удаление подписок пользователей, поиск по UID/TID, скан ABUSE, управление trust points, нормализация подписок, техработы, компенсация днями, добавление трафика

API

  • FastAPI REST API с session/Bearer-авторизацией
  • Эндпоинты: статистика (/api/v1/stats/overview, /api/v1/stats/panel-status), пользователи (/api/v1/users, /api/v1/users/{user_id}), платежи (/api/v1/payments/pending, /api/v1/payments/verify/{payment_id}), история платежей (/api/v1/admin/payments/history), выводы (/api/v1/partner/withdraw), панели (/api/v1/admin/panel-status), рассылки (/api/v1/broadcast/send). Legacy /api/v1/payments/confirm/{payment_id} и /api/v1/payments/reject/{payment_id} помечены deprecated; используйте /api/v1/payments/verify/{payment_id}.
  • API принимает session token, BOT_API_KEY, BOT_ADMIN_KEY или admin JWT в заголовке Authorization: Bearer <token>; session token действует 6 часов.

🌐 Web

Структура страниц

Навигация (из lib/navigation.ts):

  • Публичные страницы: Главная, FAQ, ToS, Публичная оферта, Политика конфиденциальности, Партнёры
  • Страницы для авторизованных: Подписка, Личный кабинет, Клиент, Реферальная программа (скрыта для админов), Настройки
  • Админ-страницы: Health (/admin/health), Пользователи (/admin/users), Debug (/admin/debug)
  • Страницы с ограничениями: Бан (/banned), Ошибка 404 (/not-found)

Маршруты и их назначение

Маршрут Описание
/ Главная: статистика сервиса, живой статус серверов (LiveStatusBar, NodeGrid), сетка тарифов (TariffGrid), список фич
/login Авторизация: логин/пароль или через Telegram (deep-link start=web_login_<state>)
/register Регистрация аккаунта
/subscribe Покупка/продление: выбор тарифа (6 готовых + кастомный), динамический расчёт цены, P2P на карту или ЮMoney (YooMoney)
/profile Личный кабинет: статус подписки, план, срок, трафик с прогресс-баром, очки доверия + скидка, VPN-ссылки (VLESS и JSON), кнопка "Настроить клиента"
/client Инструкции по настройке: VPN-ссылки и QR-коды для Android, iOS, Windows, macOS, Linux, Android TV, Router
/settings Настройки: язык (7 языков), тема (localStorage + auto-detected), смена пароля, привязка Telegram (через deep-link бота и API)
/qa FAQ: поиск, категории, раскрывающиеся вопросы (35 Q&A в 15 категориях)
/referral Реферальная программа: статистика, реферальная ссылка
/partner Партнёрская программа: заявка, личный кабинет, баланс, вывод
/offer Публичная оферта (на 7 языках)
/privacy Политика конфиденциальности (на 7 языках)
/tos Условия использования (на 7 языках)
/admin/health Админ: системное здоровье (статусы панелей, 3X-UI)
/admin/users Админ: список пользователей (пагинация, поиск), ABUSE-управление
/admin/debug Админ: инструменты отладки (cleanup подписок, поиск, ABUSE-скан)
/banned Бан-страница (для забаненных пользователей)
/payment Страница оплаты (перенаправление после выбора тарифа)
/subscription Редирект на /subscribe (для обратной совместимости)

Потоки данных

  1. Авторизация: сайт аутентифицируется через bot API (/api/v1/auth/*), токен хранится в httpOnly cookie. Вход через логин/пароль или Telegram (deep-link start=web_login_<state> в боте).
  2. Подписка: /subscribe → getTariffs() + getLocations() → выбор тарифа → createCheckout() для P2P или ЮMoney → подтверждение → verifySubscription().
  3. Кастомный тариф: getCustomTariffParams() → пошаговый ввод (трафик, IP, дни, локации) → generateCustomTariff() → динамическая цена → оплата.
  4. Профиль: getMe() → статус подписки, трафик (used_gb/traffic_gb), trust_score, скидка. getSubscriptionLink() → VPN-ссылки (VLESS + JSON).

Особенности веб-интерфейса

  • SSR - серверный рендеринг с i18n (i18n-server.ts)
  • PWA - манифест для установки веб-приложения
  • Live статус серверов - polling: health 10 с, panel status 5 с, Telegram auth 2 с; ссылка привязки Telegram в настройках проверяется каждые 3 с (NodeGrid, LiveStatusBar)
  • Тёмная/светлая тема - localStorage + автоопределение системной темы (ThemeContext)
  • Мультиязычность - 7 языков с SSR, локализацией и синхронизацией между компонентами (LanguageContext)
  • SEO - sitemap.xml, robots.txt, Open Graph, Twitter Cards, JSON-LD, динамический sitemap
  • Адаптивный дизайн - TailwindCSS с компонентами для всех устройств

🚀 Быстрый старт

Предварительные требования

  • Зависимости
    • bot
      • Runtime - Python 3.13.9+ (возможно и старше, тестирование не проводилось)
      • Библиотеки из requirements.txt
      • 3X-UI 3.0.0+ (на сервере)
      • Docker (для деплоя)
    • web
      • Runtime - Node.js 20+
      • Библиотеки из package.json
      • Nginx (для API, Reverse Proxy)
  • Железо (выделеное, минимум для запуска и корректной работы)
    • Суммарно
      • CPU 1 ядро 1Ггц
      • RAM 400 мб
      • ROM 1 Гб
    • bot
      • CPU 1 ядро 1Ггц
      • RAM 250 мб
      • ROM 350 мб
    • web
      • CPU 1 ядро 1Ггц
      • RAM 150 мб
      • ROM 650 мб

Установка

# Клонируйте репозиторий
git clone https://github.com/Major-Woolfi/VPN_service_for_3X-UI.git
cd VPN_service_for_3X-UI

Конфигурация

Настраивайте проект через файл конфигурации .env. Пример конфигурации можно найти в файлах .env.example. Настройка требуется как у bot, так и у web. Проверяйте согласованность конфигураций.

Проверка

Перед запуском убедитесь, что:

  • Все зависимости установлены корректно
  • Файл конфигурации .env настроен правильно как в bot, так и в web
  • 3X-UI установлен и работает корректно

После запуска убедитесь, что:

  • Бот успешно подключился к 3X-UI и работает корректно
  • Сайт доступен и корректно отображает информацию

🏗️ Архитектура проекта

├── bot/
│  ├── data/
│  │  ├── tarifs.json
│  │  └── ...
│  ├── langs/
│  │  ├── be.json
│  │  ├── de.json
│  │  ├── en.json
│  │  ├── ja.json
│  │  ├── pl.json
│  │  ├── ru.json
│  │  └── zh.json
│  ├── logs/
│  │  └── ...
│  ├── .env
│  ├── .env.example
│  ├── 3X-UI_API-doc.json
│  ├── BOT_API-doc.json
│  ├── deploy_bot.sh
│  ├── Dockerfile
│  ├── main.py
│  └── requirements.txt
├── deploy/
│  └── Nginx-Proxy.conf
├── web/
│  ├── public/
│  │  ├── translations/
│  │  │  ├── legal/
│  │  │  │  ├── be.json
│  │  │  │  ├── de.json
│  │  │  │  ├── en.json
│  │  │  │  ├── ja.json
│  │  │  │  ├── pl.json
│  │  │  │  ├── ru.json
│  │  │  │  └── zh.json
│  │  │  ├── be.json
│  │  │  ├── de.json
│  │  │  ├── en.json
│  │  │  ├── ja.json
│  │  │  ├── pl.json
│  │  │  ├── ru.json
│  │  │  └── zh.json
│  │  ├── icon.jpg
│  │  └── manifest.json
│  ├── scripts/
│  │  └── generate-i18n.ts
│  ├── src/
│  │  ├── app/
│  │  │  ├── admin/
│  │  │  │  ├── debug/
│  │  │  │  │  └── page.tsx
│  │  │  │  ├── health/
│  │  │  │  │  └── page.tsx
│  │  │  │  ├── users/
│  │  │  │  │  └── page.tsx
│  │  │  │  └── page.tsx
│  │  │  ├── api/
│  │  │  │  └── admin/
│  │  │  │     ├── abuse-users/
│  │  │  │     │  └── route.ts
│  │  │  │     ├── debug/
│  │  │  │     │  ├── search/
│  │  │  │     │  │  └── route.ts
│  │  │  │     │  └── route.ts
│  │  │  │     ├── health/
│  │  │  │     │  └── route.ts
│  │  │  │     ├── panel-status/
│  │  │  │     │  └── route.ts
│  │  │  │     └── users/
│  │  │  │        ├── [user_id]/
│  │  │  │        │  └── clear-abuse/
│  │  │  │        │     └── route.ts
│  │  │  │        └── route.ts
│  │  │  ├── banned/
│  │  │  │  └── page.tsx
│  │  │  ├── client/
│  │  │  │  └── page.tsx
│  │  │  ├── login/
│  │  │  │  └── page.tsx
│  │  │  ├── manifest.json/
│  │  │  │  └── route.ts
│  │  │  ├── offer/
│  │  │  │  └── page.tsx
│  │  │  ├── partner/
│  │  │  │  └── page.tsx
│  │  │  ├── payment/
│  │  │  │  └── page.tsx
│  │  │  ├── privacy/
│  │  │  │  └── page.tsx
│  │  │  ├── profile/
│  │  │  │  └── page.tsx
│  │  │  ├── qa/
│  │  │  │  └── page.tsx
│  │  │  ├── referral/
│  │  │  │  └── page.tsx
│  │  │  ├── register/
│  │  │  │  └── page.tsx
│  │  │  ├── settings/
│  │  │  │  └── page.tsx
│  │  │  ├── subscribe/
│  │  │  │  └── page.tsx
│  │  │  ├── subscription/
│  │  │  │  └── page.tsx
│  │  │  ├── tos/
│  │  │  │  └── page.tsx
│  │  │  ├── error.tsx
│  │  │  ├── favicon.ico
│  │  │  ├── globals.css
│  │  │  ├── layout.tsx
│  │  │  ├── not-found.tsx
│  │  │  ├── page.tsx
│  │  │  ├── robots.ts
│  │  │  └── sitemap.ts
│  │  ├── components/
│  │  │  ├── AuthCallback.tsx
│  │  │  ├── BackToTop.tsx
│  │  │  ├── FaqList.tsx
│  │  │  ├── Header.tsx
│  │  │  ├── LiveStatusBar.tsx
│  │  │  ├── NodeGrid.tsx
│  │  │  ├── NodeStatus.tsx
│  │  │  ├── ScrollAnimations.tsx
│  │  │  ├── TariffGrid.tsx
│  │  │  ├── TariffGridClient.tsx
│  │  │  ├── ThemeInit.tsx
│  │  │  └── UserMenu.tsx
│  │  ├── contexts/
│  │  │  ├── AuthContext.tsx
│  │  │  ├── FeaturesContext.tsx
│  │  │  ├── LanguageContext.tsx
│  │  │  └── ThemeContext.tsx
│  │  ├── data/
│  │  │  └── legal.ts
│  │  └── lib/
│  │     ├── server/
│  │     │  └── admin-proxy.ts
│  │     ├── api.ts
│  │     ├── i18n-generated.ts
│  │     ├── i18n-server.ts
│  │     ├── i18n-types.ts
│  │     ├── i18n.ts
│  │     ├── navigation.ts
│  │     ├── structured-data.ts
│  │     ├── types.ts
│  │     └── validation.ts
│  ├── .env
│  ├── .env.example
│  ├── eslint.config.mjs
│  ├── next.config.ts
│  ├── package-lock.json
│  ├── package.json
│  ├── postcss.config.mjs
│  └── tsconfig.json
├── .gitignore
├── LICENSE
└── README.md

📊 Статистика проекта

Метрика Значение
⭐ Stars Stars
🍴 Forks Forks
🐛 Issues Issues
👥 Contributors Contributors

🤝 Контрибьюция

Приветствуем любые вклад в проект! Перед созданием PR обязательно прочитай:

Все общие правила хранятся в репозитории .github в папке community.


👤 Владелец и основатель

VPN-сервис и проект VPN_service_for_3X-UI разработаны и поддерживаются единственным владельцем и основателем - Major Woolfi.


📄 Лицензия

Этот проект распространяется под лицензией MIT. Подробности в файле LICENSE.


⭐ Поставь звезду, если проект понравился!

📧 Контакты

About

VPN-сервис для использования в комерческих проектах. Требуется 3X-UI на сервере, а также для WEB требуется Nginx и Node.js (я использую aaPanel).

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages