Личный кабинет и админка для VPN-подписки на базе 3X-UI
Fast Ray Gram — self-hosted веб-приложение для небольших VPN-сервисов:
- Личный кабинет — подписка, ссылка для VPN-клиента, оплата продления, вход по ссылке без пароля.
- Регистрация по коду — админ выдаёт ссылку, пользователь сам создаёт аккаунт.
- Админка — пользователи, XUI-клиенты, счета, коды регистрации, мониторинг сервисов.
- Платежи — выставление счетов в TimeWeb, фоновая проверка оплат, продление подписки в XUI.
Стек: FastAPI · PostgreSQL · React · Docker.
| Профиль | Пользователи |
|---|---|
![]() |
![]() |
На сервере (VPS / bare metal):
- Docker и Docker Compose v2
- Рабочая панель 3X-UI (API URL, sub URL, API key)
- Аккаунт TimeWeb с API-токеном и
payer_id(для приёма платежей) - Открытый порт 80/443 (или проброс на
APP_PORT)
Опционально: reverse proxy (Caddy / Nginx) и TLS-сертификат перед контейнером.
git clone <repository-url>
cd fast-ray-gram
cp .env.example .envЗаполните .env — обязательно смените секреты и укажите XUI / TimeWeb.
docker compose up -d --buildПриложение: http://<ваш-сервер>/ (фронтенд, порт FRONTEND_PORT, по умолчанию 80). API с rate limit — только через nginx (/api/...). Прямой доступ к FastAPI на :8000 привязан к 127.0.0.1 (для отладки с сервера).
Стек контейнеров: nginx (фронтенд + прокси /api) → FastAPI → PostgreSQL. Nginx ограничивает API: 5 req/s (burst 15) и 60 req/min (burst 10) с одного IP (429 при превышении; браузер перенаправляется на /too-many-requests).
Вместе с приложением поднимаются PostgreSQL и invoice-worker (проверка оплат, CHECK_INTERVAL_SEC, по умолчанию 30 с).
PostgreSQL доступен снаружи на порту DB__PORT (по умолчанию 5432). Конфигурация рассчитана на VPS с 1 GB RAM / 1 vCPU — см. docker/postgres/postgresql.conf.
| Переменная | Описание |
|---|---|
APP__JWT_SECRET |
Секрет подписи JWT |
APP__SUPERUSER_TOKEN |
Токен суперпользователя и воркера инвойсов |
APP__MONITORING_SERVICE_URL |
URL внешнего мониторинга (Uptime Kuma и т.п.) |
XUI__URL / XUI__SUB_URL / XUI__API_KEY |
Панель 3X-UI |
TIMEWEB__TOKEN / TIMEWEB__PAYER_ID |
Платежи TimeWeb |
DB__HOST / DB__PORT / DB__USER / DB__PASSWORD / DB__DB |
Подключение к PostgreSQL (URL собирается автоматически) |
APP_PORT |
Порт API на хосте (по умолчанию 8000) |
FRONTEND_PORT |
Порт nginx на хосте (по умолчанию 80) |
CHECK_INTERVAL_SEC |
Интервал проверки оплат |
Полный список — в .env.example.
Проект распространяется под лицензией GNU General Public License v3.0.
Вы можете свободно использовать, изменять и распространять код при условии сохранения той же лицензии для производных работ.


