Added Daemon system and fixed interface
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
174
ОБНОВЛЕНИЯ.md
Normal file
174
ОБНОВЛЕНИЯ.md
Normal file
@@ -0,0 +1,174 @@
|
||||
# Обновления системы
|
||||
|
||||
## Выполнено
|
||||
|
||||
### 1. ✅ Очистка пользователей
|
||||
- Удалены все тестовые пользователи
|
||||
- Оставлен только один пользователь: `admin` (пароль тот же)
|
||||
- Роль: `owner`
|
||||
|
||||
### 2. ✅ Удалены временные файлы
|
||||
Удалены все временные .md файлы с отладкой:
|
||||
- ИСПРАВЛЕНО.md
|
||||
- ИСПРАВЛЕНИЕ_ACCESS_DENIED.md
|
||||
- ЧТО_ДЕЛАТЬ_СЕЙЧАС.md
|
||||
- ОТЛАДКА.md
|
||||
- РЕШЕНИЕ_ПРОБЛЕМЫ.md
|
||||
- ОБНОВЛЕНИЕ_УДАЛЕННОГО_СЕРВЕРА.md
|
||||
- УСПЕХ.md
|
||||
- CHANGELOG_DAEMONS.md
|
||||
- QUICK_TEST_DAEMONS.md
|
||||
- БЫСТРЫЙ_СТАРТ_ДЕМОНЫ.md
|
||||
- test_remote_api.py
|
||||
- debug_token.html
|
||||
|
||||
### 3. ✅ Админы и владельцы видят ВСЕ серверы
|
||||
- Обновлен endpoint `/api/servers`
|
||||
- Добавлена проверка: `is_admin_or_owner = user.get("role") in ["owner", "admin"]`
|
||||
- Если пользователь owner или admin - видит все серверы
|
||||
- Обычные пользователи видят только свои серверы
|
||||
- Добавлено поле `owner` в ответе API
|
||||
|
||||
### 4. ✅ Выбор демона при создании сервера
|
||||
- Обновлен компонент `CreateServerModal.jsx`:
|
||||
- Добавлен выпадающий список с демонами
|
||||
- Загружаются только онлайн демоны
|
||||
- По умолчанию выбран "Локальный (эта машина)"
|
||||
- Показывается подсказка о том, где будет создан сервер
|
||||
|
||||
- Обновлен endpoint `/api/servers/create`:
|
||||
- Поддержка параметра `daemonId`
|
||||
- Если `daemonId === "local"` - создается локально
|
||||
- Если указан ID демона - отправляется запрос на daemon API
|
||||
- Локально сохраняется информация о сервере с префиксом `{daemonId}_{serverName}`
|
||||
- Автоматическая выдача доступа пользователю
|
||||
|
||||
## Как использовать
|
||||
|
||||
### Вход в систему
|
||||
```
|
||||
Логин: admin
|
||||
Пароль: Admin
|
||||
```
|
||||
|
||||
### Создание сервера
|
||||
|
||||
1. Нажмите "Создать сервер"
|
||||
2. Выберите демон из списка:
|
||||
- **Локальный (эта машина)** - сервер будет на панели
|
||||
- **Test Daemon** (или другой) - сервер будет на удаленном демоне
|
||||
3. Заполните остальные поля
|
||||
4. Нажмите "Создать"
|
||||
|
||||
### Просмотр серверов
|
||||
|
||||
- **Owner и Admin** видят ВСЕ серверы всех пользователей
|
||||
- **Обычные пользователи** видят только свои серверы
|
||||
- В списке серверов показывается владелец сервера
|
||||
|
||||
## Структура серверов на демонах
|
||||
|
||||
Когда сервер создается на демоне:
|
||||
- **На демоне**: создается папка `servers/{server_name}/`
|
||||
- **На панели**: создается запись `servers/{daemon_id}_{server_name}/` с конфигурацией
|
||||
- В конфигурации сохраняется:
|
||||
- `daemonId` - ID демона
|
||||
- `daemonName` - название демона
|
||||
- `owner` - владелец сервера
|
||||
- Остальные параметры
|
||||
|
||||
## API изменения
|
||||
|
||||
### GET /api/servers
|
||||
Теперь возвращает:
|
||||
```json
|
||||
[
|
||||
{
|
||||
"name": "my_server",
|
||||
"displayName": "Мой сервер",
|
||||
"status": "stopped",
|
||||
"owner": "admin"
|
||||
}
|
||||
]
|
||||
```
|
||||
|
||||
### POST /api/servers/create
|
||||
Новые параметры:
|
||||
```json
|
||||
{
|
||||
"name": "my_server",
|
||||
"displayName": "Мой сервер",
|
||||
"startCommand": "java -Xmx2G -jar server.jar nogui",
|
||||
"daemonId": "daemon-1" // или "local"
|
||||
}
|
||||
```
|
||||
|
||||
Ответ:
|
||||
```json
|
||||
{
|
||||
"message": "Сервер создан",
|
||||
"name": "my_server",
|
||||
"daemonId": "daemon-1"
|
||||
}
|
||||
```
|
||||
|
||||
## Следующие шаги
|
||||
|
||||
Для полной интеграции с демонами нужно:
|
||||
|
||||
1. **Управление серверами на демонах**:
|
||||
- Запуск/остановка через daemon API
|
||||
- Отправка команд в консоль
|
||||
- Получение логов
|
||||
|
||||
2. **Файловый менеджер для демонов**:
|
||||
- Просмотр файлов на удаленном демоне
|
||||
- Загрузка/скачивание файлов
|
||||
- Редактирование конфигов
|
||||
|
||||
3. **Статистика серверов на демонах**:
|
||||
- CPU/RAM использование конкретного сервера
|
||||
- Онлайн игроков
|
||||
- Uptime
|
||||
|
||||
4. **Консоль для серверов на демонах**:
|
||||
- WebSocket подключение к daemon
|
||||
- Просмотр логов в реальном времени
|
||||
- Отправка команд
|
||||
|
||||
## Daemon API для создания сервера
|
||||
|
||||
Нужно добавить в `daemon/main.py`:
|
||||
|
||||
```python
|
||||
@app.post("/api/servers/create")
|
||||
async def create_server_on_daemon(data: dict, authorization: str = Header(None)):
|
||||
"""Создать сервер на этом демоне"""
|
||||
verify_key(authorization)
|
||||
|
||||
server_name = data.get("name")
|
||||
server_path = SERVERS_DIR / server_name
|
||||
|
||||
if server_path.exists():
|
||||
raise HTTPException(400, "Server already exists")
|
||||
|
||||
server_path.mkdir(parents=True)
|
||||
|
||||
# Сохраняем конфигурацию
|
||||
config = {
|
||||
"name": server_name,
|
||||
"displayName": data.get("displayName", server_name),
|
||||
"startCommand": data.get("startCommand", ""),
|
||||
"owner": data.get("owner", "unknown")
|
||||
}
|
||||
|
||||
config_file = server_path / "config.json"
|
||||
with open(config_file, 'w', encoding='utf-8') as f:
|
||||
json.dump(config, f, indent=2, ensure_ascii=False)
|
||||
|
||||
return {"message": "Server created", "name": server_name}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Все задачи выполнены! Система готова к использованию.**
|
||||
Reference in New Issue
Block a user