Добавлена архитектура XLX Server
Этот коммит содержится в:
@@ -0,0 +1,226 @@
|
|||||||
|
# Архитектура XLX Server
|
||||||
|
|
||||||
|
## 1. Назначение
|
||||||
|
|
||||||
|
XLX Server — это управляемая платформа для DMR-пользователей, построенная вокруг XLX reflector и собственной системы регистрации, оплаты, проверки позывных и контроля доступа.
|
||||||
|
|
||||||
|
Главная идея: пользователь не просто подключается к открытому XLX, а проходит понятный жизненный цикл:
|
||||||
|
|
||||||
|
1. регистрация;
|
||||||
|
2. проверка позывного;
|
||||||
|
3. оплата;
|
||||||
|
4. получение ID и пароля;
|
||||||
|
5. подключение Pi-Star;
|
||||||
|
6. продление доступа или блокировка после окончания тарифа.
|
||||||
|
|
||||||
|
## 2. Основные компоненты
|
||||||
|
|
||||||
|
### 2.1 XLX Core
|
||||||
|
|
||||||
|
Отвечает за работу самого рефлектора.
|
||||||
|
|
||||||
|
Задачи:
|
||||||
|
|
||||||
|
- установка XLX reflector;
|
||||||
|
- управление системным сервисом;
|
||||||
|
- хранение конфигурации;
|
||||||
|
- контроль модулей;
|
||||||
|
- перезапуск после изменения настроек;
|
||||||
|
- сбор статуса.
|
||||||
|
|
||||||
|
### 2.2 Web Panel
|
||||||
|
|
||||||
|
Личный кабинет пользователя и админка.
|
||||||
|
|
||||||
|
Пользовательские функции:
|
||||||
|
|
||||||
|
- регистрация по позывному;
|
||||||
|
- вход в кабинет;
|
||||||
|
- статус проверки;
|
||||||
|
- статус оплаты;
|
||||||
|
- данные для подключения Pi-Star;
|
||||||
|
- срок действия доступа;
|
||||||
|
- история оплат;
|
||||||
|
- инструкция подключения.
|
||||||
|
|
||||||
|
Админские функции:
|
||||||
|
|
||||||
|
- список пользователей;
|
||||||
|
- ручная проверка/блокировка;
|
||||||
|
- ручное продление доступа;
|
||||||
|
- управление тарифами;
|
||||||
|
- просмотр оплат;
|
||||||
|
- просмотр логов подключений;
|
||||||
|
- управление ID-диапазонами;
|
||||||
|
- настройки сервера.
|
||||||
|
|
||||||
|
### 2.3 Callsign Verifier
|
||||||
|
|
||||||
|
Модуль проверки позывного по внешним источникам.
|
||||||
|
|
||||||
|
MVP-логика:
|
||||||
|
|
||||||
|
- пользователь вводит позывной;
|
||||||
|
- система нормализует его в верхний регистр;
|
||||||
|
- проверяет формат;
|
||||||
|
- делает запрос к настроенной базе;
|
||||||
|
- сохраняет результат проверки;
|
||||||
|
- при ошибке отправляет заявку в ручную модерацию.
|
||||||
|
|
||||||
|
Важно: внешний источник проверки должен быть заменяемым адаптером, чтобы не прибивать проект гвоздями к одной базе.
|
||||||
|
|
||||||
|
### 2.4 ID Allocator
|
||||||
|
|
||||||
|
Модуль выдачи внутренних ID.
|
||||||
|
|
||||||
|
Требования:
|
||||||
|
|
||||||
|
- ID уникален;
|
||||||
|
- ID закрепляется за пользователем;
|
||||||
|
- диапазон ID задаётся в настройках;
|
||||||
|
- повторная регистрация того же позывного не создаёт новый ID;
|
||||||
|
- заблокированный пользователь не освобождает ID автоматически;
|
||||||
|
- ручное переназначение возможно только админом.
|
||||||
|
|
||||||
|
### 2.5 Billing
|
||||||
|
|
||||||
|
Модуль платной регистрации и продления.
|
||||||
|
|
||||||
|
MVP:
|
||||||
|
|
||||||
|
- тарифы;
|
||||||
|
- ручное подтверждение оплаты;
|
||||||
|
- дата окончания доступа;
|
||||||
|
- блокировка после окончания срока.
|
||||||
|
|
||||||
|
Дальше:
|
||||||
|
|
||||||
|
- YooKassa;
|
||||||
|
- ЮMoney;
|
||||||
|
- СБП/карта через ручное подтверждение;
|
||||||
|
- webhooks оплат;
|
||||||
|
- счета/чеки при необходимости.
|
||||||
|
|
||||||
|
### 2.6 Access Gateway
|
||||||
|
|
||||||
|
Слой контроля доступа к серверу.
|
||||||
|
|
||||||
|
Задачи:
|
||||||
|
|
||||||
|
- хранить пароль пользователя;
|
||||||
|
- проверять активность подписки;
|
||||||
|
- формировать allowlist/auth-файл для XLX/DMR-шлюза;
|
||||||
|
- применять изменения без ручного редактирования конфигов;
|
||||||
|
- логировать попытки подключения.
|
||||||
|
|
||||||
|
На первом этапе допускается генерация конфигурационных файлов и перезапуск сервиса. Позже можно вынести это в отдельный daemon.
|
||||||
|
|
||||||
|
### 2.7 Installer/Updater
|
||||||
|
|
||||||
|
Обязательный компонент, чтобы проект нормально ставился на чистый сервер.
|
||||||
|
|
||||||
|
Функции:
|
||||||
|
|
||||||
|
- установка системных пакетов;
|
||||||
|
- установка зависимостей;
|
||||||
|
- настройка Nginx;
|
||||||
|
- настройка PHP/Python runtime;
|
||||||
|
- создание БД;
|
||||||
|
- миграции;
|
||||||
|
- установка systemd-сервисов;
|
||||||
|
- выпуск/подготовка SSL;
|
||||||
|
- бэкап перед обновлением;
|
||||||
|
- откат при ошибке.
|
||||||
|
|
||||||
|
## 3. Роли
|
||||||
|
|
||||||
|
### User
|
||||||
|
|
||||||
|
- регистрируется;
|
||||||
|
- оплачивает;
|
||||||
|
- получает данные подключения;
|
||||||
|
- видит статус доступа.
|
||||||
|
|
||||||
|
### Moderator
|
||||||
|
|
||||||
|
- проверяет спорные позывные;
|
||||||
|
- подтверждает ручные оплаты;
|
||||||
|
- блокирует пользователей.
|
||||||
|
|
||||||
|
### Admin
|
||||||
|
|
||||||
|
- управляет системой полностью;
|
||||||
|
- меняет настройки сервера;
|
||||||
|
- управляет тарифами;
|
||||||
|
- управляет ID-диапазонами;
|
||||||
|
- запускает обновления.
|
||||||
|
|
||||||
|
## 4. Жизненный цикл пользователя
|
||||||
|
|
||||||
|
```text
|
||||||
|
new -> callsign_pending -> callsign_verified -> payment_pending -> active -> expired
|
||||||
|
| |
|
||||||
|
v v
|
||||||
|
rejected blocked
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Подключение Pi-Star
|
||||||
|
|
||||||
|
Пользователь получает в кабинете:
|
||||||
|
|
||||||
|
- адрес сервера;
|
||||||
|
- порт;
|
||||||
|
- позывной/логин;
|
||||||
|
- пароль;
|
||||||
|
- ID;
|
||||||
|
- модуль по умолчанию;
|
||||||
|
- готовую инструкцию.
|
||||||
|
|
||||||
|
## 6. База данных
|
||||||
|
|
||||||
|
Минимальные сущности:
|
||||||
|
|
||||||
|
- users;
|
||||||
|
- callsign_checks;
|
||||||
|
- dmr_ids;
|
||||||
|
- tariffs;
|
||||||
|
- payments;
|
||||||
|
- access_credentials;
|
||||||
|
- server_settings;
|
||||||
|
- connection_logs;
|
||||||
|
- audit_logs.
|
||||||
|
|
||||||
|
## 7. Безопасность
|
||||||
|
|
||||||
|
- пароли хранить только в виде хэша;
|
||||||
|
- пароль для подключения генерировать отдельно от пароля кабинета;
|
||||||
|
- админские действия писать в audit log;
|
||||||
|
- закрыть прямой доступ к служебным файлам;
|
||||||
|
- не хранить платёжные данные карт;
|
||||||
|
- все webhooks проверять по подписи.
|
||||||
|
|
||||||
|
## 8. Дорожная логика версий
|
||||||
|
|
||||||
|
### v0.1.x
|
||||||
|
|
||||||
|
Каркас, документация, установщик, БД, базовая панель.
|
||||||
|
|
||||||
|
### v0.2.x
|
||||||
|
|
||||||
|
Регистрация, пользователи, проверка позывных, выдача ID.
|
||||||
|
|
||||||
|
### v0.3.x
|
||||||
|
|
||||||
|
Оплаты, тарифы, ручное подтверждение, срок доступа.
|
||||||
|
|
||||||
|
### v0.4.x
|
||||||
|
|
||||||
|
Генерация доступа для Pi-Star и управление auth/allowlist.
|
||||||
|
|
||||||
|
### v0.5.x
|
||||||
|
|
||||||
|
Интеграция с XLX reflector и статус сервера.
|
||||||
|
|
||||||
|
### v1.0.0
|
||||||
|
|
||||||
|
Готовый продукт: установка, админка, кабинет, оплата, доступ, мониторинг и обновления.
|
||||||
Ссылка в новой задаче
Block a user