Лёгкая full-stack панель для управления пользователями одного trojan inbound в V2Ray v4.45.2.
- Берёт список пользователей только из
config.json(это источник истины). - Показывает трафик по пользователям и общий трафик inbound за последние 30 дней.
- Добавляет и удаляет пользователей по безопасной схеме:
- меняет конфиг в памяти,
- пишет временный файл,
- проверяет
v2ray -config <temp> -test, - применяет изменение в рантайме через gRPC
AlterInbound, - атомарно заменяет рабочий
config.json, - при неуспехе финального шага пытается откатить рантайм-изменение.
- Периодически синхронизирует счётчики V2Ray (интервал настраивается, по умолчанию 30 секунд).
- Детектирует перезапуск V2Ray по
StatsService.GetSysStats().Uptime. - Хранит только компактные дневные агрегаты трафика в SQLite (без fine-grained истории).
- Показывает системные метрики сервера (процессор, память, диск, сеть, время работы).
- Использует
NET_MAX_LINK_MBPSдля шкалы загрузки сети на дашборде. - Формирует персональные URL подписки в формате
<SUBSCRIPTION_BASE_URL>/<base64url(login:password)>. - Поддерживает ручную синхронизацию данных без отдельной очереди runtime-операций.
- Runtime add/remove пользователя выполняется через
HandlerService.AlterInboundсAddUserOperation/RemoveUserOperation. - Для
trojanудаление требует непустойemail, добавление требует уникальногоemail. - Пользовательские счётчики трафика появляются только при непустом
email. - Имена счётчиков:
user>>>EMAIL>>>traffic>>>uplink|downlinkinbound>>>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/
cp .env.example .env
cp frontend/.env.example frontend/.envcd backend
uv lock
uv sync --group dev
uv run uvicorn app.main:app --reload --host 0.0.0.0 --port 8000# из корня проекта
bun install
bun run --filter frontend dev --host 0.0.0.0 --port 5173Открыть: http://localhost:5173
Для сбора статистики в конфигурации V2Ray должны быть включены:
"stats": {}- политики:
levels.<level>.statsUserUplink = truelevels.<level>.statsUserDownlink = truesystem.statsInboundUplink = truesystem.statsInboundDownlink = true
Также в API должны быть доступны HandlerService и StatsService, а gRPC inbound должен маршрутизироваться к API outbound.