Skip to content

FPPweb3/v2ray-user-manager

Repository files navigation

Панель управления Trojan V2Ray (v4.45.2)

Лёгкая full-stack панель для управления пользователями одного trojan inbound в V2Ray v4.45.2.

Что делает приложение

  • Берёт список пользователей только из config.json (это источник истины).
  • Показывает трафик по пользователям и общий трафик inbound за последние 30 дней.
  • Добавляет и удаляет пользователей по безопасной схеме:
    1. меняет конфиг в памяти,
    2. пишет временный файл,
    3. проверяет v2ray -config <temp> -test,
    4. применяет изменение в рантайме через gRPC AlterInbound,
    5. атомарно заменяет рабочий config.json,
    6. при неуспехе финального шага пытается откатить рантайм-изменение.
  • Периодически синхронизирует счётчики V2Ray (интервал настраивается, по умолчанию 30 секунд).
  • Детектирует перезапуск V2Ray по StatsService.GetSysStats().Uptime.
  • Хранит только компактные дневные агрегаты трафика в SQLite (без fine-grained истории).
  • Показывает системные метрики сервера (процессор, память, диск, сеть, время работы).
  • Использует NET_MAX_LINK_MBPS для шкалы загрузки сети на дашборде.
  • Формирует персональные URL подписки в формате <SUBSCRIPTION_BASE_URL>/<base64url(login:password)>.
  • Поддерживает ручную синхронизацию данных без отдельной очереди runtime-операций.

Проверенные факты по V2Ray v4.45.2

  • Runtime add/remove пользователя выполняется через HandlerService.AlterInbound с AddUserOperation / RemoveUserOperation.
  • Для trojan удаление требует непустой email, добавление требует уникального email.
  • Пользовательские счётчики трафика появляются только при непустом email.
  • Имена счётчиков:
    • user>>>EMAIL>>>traffic>>>uplink|downlink
    • inbound>>>TAG>>>traffic>>>uplink|downlink
  • QueryStats(pattern) использует substring-матчер.
  • Runtime-счётчики сбрасываются после перезапуска процесса V2Ray.
  • GetSysStats возвращает uptime процесса V2Ray в секундах.

Важное ограничение

В gRPC API V2Ray v4.45.2 нет отдельного штатного метода «получить список runtime-пользователей inbound». Поэтому:

  • нельзя напрямую и полно сравнить runtime-состав с config.json через один API-вызов;
  • панель не строит отдельную архитектуру постоянного рассинхрона;
  • в add/remove используется сценарий с rollback, чтобы завершать операцию в одном цикле.

Структура проекта

backend/
  app/
    api/
    core/
    services/
    v2ray_proto/
    models.py
    schemas.py
    main.py
  proto/
frontend/
  src/
    api/
    components/
    hooks/
    pages/
    utils/

Запуск

1) Подготовить .env

cp .env.example .env
cp frontend/.env.example frontend/.env

2) Backend

cd backend
uv lock
uv sync --group dev
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

3) Frontend

# из корня проекта
bun install
bun run --filter frontend dev --host 0.0.0.0 --port 5173

Открыть: http://localhost:5173

Что должно быть включено в config V2Ray

Для сбора статистики в конфигурации V2Ray должны быть включены:

  • "stats": {}
  • политики:
    • levels.<level>.statsUserUplink = true
    • levels.<level>.statsUserDownlink = true
    • system.statsInboundUplink = true
    • system.statsInboundDownlink = true

Также в API должны быть доступны HandlerService и StatsService, а gRPC inbound должен маршрутизироваться к API outbound.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors