# MC Panel Daemon Удаленный демон для управления серверами Minecraft. Устанавливается на отдельные физические серверы и подключается к основной панели управления. ## Установка ### Windows 1. Установите Python 3.8 или выше 2. Скопируйте папку `daemon` на удаленный сервер 3. Откройте командную строку в папке daemon 4. Запустите установку зависимостей: ``` install.bat ``` ### Linux 1. Установите Python 3.8 или выше 2. Скопируйте папку `daemon` на удаленный сервер 3. Установите зависимости: ```bash pip install -r requirements.txt ``` ## Настройка 1. Скопируйте `.env.example` в `.env`: ``` copy .env.example .env ``` 2. Отредактируйте `.env` файл: ```env DAEMON_ID=daemon-1 DAEMON_NAME=Main Server DAEMON_PORT=24444 DAEMON_KEY=your-secret-key-here SERVERS_DIR=./servers ``` - `DAEMON_ID` - уникальный ID демона - `DAEMON_NAME` - отображаемое имя демона - `DAEMON_PORT` - порт для API (по умолчанию 24444) - `DAEMON_KEY` - секретный ключ для аутентификации - `SERVERS_DIR` - директория для серверов 3. Создайте секретный ключ: ```python import secrets print(secrets.token_urlsafe(32)) ``` ## Запуск ### Windows ``` start.bat ``` ### Linux ```bash python main.py ``` ### Как сервис (Linux) Создайте файл `/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 ``` Запустите сервис: ```bash sudo systemctl enable mcpanel-daemon sudo systemctl start mcpanel-daemon sudo systemctl status mcpanel-daemon ``` ## Подключение к панели 1. Откройте основную панель управления 2. Перейдите в раздел "Демоны" 3. Нажмите "Добавить демон" 4. Заполните данные: - **Название**: Main Server - **IP адрес**: IP адрес сервера с демоном - **Порт**: 24444 (или ваш порт) - **Ключ демона**: ваш DAEMON_KEY из .env 5. Нажмите "Добавить" ## API Endpoints Демон предоставляет следующие API endpoints: - `GET /` - Информация о демоне - `GET /api/status` - Статус демона и системы - `GET /api/servers` - Список серверов - `POST /api/servers/{name}/start` - Запустить сервер - `POST /api/servers/{name}/stop` - Остановить сервер - `POST /api/servers/{name}/command` - Отправить команду - `GET /api/servers/{name}/stats` - Статистика сервера ## Безопасность 1. **Используйте сильный ключ** - генерируйте случайный ключ длиной минимум 32 символа 2. **Настройте файрвол** - разрешите доступ к порту демона только с IP основной панели 3. **Используйте HTTPS** - в продакшене используйте reverse proxy (nginx) с SSL 4. **Регулярно обновляйте** - следите за обновлениями и устанавливайте их ## Пример конфигурации 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; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` ## Структура директорий ``` daemon/ ├── main.py # Основной файл демона ├── requirements.txt # Зависимости Python ├── .env # Конфигурация (создайте из .env.example) ├── .env.example # Пример конфигурации ├── install.bat # Скрипт установки (Windows) ├── start.bat # Скрипт запуска (Windows) ├── README.md # Эта документация └── servers/ # Директория с серверами ├── server1/ │ ├── config.json │ └── ... └── server2/ ├── config.json └── ... ``` ## Формат config.json для сервера ```json { "name": "server1", "displayName": "My Minecraft Server", "startCommand": "java -Xmx2G -Xms1G -jar server.jar nogui" } ``` ## Troubleshooting ### Демон не запускается - Проверьте, что Python установлен: `python --version` - Проверьте, что все зависимости установлены: `pip list` - Проверьте логи в консоли ### Панель не может подключиться к демону - Проверьте, что демон запущен - Проверьте файрвол и порты - Проверьте, что ключ в панели совпадает с DAEMON_KEY - Проверьте IP адрес и порт ### Сервер не запускается - Проверьте startCommand в config.json - Проверьте права доступа к файлам - Проверьте логи сервера ## Поддержка Если у вас возникли проблемы, создайте тикет в системе поддержки панели.