| Слой |
Решение |
Почему |
| Фреймворк |
React 19 + Vite |
Быстрый HMR, нет оверхеда SSR |
| Роутинг |
TanStack Router |
Type-safe маршруты, удобные лейауты, поддержка search params |
| Серверный стейт |
TanStack Query |
Кэш, фоновое обновление, оптимистичные мутации |
| Глобальный стейт |
Zustand |
Только auth + UI preferences, без Redux-бойлерплейта |
| UI |
shadcn/ui + Tailwind CSS |
Кастомизируемые компоненты, не black box |
| Графики |
Recharts |
Трафик, онлайн-пользователи, нагрузка нод |
| Формы |
React Hook Form + Zod |
Zod-схема одновременно валидирует на фронте и бэке |
| HTTP |
Axios + TanStack Query |
Interceptors для refresh token |
| WebSocket |
native / reconnecting-websocket |
Realtime-метрики в админке |
| Иконки |
Lucide React |
|
| Интернационализация |
i18next |
RU/EN минимум |
| Слой |
Решение |
Почему |
| Язык |
Go 1.24+ |
Низкое потребление RAM, быстрый старт, один бинарник |
| HTTP фреймворк |
Fiber v3 |
Быстрее чем Echo/Gin на benchmarks, Express-like API |
| ORM |
GORM + pgx |
GORM для CRUD, pgx напрямую для bulk-операций |
| БД |
PostgreSQL 17 |
JSONB для Xray конфигов, партиционирование трафика |
| Кэш / Pub-Sub |
Redis 7 |
Сессии, rate limiting, очередь sync-задач |
| Миграции |
Goose + embed |
SQL-файлы встроены в бинарник, нет внешних зависимостей |
| Auth |
JWT (golang-jwt) + bcrypt |
Access token 15 мин, refresh 30 дней |
| Валидация |
go-playground/validator |
Теги на struct-полях |
| Xray API |
gRPC (google.golang.org/grpc) |
Официальный способ управления Xray |
| Брокер задач |
Asynq (Redis-based) |
Async синхронизация пользователей на ноды |
| Конфиг |
Viper |
ENV + YAML файл |
| Логи |
Zap (uber-go/zap) |
Structured logging, JSON в prod |
| Документация API |
Swaggo (swagger) |
Генерируется из комментариев |
| Компонент |
Решение |
| Контейнеризация |
Docker + Docker Compose |
| Reverse proxy |
Traefik v3 (автоматический TLS) |
| Метрики |
Prometheus + Grafana |
| Node exporter |
Кастомный агент на Go (на каждой ноде) |
Каждая нода — отдельный VPS с:
- Xray-core (последняя версия)
- Кастомным агентом (Go), который принимает команды от панели по gRPC и управляет Xray через его API
- Prometheus node_exporter для системных метрик