mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-01-13 09:12:44 +00:00
Remove unnecessary files from PR
This commit is contained in:
parent
8a5c2708f4
commit
5d355f9c36
3 changed files with 0 additions and 367 deletions
|
|
@ -1,84 +0,0 @@
|
||||||
# Сводка изменений для Multi-Node архитектуры
|
|
||||||
|
|
||||||
## ✅ Реализованные компоненты
|
|
||||||
|
|
||||||
### 1. Node-сервис (Worker)
|
|
||||||
- ✅ `node/main.go` - точка входа
|
|
||||||
- ✅ `node/api/server.go` - REST API сервер
|
|
||||||
- ✅ `node/xray/manager.go` - управление XRAY процессом
|
|
||||||
- ✅ `node/Dockerfile` - Docker образ
|
|
||||||
- ✅ `node/docker-compose.yml` - конфигурация Docker Compose
|
|
||||||
- ✅ `node/README.md` - документация
|
|
||||||
|
|
||||||
### 2. Модели базы данных
|
|
||||||
- ✅ `database/model/model.go` - добавлены:
|
|
||||||
- `Node` - модель ноды
|
|
||||||
- `InboundNodeMapping` - соответствие inbound → node
|
|
||||||
- ✅ `database/db.go` - добавлены модели в миграцию
|
|
||||||
|
|
||||||
### 3. Сервисы панели
|
|
||||||
- ✅ `web/service/setting.go` - добавлены методы:
|
|
||||||
- `GetMultiNodeMode()` - получить режим работы
|
|
||||||
- `SetMultiNodeMode(enabled)` - установить режим работы
|
|
||||||
- ✅ `web/service/node.go` - новый сервис для управления нодами
|
|
||||||
- ✅ `web/service/xray.go` - модифицирован для поддержки multi-mode:
|
|
||||||
- Проверка режима работы
|
|
||||||
- В multi-mode: отправка конфигураций на ноды
|
|
||||||
- В single-mode: работает как раньше
|
|
||||||
- ✅ `sub/subService.go` - обновлён для генерации подписок с endpoint нод
|
|
||||||
|
|
||||||
### 4. Контроллеры
|
|
||||||
- ✅ `web/controller/node.go` - новый контроллер для управления нодами
|
|
||||||
- ✅ `web/controller/xui.go` - добавлен маршрут `/nodes` и NodeController
|
|
||||||
|
|
||||||
## 🔄 Логика работы
|
|
||||||
|
|
||||||
### Single-Mode (по умолчанию)
|
|
||||||
1. Все работает как раньше
|
|
||||||
2. Локальный XRAY Core используется
|
|
||||||
3. Подписки генерируются с endpoint панели
|
|
||||||
|
|
||||||
### Multi-Mode
|
|
||||||
1. Включение через настройки панели
|
|
||||||
2. Добавление нод через UI
|
|
||||||
3. Назначение инбаундов нодам
|
|
||||||
4. Конфигурации отправляются на ноды через REST API
|
|
||||||
5. Подписки генерируются с endpoint нод
|
|
||||||
|
|
||||||
## 📝 Файлы для изменения в UI
|
|
||||||
|
|
||||||
Для полной реализации потребуется обновить фронтенд:
|
|
||||||
|
|
||||||
1. **Настройки панели** (`web/html/settings/...`):
|
|
||||||
- Добавить тумблер "Multi-Node Mode"
|
|
||||||
|
|
||||||
2. **Новая страница Nodes** (`web/html/nodes.html`):
|
|
||||||
- Список нод
|
|
||||||
- Добавление/редактирование/удаление нод
|
|
||||||
- Проверка здоровья нод
|
|
||||||
|
|
||||||
3. **Страница Inbounds** (`web/html/inbounds.html`):
|
|
||||||
- Выпадающий список выбора ноды (только в multi-mode)
|
|
||||||
|
|
||||||
4. **Переводы** (`web/translation/...`):
|
|
||||||
- Добавить переводы для новых элементов UI
|
|
||||||
|
|
||||||
## 🚀 Следующие шаги
|
|
||||||
|
|
||||||
1. Обновить фронтенд для управления нодами
|
|
||||||
2. Добавить периодическую проверку здоровья нод (cron job)
|
|
||||||
3. Добавить логирование операций с нодами
|
|
||||||
4. Добавить валидацию конфигураций перед отправкой на ноды
|
|
||||||
5. Добавить обработку ошибок при недоступности нод
|
|
||||||
|
|
||||||
## ⚠️ Важные замечания
|
|
||||||
|
|
||||||
1. **Совместимость**: Все изменения обратно совместимы с single-mode
|
|
||||||
2. **Миграция БД**: Новые таблицы создаются автоматически при первом запуске
|
|
||||||
3. **Безопасность**: API ключи нод должны быть надёжными
|
|
||||||
4. **Сеть**: Ноды должны быть доступны с панели
|
|
||||||
|
|
||||||
## 📚 Документация
|
|
||||||
|
|
||||||
- `MULTI_NODE_ARCHITECTURE.md` - полная документация по архитектуре
|
|
||||||
- `node/README.md` - документация Node-сервиса
|
|
||||||
|
|
@ -1,264 +0,0 @@
|
||||||
# Multi-Node Architecture для 3x-ui
|
|
||||||
|
|
||||||
## 📋 Обзор
|
|
||||||
|
|
||||||
Реализована поддержка multi-node архитектуры для панели 3x-ui с возможностью переключения между режимами работы:
|
|
||||||
|
|
||||||
- **single-mode** (по умолчанию) - полностью совместим с текущей логикой
|
|
||||||
- **multi-mode** - распределённая архитектура с отдельными нодами
|
|
||||||
|
|
||||||
## 🏗️ Архитектура
|
|
||||||
|
|
||||||
### Single-Mode (по умолчанию)
|
|
||||||
|
|
||||||
- Используется встроенный XRAY Core на том же сервере, что и панель
|
|
||||||
- Все инбаунды работают локально
|
|
||||||
- Полная совместимость с существующим функционалом
|
|
||||||
|
|
||||||
### Multi-Mode
|
|
||||||
|
|
||||||
- Панель становится центральным сервером управления (Master)
|
|
||||||
- XRAY Core больше не используется локально
|
|
||||||
- Реальные XRAY инстансы работают на отдельных нодах (Workers)
|
|
||||||
- Панель хранит:
|
|
||||||
- Пользователей
|
|
||||||
- Инбаунды
|
|
||||||
- Правила маршрутизации
|
|
||||||
- Соответствие inbound → node
|
|
||||||
- Панель генерирует подписки с endpoint'ами нод
|
|
||||||
|
|
||||||
## 📦 Компоненты
|
|
||||||
|
|
||||||
### 1. Node-сервис (Worker)
|
|
||||||
|
|
||||||
Отдельный сервис, запускаемый в Docker на каждой ноде.
|
|
||||||
|
|
||||||
**Расположение:** `node/`
|
|
||||||
|
|
||||||
**Функциональность:**
|
|
||||||
- REST API для управления XRAY Core
|
|
||||||
- Применение конфигураций от панели
|
|
||||||
- Перезагрузка XRAY без остановки контейнера
|
|
||||||
- Проверка статуса и здоровья
|
|
||||||
|
|
||||||
**API Endpoints:**
|
|
||||||
- `GET /health` - проверка здоровья (без аутентификации)
|
|
||||||
- `POST /api/v1/apply-config` - применить конфигурацию XRAY
|
|
||||||
- `POST /api/v1/reload` - перезагрузить XRAY
|
|
||||||
- `GET /api/v1/status` - получить статус XRAY
|
|
||||||
|
|
||||||
**Запуск:**
|
|
||||||
```bash
|
|
||||||
cd node
|
|
||||||
NODE_API_KEY=your-secure-api-key docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
### 2. Изменения в панели
|
|
||||||
|
|
||||||
#### База данных
|
|
||||||
|
|
||||||
Добавлены новые модели:
|
|
||||||
- `Node` - информация о ноде (id, name, address, api_key, status)
|
|
||||||
- `InboundNodeMapping` - соответствие inbound → node
|
|
||||||
|
|
||||||
#### Сервисы
|
|
||||||
|
|
||||||
**SettingService:**
|
|
||||||
- `GetMultiNodeMode()` - получить режим работы
|
|
||||||
- `SetMultiNodeMode(enabled)` - установить режим работы
|
|
||||||
|
|
||||||
**NodeService:**
|
|
||||||
- Управление нодами (CRUD)
|
|
||||||
- Проверка здоровья нод
|
|
||||||
- Назначение инбаундов нодам
|
|
||||||
- Отправка конфигураций на ноды
|
|
||||||
|
|
||||||
**XrayService:**
|
|
||||||
- Автоматическое определение режима работы
|
|
||||||
- В single-mode: работает как раньше
|
|
||||||
- В multi-mode: отправляет конфигурации на ноды вместо запуска локального XRAY
|
|
||||||
|
|
||||||
**SubService:**
|
|
||||||
- В multi-mode: генерирует подписки с endpoint'ами нод
|
|
||||||
- В single-mode: работает как раньше
|
|
||||||
|
|
||||||
#### Контроллеры
|
|
||||||
|
|
||||||
**NodeController:**
|
|
||||||
- `GET /panel/node/list` - список нод
|
|
||||||
- `GET /panel/node/get/:id` - получить ноду
|
|
||||||
- `POST /panel/node/add` - добавить ноду
|
|
||||||
- `POST /panel/node/update/:id` - обновить ноду
|
|
||||||
- `POST /panel/node/del/:id` - удалить ноду
|
|
||||||
- `POST /panel/node/check/:id` - проверить здоровье ноды
|
|
||||||
- `POST /panel/node/checkAll` - проверить все ноды
|
|
||||||
- `GET /panel/node/status/:id` - получить статус ноды
|
|
||||||
|
|
||||||
## 🔄 Как это работает
|
|
||||||
|
|
||||||
### Single-Mode
|
|
||||||
|
|
||||||
1. Пользователь создаёт/изменяет инбаунд
|
|
||||||
2. Панель генерирует конфигурацию XRAY
|
|
||||||
3. Локальный XRAY Core перезапускается с новой конфигурацией
|
|
||||||
4. Подписки генерируются с endpoint панели
|
|
||||||
|
|
||||||
### Multi-Mode
|
|
||||||
|
|
||||||
1. Пользователь создаёт/изменяет инбаунд
|
|
||||||
2. Пользователь назначает инбаунд ноде (через UI)
|
|
||||||
3. Панель генерирует конфигурацию XRAY для этой ноды
|
|
||||||
4. Конфигурация отправляется на ноду через REST API
|
|
||||||
5. Нода применяет конфигурацию и перезапускает свой XRAY Core
|
|
||||||
6. Подписки генерируются с endpoint ноды
|
|
||||||
|
|
||||||
## 🚀 Установка и настройка
|
|
||||||
|
|
||||||
### 1. Настройка панели
|
|
||||||
|
|
||||||
1. Включите multi-node mode в настройках панели (UI тумблер)
|
|
||||||
2. Добавьте ноды через UI (вкладка "Nodes")
|
|
||||||
3. Назначьте инбаунды нодам
|
|
||||||
|
|
||||||
### 2. Настройка ноды
|
|
||||||
|
|
||||||
1. Скопируйте папку `node/` на сервер ноды
|
|
||||||
2. Установите XRAY Core в `bin/` директорию
|
|
||||||
3. Настройте `docker-compose.yml`:
|
|
||||||
```yaml
|
|
||||||
environment:
|
|
||||||
- NODE_API_KEY=your-secure-api-key
|
|
||||||
```
|
|
||||||
4. Запустите:
|
|
||||||
```bash
|
|
||||||
docker-compose up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
### 3. Добавление ноды в панель
|
|
||||||
|
|
||||||
1. Перейдите в раздел "Nodes"
|
|
||||||
2. Нажмите "Add Node"
|
|
||||||
3. Заполните:
|
|
||||||
- **Name**: имя ноды (например, "Node-1")
|
|
||||||
- **Address**: адрес API ноды (например, "http://192.168.1.100:8080")
|
|
||||||
- **API Key**: ключ, указанный в `NODE_API_KEY` на ноде
|
|
||||||
4. Сохраните
|
|
||||||
|
|
||||||
### 4. Назначение инбаунда ноде
|
|
||||||
|
|
||||||
1. Перейдите в раздел "Inbounds"
|
|
||||||
2. Откройте инбаунд для редактирования
|
|
||||||
3. В выпадающем списке "Node" выберите ноду
|
|
||||||
4. Сохраните
|
|
||||||
|
|
||||||
## 📝 Структура файлов
|
|
||||||
|
|
||||||
```
|
|
||||||
3x-ui/
|
|
||||||
├── node/ # Node-сервис (worker)
|
|
||||||
│ ├── main.go # Точка входа
|
|
||||||
│ ├── api/
|
|
||||||
│ │ └── server.go # REST API сервер
|
|
||||||
│ ├── xray/
|
|
||||||
│ │ └── manager.go # Управление XRAY процессом
|
|
||||||
│ ├── Dockerfile # Docker образ
|
|
||||||
│ ├── docker-compose.yml # Docker Compose конфигурация
|
|
||||||
│ └── README.md # Документация ноды
|
|
||||||
├── database/
|
|
||||||
│ └── model/
|
|
||||||
│ └── model.go # + Node, InboundNodeMapping
|
|
||||||
├── web/
|
|
||||||
│ ├── service/
|
|
||||||
│ │ ├── setting.go # + GetMultiNodeMode, SetMultiNodeMode
|
|
||||||
│ │ ├── node.go # NodeService (новый)
|
|
||||||
│ │ ├── xray.go # + поддержка multi-mode
|
|
||||||
│ └── controller/
|
|
||||||
│ ├── node.go # NodeController (новый)
|
|
||||||
│ └── xui.go # + маршрут /nodes
|
|
||||||
└── sub/
|
|
||||||
└── subService.go # + поддержка multi-mode для подписок
|
|
||||||
```
|
|
||||||
|
|
||||||
## ⚠️ Важные замечания
|
|
||||||
|
|
||||||
1. **Совместимость**: Все изменения минимально инвазивны и сохраняют полную совместимость с single-mode
|
|
||||||
2. **Миграция**: При переключении в multi-mode существующие инбаунды остаются без назначенных нод - их нужно назначить вручную
|
|
||||||
3. **Безопасность**: API ключи нод должны быть надёжными и храниться в безопасности
|
|
||||||
4. **Сеть**: Ноды должны быть доступны с панели по указанным адресам
|
|
||||||
|
|
||||||
## 🔧 Разработка
|
|
||||||
|
|
||||||
### Запуск Node-сервиса в режиме разработки
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd node
|
|
||||||
go run main.go -port 8080 -api-key test-key
|
|
||||||
```
|
|
||||||
|
|
||||||
### Тестирование
|
|
||||||
|
|
||||||
1. Запустите панель в multi-mode
|
|
||||||
2. Добавьте тестовую ноду
|
|
||||||
3. Создайте инбаунд и назначьте его ноде
|
|
||||||
4. Проверьте, что конфигурация отправляется на ноду
|
|
||||||
5. Проверьте, что подписки содержат правильный endpoint
|
|
||||||
|
|
||||||
## 📚 API Документация
|
|
||||||
|
|
||||||
### Node Service API
|
|
||||||
|
|
||||||
Все запросы (кроме `/health`) требуют заголовок:
|
|
||||||
```
|
|
||||||
Authorization: Bearer <api-key>
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Apply Config
|
|
||||||
```http
|
|
||||||
POST /api/v1/apply-config
|
|
||||||
Content-Type: application/json
|
|
||||||
|
|
||||||
{
|
|
||||||
"log": {...},
|
|
||||||
"inbounds": [...],
|
|
||||||
"outbounds": [...],
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Reload
|
|
||||||
```http
|
|
||||||
POST /api/v1/reload
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Status
|
|
||||||
```http
|
|
||||||
GET /api/v1/status
|
|
||||||
|
|
||||||
Response:
|
|
||||||
{
|
|
||||||
"running": true,
|
|
||||||
"version": "1.8.0",
|
|
||||||
"uptime": 3600
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🐛 Troubleshooting
|
|
||||||
|
|
||||||
### Нода не отвечает
|
|
||||||
|
|
||||||
1. Проверьте, что нода запущена: `docker ps`
|
|
||||||
2. Проверьте логи: `docker logs 3x-ui-node`
|
|
||||||
3. Проверьте доступность: `curl http://node-address:8080/health`
|
|
||||||
4. Проверьте API ключ в настройках панели
|
|
||||||
|
|
||||||
### Конфигурация не применяется
|
|
||||||
|
|
||||||
1. Проверьте логи ноды
|
|
||||||
2. Проверьте, что XRAY Core установлен в `bin/`
|
|
||||||
3. Проверьте формат конфигурации
|
|
||||||
|
|
||||||
### Подписки не работают
|
|
||||||
|
|
||||||
1. Убедитесь, что инбаунд назначен ноде
|
|
||||||
2. Проверьте, что endpoint ноды доступен из сети
|
|
||||||
3. Проверьте, что порт инбаунда открыт на ноде
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
services:
|
|
||||||
3xui:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
dockerfile: ./Dockerfile
|
|
||||||
container_name: 3xui_app
|
|
||||||
# hostname: yourhostname <- optional
|
|
||||||
ports:
|
|
||||||
- "2053:2053"
|
|
||||||
- "2096:2096"
|
|
||||||
volumes:
|
|
||||||
- $PWD/db/:/etc/x-ui/
|
|
||||||
- $PWD/cert/:/root/cert/
|
|
||||||
environment:
|
|
||||||
XRAY_VMESS_AEAD_FORCED: "false"
|
|
||||||
XUI_ENABLE_FAIL2BAN: "true"
|
|
||||||
tty: true
|
|
||||||
# network_mode: host
|
|
||||||
restart: unless-stopped
|
|
||||||
Loading…
Reference in a new issue