diff --git a/CHANGES_SUMMARY.md b/CHANGES_SUMMARY.md deleted file mode 100644 index 4ff51d45..00000000 --- a/CHANGES_SUMMARY.md +++ /dev/null @@ -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-сервиса diff --git a/MULTI_NODE_ARCHITECTURE.md b/MULTI_NODE_ARCHITECTURE.md deleted file mode 100644 index f66ed2ee..00000000 --- a/MULTI_NODE_ARCHITECTURE.md +++ /dev/null @@ -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 -``` - -#### 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. Проверьте, что порт инбаунда открыт на ноде diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 8e146db7..00000000 --- a/docker-compose.yml +++ /dev/null @@ -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