Added Daemon system and fixed interface
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2026-01-16 18:56:21 +06:00
parent fbfddf3c7a
commit d188cec1f0
24 changed files with 1974 additions and 4985 deletions

264
DAEMON_SETUP.md Normal file
View File

@@ -0,0 +1,264 @@
# Настройка системы демонов MC Panel
## Что такое демоны?
Демоны (Daemons) - это удаленные серверы, на которых можно запускать Minecraft серверы. Система демонов позволяет:
- Распределять серверы по разным физическим машинам
- Масштабировать инфраструктуру
- Управлять серверами на разных локациях из одной панели
- Балансировать нагрузку между серверами
## Быстрый старт
### 1. Установка демона на удаленный сервер
#### Windows:
```bash
# 1. Скопируйте папку daemon на удаленный сервер
# 2. Откройте командную строку в папке daemon
# 3. Установите зависимости
install.bat
# 4. Настройте .env файл
copy .env.example .env
notepad .env
# 5. Запустите демон
start.bat
```
#### Linux:
```bash
# 1. Скопируйте папку daemon на удаленный сервер
# 2. Установите зависимости
cd daemon
pip install -r requirements.txt
# 3. Настройте .env файл
cp .env.example .env
nano .env
# 4. Запустите демон
python main.py
```
### 2. Настройка .env файла демона
```env
# Уникальный ID демона
DAEMON_ID=daemon-1
# Отображаемое имя
DAEMON_NAME=Main Server
# Порт для API
DAEMON_PORT=24444
# Секретный ключ (сгенерируйте случайный)
DAEMON_KEY=your-secret-key-here
# Директория для серверов
SERVERS_DIR=./servers
```
**Важно:** Сгенерируйте надежный ключ:
```python
import secrets
print(secrets.token_urlsafe(32))
```
### 3. Подключение демона к панели
1. Откройте основную панель управления
2. Войдите как владелец (owner) или администратор (admin)
3. В боковом меню нажмите "Демоны" (иконка сервера)
4. Нажмите "Добавить демон"
5. Заполните форму:
- **Название**: Main Server (или любое другое)
- **IP адрес**: IP адрес сервера с демоном
- **Порт**: 24444 (или ваш порт из .env)
- **Ключ демона**: ваш DAEMON_KEY из .env
- **Примечания**: дополнительная информация (необязательно)
6. Нажмите "Добавить"
### 4. Проверка подключения
После добавления демон должен отображаться со статусом "Онлайн" (зеленый индикатор).
Вы увидите:
- Статус демона (онлайн/оффлайн)
- Использование CPU, ОЗУ и диска
- Количество серверов на демоне
## Архитектура
```
┌─────────────────┐
│ Основная панель │ (порт 8000)
│ (Frontend + │
│ Backend) │
└────────┬─────────┘
│ HTTP API
┌────┴────┬────────┬────────┐
│ │ │ │
┌───▼───┐ ┌──▼───┐ ┌──▼───┐ ┌──▼───┐
│Daemon1│ │Daemon2│ │Daemon3│ │... │
│(24444)│ │(24444)│ │(24444)│ │ │
└───┬───┘ └──┬───┘ └──┬───┘ └──────┘
│ │ │
┌───▼───┐ ┌──▼───┐ ┌──▼───┐
│Server1│ │Server2│ │Server3│
│Server2│ │Server3│ │Server4│
└───────┘ └──────┘ └──────┘
```
## Безопасность
### 1. Файрвол
Настройте файрвол, чтобы разрешить доступ к порту демона только с IP основной панели:
#### Windows (PowerShell):
```powershell
New-NetFirewallRule -DisplayName "MC Panel Daemon" -Direction Inbound -LocalPort 24444 -Protocol TCP -Action Allow -RemoteAddress "IP_ПАНЕЛИ"
```
#### Linux (ufw):
```bash
sudo ufw allow from IP_ПАНЕЛИ to any port 24444
```
#### Linux (iptables):
```bash
sudo iptables -A INPUT -p tcp -s IP_ПАНЕЛИ --dport 24444 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 24444 -j DROP
```
### 2. HTTPS (рекомендуется для продакшена)
Используйте reverse proxy (nginx) с SSL сертификатом:
```nginx
server {
listen 443 ssl http2;
server_name daemon.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:24444;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
```
### 3. Сильные ключи
- Используйте случайные ключи длиной минимум 32 символа
- Не используйте одинаковые ключи для разных демонов
- Храните ключи в безопасности
## Запуск как сервис
### Linux (systemd)
1. Создайте файл `/etc/systemd/system/mcpanel-daemon.service`:
```ini
[Unit]
Description=MC Panel Daemon
After=network.target
[Service]
Type=simple
User=mcpanel
WorkingDirectory=/path/to/daemon
ExecStart=/usr/bin/python3 /path/to/daemon/main.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
```
2. Запустите сервис:
```bash
sudo systemctl enable mcpanel-daemon
sudo systemctl start mcpanel-daemon
sudo systemctl status mcpanel-daemon
```
### Windows (NSSM)
1. Скачайте NSSM: https://nssm.cc/download
2. Установите сервис:
```cmd
nssm install MCPanelDaemon "C:\Python\python.exe" "C:\path\to\daemon\main.py"
nssm set MCPanelDaemon AppDirectory "C:\path\to\daemon"
nssm start MCPanelDaemon
```
## Управление серверами на демонах
После подключения демона вы можете:
1. **Создавать серверы** - при создании сервера можно будет выбрать демон
2. **Просматривать статистику** - CPU, ОЗУ, диск каждого демона
3. **Управлять серверами** - запуск, остановка, консоль, файлы
4. **Мониторить состояние** - статус демонов обновляется автоматически
## Troubleshooting
### Демон показывает статус "Оффлайн"
1. Проверьте, что демон запущен на удаленном сервере
2. Проверьте файрвол и порты
3. Проверьте, что ключ в панели совпадает с DAEMON_KEY
4. Проверьте IP адрес и порт
5. Проверьте логи демона
### Ошибка "Connection error"
- Проверьте сетевое подключение между панелью и демоном
- Проверьте, что порт не заблокирован файрволом
- Попробуйте подключиться вручную: `curl http://IP:24444/api/status`
### Ошибка "Invalid daemon key"
- Проверьте, что ключ в панели точно совпадает с DAEMON_KEY в .env
- Убедитесь, что нет лишних пробелов или символов
- Перезапустите демон после изменения .env
## Мониторинг
Демоны автоматически отправляют информацию о:
- Использовании CPU
- Использовании ОЗУ
- Использовании диска
- Количестве серверов
- Количестве запущенных серверов
Эта информация обновляется каждые 10 секунд в интерфейсе панели.
## Масштабирование
Вы можете добавить неограниченное количество демонов:
1. Установите демон на новый сервер
2. Используйте уникальный DAEMON_ID для каждого демона
3. Добавьте демон в панель
4. Распределяйте серверы между демонами
## Поддержка
Если у вас возникли проблемы:
1. Проверьте логи демона
2. Проверьте логи основной панели
3. Создайте тикет в системе поддержки