Настройка API и веб-хуков для Bedrock сервера: различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Новая страница: «= Настройка API и веб-хуков для Bedrock сервера = == 1. Подготовка == * Убедитесь, что Bedrock сервер у…»
 
Починка разметки: ссылки и жирный шрифт из Markdown, лишние обратные косые черты в коде, заголовки — проверка вики 13.11.2026
 
Строка 48: Строка 48:
app.use(bodyParser.json());
app.use(bodyParser.json());


\# Функция выполнения команд
// Функция выполнения команд
function executeCommand(command) {
function executeCommand(command) {
     return new Promise((resolve, reject) => {
     return new Promise((resolve, reject) => {
Строка 73: Строка 73:
}
}


\# Функция отправки команды в консоль сервера
// Функция отправки команды в консоль сервера
function sendServerCommand(command) {
function sendServerCommand(command) {
     return new Promise((resolve) => {
     return new Promise((resolve) => {
Строка 83: Строка 83:
}
}


\# API Endpoints
// API Endpoints


\# Статус сервера
// Статус сервера
app.get('/api/server/status', async (req, res) => {
app.get('/api/server/status', async (req, res) => {
     try {
     try {
Строка 96: Строка 96:
});
});


\# Запуск сервера
// Запуск сервера
app.post('/api/server/start', async (req, res) => {
app.post('/api/server/start', async (req, res) => {
     try {
     try {
Строка 106: Строка 106:
});
});


\# Остановка сервера
// Остановка сервера
app.post('/api/server/stop', async (req, res) => {
app.post('/api/server/stop', async (req, res) => {
     try {
     try {
Строка 116: Строка 116:
});
});


\# Перезапуск сервера
// Перезапуск сервера
app.post('/api/server/restart', async (req, res) => {
app.post('/api/server/restart', async (req, res) => {
     try {
     try {
Строка 126: Строка 126:
});
});


\# Выполнение команды
// Выполнение команды
app.post('/api/server/command', async (req, res) => {
app.post('/api/server/command', async (req, res) => {
     const { command } = req.body;
     const { command } = req.body;
Строка 142: Строка 142:
});
});


\# Получение логов
// Получение логов
app.get('/api/server/logs', (req, res) => {
app.get('/api/server/logs', (req, res) => {
     const fs = require('fs');
     const fs = require('fs');
Строка 157: Строка 157:
});
});


\# Информация о сервере
// Информация о сервере
app.get('/api/server/info', async (req, res) => {
app.get('/api/server/info', async (req, res) => {
     const fs = require('fs');
     const fs = require('fs');
Строка 195: Строка 195:
<pre>sudo node app.js</pre>
<pre>sudo node app.js</pre>


== 3. Настройка systemd сервиса ===
== 3. Настройка systemd сервиса ==


=== Создание сервиса ===
=== Создание сервиса ===
Строка 224: Строка 224:
sudo systemctl status bedrock-api</pre>
sudo systemctl status bedrock-api</pre>


== 4. Настройка веб-хуков ===
== 4. Настройка веб-хуков ==


=== Создание webhook endpoint ===
=== Создание webhook endpoint ===
Строка 231: Строка 231:
<pre>const axios = require('axios');
<pre>const axios = require('axios');


\# Webhook конфигурация
// Webhook конфигурация
const webhookConfig = {
const webhookConfig = {
     url: process.env.WEBHOOK_URL || 'https://discord.com/api/webhooks/YOUR_WEBHOOK',
     url: process.env.WEBHOOK_URL || 'https://discord.com/api/webhooks/YOUR_WEBHOOK',
Строка 249: Строка 249:
}
}


\# Webhook endpoint для событий
// Webhook endpoint для событий
app.post('/api/webhook/event', (req, res) => {
app.post('/api/webhook/event', (req, res) => {
     const { event, data } = req.body;
     const { event, data } = req.body;
Строка 257: Строка 257:
});
});


\# Автоматические webhook события
// Автоматические webhook события
app.post('/api/server/start', async (req, res) => {
app.post('/api/server/start', async (req, res) => {
     try {
     try {
Строка 268: Строка 268:
});</pre>
});</pre>


== 5. Аутентификация API ===
== 5. Аутентификация API ==


=== Добавление токенов ===
=== Добавление токенов ===
Строка 275: Строка 275:
<pre>const API_TOKEN = process.env.API_TOKEN || 'your-secret-token';
<pre>const API_TOKEN = process.env.API_TOKEN || 'your-secret-token';


\# Middleware для проверки токена
// Middleware для проверки токена
function authenticate(req, res, next) {
function authenticate(req, res, next) {
     const token = req.headers['authorization']?.replace('Bearer ', '') || req.query.token;
     const token = req.headers['authorization']?.replace('Bearer ', '') || req.query.token;
Строка 286: Строка 286:
}
}


\# Применение к защищенным routes
// Применение к защищенным routes
app.post('/api/server/*', authenticate);
app.post('/api/server/*', authenticate);
app.get('/api/server/logs', authenticate);</pre>
app.get('/api/server/logs', authenticate);</pre>
Строка 293: Строка 293:
<pre>curl -H "Authorization: Bearer your-secret-token" http://localhost:3000/api/server/status</pre>
<pre>curl -H "Authorization: Bearer your-secret-token" http://localhost:3000/api/server/status</pre>


== 6. Примеры использования ===
== 6. Примеры использования ==


=== Получение статуса ===
=== Получение статуса ===
Строка 306: Строка 306:
=== Выполнение команды ===
=== Выполнение команды ===


<pre>curl -X POST http://localhost:3000/api/server/command \\
<pre>curl -X POST http://localhost:3000/api/server/command \
   -H "Content-Type: application/json" \\
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer your-secret-token" \\
   -H "Authorization: Bearer your-secret-token" \
   -d '{"command": "say Hello from API"}'</pre>
   -d '{"command": "say Hello from API"}'</pre>


Строка 315: Строка 315:
<pre>curl "http://localhost:3000/api/server/logs?lines=50"</pre>
<pre>curl "http://localhost:3000/api/server/logs?lines=50"</pre>


== 7. Настройка Nginx для API ===
== 7. Настройка Nginx для API ==


=== Проксирование ===
=== Проксирование ===
Строка 342: Строка 342:
sudo systemctl reload nginx</pre>
sudo systemctl reload nginx</pre>


== 8. Мониторинг через API ===
== 8. Мониторинг через API ==


=== Создание клиента ===
=== Создание клиента ===
Строка 367: Строка 367:
setInterval(checkServerStatus, 60000);</pre>
setInterval(checkServerStatus, 60000);</pre>


== 9. Безопасность ===
== 9. Безопасность ==


=== Рекомендации ===
=== Рекомендации ===
Строка 376: Строка 376:
4. Регулярно обновляйте зависимости
4. Регулярно обновляйте зависимости


== 10. Устранение неполадок ===
== 10. Устранение неполадок ==


=== Проблемы с API ===
=== Проблемы с API ===
Строка 388: Строка 388:
Настройка API и веб-хуков для Bedrock сервера позволяет интегрировать сервер с внешними системами и автоматизировать управление. REST API предоставляет удобный интерфейс для управления сервером программно.
Настройка API и веб-хуков для Bedrock сервера позволяет интегрировать сервер с внешними системами и автоматизировать управление. REST API предоставляет удобный интерфейс для управления сервером программно.


'''Для размещения ваших Bedrock серверов с API на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):'''
'''Для размещения ваших Bedrock серверов с API на надежном хостинге рекомендуем воспользоваться услугами [https://ark-hoster.ru ARK-HOSTER.RU]:'''


* '''[Выделенные серверы](https://ark-hoster.ru/dedicated/)''' - для высоконагруженных Bedrock серверов
* '''[https://ark-hoster.ru/dedicated/ Выделенные серверы]''' - для высоконагруженных Bedrock серверов
* '''[VPS/VDS серверы](https://ark-hoster.ru/vpsgame/)''' - для небольших и средних серверов
* '''[https://ark-hoster.ru/vpsgame/ VPS/VDS серверы]''' - для небольших и средних серверов


Наши специалисты помогут с настройкой API и веб-хуков для Bedrock серверов!
Наши специалисты помогут с настройкой API и веб-хуков для Bedrock серверов!

Текущая версия от 08:13, 14 ноября 2026

Настройка API и веб-хуков для Bedrock сервера

1. Подготовка

  • Убедитесь, что Bedrock сервер установлен и работает.
  • Установите Node.js или Python для создания API.
  • Имейте базовые знания веб-разработки.
  • Рекомендуется использовать Ubuntu 24.04 LTS.

2. Создание REST API

Установка Node.js

1. Установите Node.js:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

2. Проверьте установку:

node -v
npm -v

Создание проекта

1. Создайте директорию:

sudo mkdir -p /opt/bedrock-api
cd /opt/bedrock-api

2. Инициализируйте проект:

sudo npm init -y

3. Установите зависимости:

sudo npm install express body-parser cors axios

Базовый API сервер

1. Создайте файл app.js:

sudo nano app.js

2. Добавьте содержимое:

const express = require('express');
const { spawn } = require('child_process');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
const port = 3000;

app.use(cors());
app.use(bodyParser.json());

// Функция выполнения команд
function executeCommand(command) {
    return new Promise((resolve, reject) => {
        const proc = spawn('sudo', ['systemctl', ...command.split(' ')]);
        let output = '';
        let error = '';
        
        proc.stdout.on('data', (data) => {
            output += data.toString();
        });
        
        proc.stderr.on('data', (data) => {
            error += data.toString();
        });
        
        proc.on('close', (code) => {
            if (code === 0) {
                resolve(output);
            } else {
                reject(error || `Command failed with code ${code}`);
            }
        });
    });
}

// Функция отправки команды в консоль сервера
function sendServerCommand(command) {
    return new Promise((resolve) => {
        const proc = spawn('screen', ['-S', 'minecraft-bedrock', '-X', 'stuff', command + '\\n']);
        proc.on('close', () => {
            setTimeout(resolve, 1000);
        });
    });
}

// API Endpoints

// Статус сервера
app.get('/api/server/status', async (req, res) => {
    try {
        const result = await executeCommand('systemctl is-active minecraft-bedrock');
        const status = result.trim() === 'active' ? 'running' : 'stopped';
        res.json({ status });
    } catch (error) {
        res.json({ status: 'stopped', error: error.message });
    }
});

// Запуск сервера
app.post('/api/server/start', async (req, res) => {
    try {
        await executeCommand('systemctl start minecraft-bedrock');
        res.json({ success: true, message: 'Server started' });
    } catch (error) {
        res.status(500).json({ success: false, error: error.message });
    }
});

// Остановка сервера
app.post('/api/server/stop', async (req, res) => {
    try {
        await executeCommand('systemctl stop minecraft-bedrock');
        res.json({ success: true, message: 'Server stopped' });
    } catch (error) {
        res.status(500).json({ success: false, error: error.message });
    }
});

// Перезапуск сервера
app.post('/api/server/restart', async (req, res) => {
    try {
        await executeCommand('systemctl restart minecraft-bedrock');
        res.json({ success: true, message: 'Server restarted' });
    } catch (error) {
        res.status(500).json({ success: false, error: error.message });
    }
});

// Выполнение команды
app.post('/api/server/command', async (req, res) => {
    const { command } = req.body;
    
    if (!command) {
        return res.status(400).json({ error: 'Command is required' });
    }
    
    try {
        await sendServerCommand(command);
        res.json({ success: true, message: 'Command sent' });
    } catch (error) {
        res.status(500).json({ success: false, error: error.message });
    }
});

// Получение логов
app.get('/api/server/logs', (req, res) => {
    const fs = require('fs');
    const logFile = '/opt/bedrock/logs/latest.log';
    const lines = parseInt(req.query.lines) || 100;
    
    try {
        const content = fs.readFileSync(logFile, 'utf-8');
        const logLines = content.split('\\n').slice(-lines);
        res.json({ logs: logLines });
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

// Информация о сервере
app.get('/api/server/info', async (req, res) => {
    const fs = require('fs');
    
    try {
        const pid = require('child_process').execSync('pgrep bedrock_server').toString().trim();
        const memory = parseInt(require('child_process').execSync(`ps -o rss= -p ${pid}`).toString().trim()) / 1024;
        const cpu = require('child_process').execSync(`ps -o %cpu= -p ${pid}`).toString().trim();
        
        const props = {};
        const propsContent = fs.readFileSync('/opt/bedrock/server.properties', 'utf-8');
        propsContent.split('\\n').forEach(line => {
            if (line && !line.startsWith('#')) {
                const [key, value] = line.split('=');
                if (key && value) {
                    props[key.trim()] = value.trim();
                }
            }
        });
        
        res.json({
            pid,
            memory: memory.toFixed(2),
            cpu,
            properties: props
        });
    } catch (error) {
        res.status(500).json({ error: error.message });
    }
});

app.listen(port, () => {
    console.log(`Bedrock API server running on port ${port}`);
});

3. Запустите API:

sudo node app.js

3. Настройка systemd сервиса

Создание сервиса

1. Создайте файл сервиса:

sudo nano /etc/systemd/system/bedrock-api.service

2. Добавьте конфигурацию:

[Unit]
Description=Bedrock Server API
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/bedrock-api
ExecStart=/usr/bin/node app.js
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

3. Запустите сервис:

sudo systemctl daemon-reload
sudo systemctl enable bedrock-api
sudo systemctl start bedrock-api
sudo systemctl status bedrock-api

4. Настройка веб-хуков

Создание webhook endpoint

1. Добавьте в app.js:

const axios = require('axios');

// Webhook конфигурация
const webhookConfig = {
    url: process.env.WEBHOOK_URL || 'https://discord.com/api/webhooks/YOUR_WEBHOOK',
    enabled: true
};

function sendWebhook(event, data) {
    if (!webhookConfig.enabled) return;
    
    const payload = {
        content: `🚨 **${event}**\\n\\n${JSON.stringify(data, null, 2)}`
    };
    
    axios.post(webhookConfig.url, payload).catch(err => {
        console.error('Webhook error:', err.message);
    });
}

// Webhook endpoint для событий
app.post('/api/webhook/event', (req, res) => {
    const { event, data } = req.body;
    
    sendWebhook(event, data);
    res.json({ success: true });
});

// Автоматические webhook события
app.post('/api/server/start', async (req, res) => {
    try {
        await executeCommand('systemctl start minecraft-bedrock');
        sendWebhook('Server Started', { timestamp: new Date() });
        res.json({ success: true, message: 'Server started' });
    } catch (error) {
        res.status(500).json({ success: false, error: error.message });
    }
});

5. Аутентификация API

Добавление токенов

1. Обновите app.js:

const API_TOKEN = process.env.API_TOKEN || 'your-secret-token';

// Middleware для проверки токена
function authenticate(req, res, next) {
    const token = req.headers['authorization']?.replace('Bearer ', '') || req.query.token;
    
    if (token === API_TOKEN) {
        next();
    } else {
        res.status(401).json({ error: 'Unauthorized' });
    }
}

// Применение к защищенным routes
app.post('/api/server/*', authenticate);
app.get('/api/server/logs', authenticate);

2. Использование:

curl -H "Authorization: Bearer your-secret-token" http://localhost:3000/api/server/status

6. Примеры использования

Получение статуса

curl http://localhost:3000/api/server/status

Ответ:

{
  "status": "running"
}

Выполнение команды

curl -X POST http://localhost:3000/api/server/command \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer your-secret-token" \
  -d '{"command": "say Hello from API"}'

Получение логов

curl "http://localhost:3000/api/server/logs?lines=50"

7. Настройка Nginx для API

Проксирование

1. Создайте конфигурацию Nginx:

sudo nano /etc/nginx/sites-available/bedrock-api

2. Добавьте конфигурацию:

server {
    listen 80;
    server_name api.yourdomain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

3. Активируйте сайт:

sudo ln -s /etc/nginx/sites-available/bedrock-api /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

8. Мониторинг через API

Создание клиента

1. Пример JavaScript клиента:

const axios = require('axios');

const apiClient = axios.create({
    baseURL: 'http://localhost:3000/api',
    headers: {
        'Authorization': 'Bearer your-secret-token'
    }
});

async function checkServerStatus() {
    try {
        const response = await apiClient.get('/server/status');
        console.log('Server status:', response.data.status);
    } catch (error) {
        console.error('Error:', error.message);
    }
}

setInterval(checkServerStatus, 60000);

9. Безопасность

Рекомендации

1. Используйте HTTPS для внешнего доступа 2. Ограничьте доступ по IP 3. Используйте сильные токены 4. Регулярно обновляйте зависимости

10. Устранение неполадок

Проблемы с API

1. Проверьте логи:

sudo journalctl -u bedrock-api -f

2. Проверьте порт:

sudo netstat -tlnp | grep 3000

3. Проверьте права sudo

Заключение

Настройка API и веб-хуков для Bedrock сервера позволяет интегрировать сервер с внешними системами и автоматизировать управление. REST API предоставляет удобный интерфейс для управления сервером программно.

Для размещения ваших Bedrock серверов с API на надежном хостинге рекомендуем воспользоваться услугами ARK-HOSTER.RU:

Наши специалисты помогут с настройкой API и веб-хуков для Bedrock серверов!