🐛 Сообщить о баге • 💡 Предложить идею
Советую также посмотреть тематические репозитории: рабочие и стабильные конфигурации для XRay, панели 3X-UI и настройки клиентских приложений и продвинутый бот-Inviter для пиара всеми способами
VPN_service_for_3X-UI - это проект, созданный для решения конкретной задачи: автоматизация, упрощение и удешивление VPN-бизнеса.
Проект разработан и поддерживается единственным владельцем и основателем VPN-сервиса Major Woolfi. Основная идея родилась из необходимости иметь бота для собственного VPN-проекта. Проект воплощает подход автоматизации, упрощения, ускорения и удешивления рутинных задач, что позволяет добиться максимально комфортной и быстрой работы.
Проект ориентирован на владельца VPN-проекта и помогает автоматизировать управление сервисом:
- Автоматизация сервиса
- Снижение ручной нагрузки на владельца проекта
- Упрощение UX до комфортного уровня
Ключевые принципы проекта:
- Простота - упрощение сложных процессов
- Удобство - сделать выполнение задачи максимально удобным
- Надёжность - максимальная устойчивость к любому сценарию использования
- Гибкость - максимально гибкие настройки
- Владельцы VPN-проектов
- Разработчики собственных ботов и сайтов
Но на этом аудитория не ограничивается. Она ограничивается лишь вашей фантазией.
Главное меню бота (через 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)
- Протоколы: 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и/rejectdeprecated)
- Включение: управляется параметром
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, нормализация подписок, техработы, компенсация днями, добавление трафика
- 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 часов.
Навигация (из 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 (для обратной совместимости) |
- Авторизация: сайт аутентифицируется через bot API (
/api/v1/auth/*), токен хранится в httpOnly cookie. Вход через логин/пароль или Telegram (deep-linkstart=web_login_<state>в боте). - Подписка:
/subscribe→getTariffs()+getLocations()→ выбор тарифа →createCheckout()для P2P или ЮMoney → подтверждение →verifySubscription(). - Кастомный тариф:
getCustomTariffParams()→ пошаговый ввод (трафик, IP, дни, локации) →generateCustomTariff()→ динамическая цена → оплата. - Профиль:
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)
- bot
- Железо (выделеное, минимум для запуска и корректной работы)
- Суммарно
- 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 | |
| 🍴 Forks | |
| 🐛 Issues | |
| 👥 Contributors |
Приветствуем любые вклад в проект! Перед созданием PR обязательно прочитай:
- 📋 CONTRIBUTING - правила участия
- 💬 CODE OF CONDUCT - кодекс поведения
- 🐛 ISSUE TEMPLATE - шаблоны багов и фич
- 🔀 PULL REQUEST TEMPLATE - требования к PR
Все общие правила хранятся в репозитории .github в папке community.
VPN-сервис и проект VPN_service_for_3X-UI разработаны и поддерживаются единственным владельцем и основателем - Major Woolfi.
Этот проект распространяется под лицензией MIT. Подробности в файле LICENSE.
⭐ Поставь звезду, если проект понравился!