All checks were successful
continuous-integration/drone/push Build is passing
6.2 KiB
6.2 KiB
Обновления системы
Выполнено
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
Создание сервера
- Нажмите "Создать сервер"
- Выберите демон из списка:
- Локальный (эта машина) - сервер будет на панели
- Test Daemon (или другой) - сервер будет на удаленном демоне
- Заполните остальные поля
- Нажмите "Создать"
Просмотр серверов
- Owner и Admin видят ВСЕ серверы всех пользователей
- Обычные пользователи видят только свои серверы
- В списке серверов показывается владелец сервера
Структура серверов на демонах
Когда сервер создается на демоне:
- На демоне: создается папка
servers/{server_name}/ - На панели: создается запись
servers/{daemon_id}_{server_name}/с конфигурацией - В конфигурации сохраняется:
daemonId- ID демонаdaemonName- название демонаowner- владелец сервера- Остальные параметры
API изменения
GET /api/servers
Теперь возвращает:
[
{
"name": "my_server",
"displayName": "Мой сервер",
"status": "stopped",
"owner": "admin"
}
]
POST /api/servers/create
Новые параметры:
{
"name": "my_server",
"displayName": "Мой сервер",
"startCommand": "java -Xmx2G -jar server.jar nogui",
"daemonId": "daemon-1" // или "local"
}
Ответ:
{
"message": "Сервер создан",
"name": "my_server",
"daemonId": "daemon-1"
}
Следующие шаги
Для полной интеграции с демонами нужно:
-
Управление серверами на демонах:
- Запуск/остановка через daemon API
- Отправка команд в консоль
- Получение логов
-
Файловый менеджер для демонов:
- Просмотр файлов на удаленном демоне
- Загрузка/скачивание файлов
- Редактирование конфигов
-
Статистика серверов на демонах:
- CPU/RAM использование конкретного сервера
- Онлайн игроков
- Uptime
-
Консоль для серверов на демонах:
- WebSocket подключение к daemon
- Просмотр логов в реальном времени
- Отправка команд
Daemon API для создания сервера
Нужно добавить в daemon/main.py:
@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}
Все задачи выполнены! Система готова к использованию.