Серверы
Список серверов, мониторинг онлайна, моды и RCON
К серверу привязаны товары, донат-группы, права, наигранное время и экономика. Пока нет ни одного сервера, магазин настроить не получится.
Создание
Управление контентом → Серверы → Создать.
| Поле | Зачем |
|---|---|
| ID | Короткий латинский идентификатор: hitech, magic, vanilla |
| Приоритет | Порядок в списках на сайте, по возрастанию |
| Название | Как сервер называется для игрока |
| Версия | Показывается в карточке, например 1.20.1 |
| Слоган | Строчка под названием |
| Описание | Короткий текст в списке серверов |
| Контент | Полная страница сервера с версткой |
| Иконка и обложка | Картинки в списке и на странице |
| Способ выдачи | Плагин или RCON, см. Выдачу покупок |
ID менять больно
Он попадает в URL страницы сервера, в API-запросы плагина, в записи экономики и наигранного времени. Смените его — и все ссылки протухнут, а плагин перестанет находить свой сервер. Выбирайте сразу.
Группы серверов
Серверы можно объединять в группы. Группа влияет только на вид списка на сайте: когда серверов больше пяти, их удобно разложить по темам «Технические», «Ванильные», «Ивентовые».
Мониторинг онлайна
В карточке сервера есть поля «Query хост» и «Query порт». Как только адрес заполнен, сайт опрашивает сервер каждые пять секунд и показывает онлайн на главной, в списке серверов и в карточке.
Онлайн приходит по вебсокету, страницу перезагружать не надо. Заодно копится история: график онлайна за период и абсолютный рекорд.
Порт нужен игровой
Несмотря на название полей, никакой GameSpy Query здесь не используется. Сайт стучится обычным Server List Ping — тем же запросом, которым клиент игры получает онлайн в списке серверов. Значит, включать enable-query в server.properties не нужно, а порт вписывайте игровой. Пустой порт означает 25565. На ответ отводится три секунды.
Несколько инстансов
У одного сервера в CMS может быть несколько игровых процессов, например лобби и три мира за прокси. Они заводятся в блоке «Серверы на одной сборке»: у каждого своё имя, адрес и порт. На сайте это по-прежнему один сервер с суммарным онлайном, а в админке видна разбивка по процессам.
Инстансы отменяют Query
Стоит появиться хотя бы одному инстансу, и поля «Query хост» и «Query порт» перестают опрашиваться совсем. Онлайн считается только по инстансам: игроки и слоты суммируются, а сервер считается поднятым, если ответил хоть один процесс.
Отсюда неприятный случай: если у инстансов не заполнены адреса, опрашивать нечего, и сервер навсегда останется офлайн — при живом и заполненном Query. Либо заполняйте адреса всем инстансам, либо удаляйте их и возвращайтесь к одному Query.
Таблица характеристик
Блок «Таблица» выводит на странице сервера произвольные пары из заголовка и значения: версия ядра, количество модов, тип экономики, режим PvP. Строки сортируются по приоритету и переводятся вместе с остальным контентом.
Моды
Общий справочник модов с иконками и описаниями лежит в разделе Управление контентом → Моды. В карточке сервера вы отмечаете установленные, и на странице сервера они выводятся сеткой.
Поэтому один и тот же мод, привязанный к трём серверам, заводится один раз.
RCON
В разделе RCON карточки сервера вы задаёте адрес, порт и пароль от консоли. Пароль хранится в базе зашифрованным на ENCRYPTION_KEY и наружу не отдаётся никогда, даже суперпользователю.
Рядом две кнопки. Проверить соединение открывает сессию и сообщает, подходит ли пароль; на попытку отводится пять секунд. Очередь команд показывает, что сайт отправил на сервер, что ждёт отправки и что упало. Про очередь подробно на странице Выдача покупок.
Обе кнопки работают только у сохранённого сервера. У нового сначала жмите «Сохранить», иначе получите подсказку «Сначала сохраните сервер».
Произвольную команду шлют через API
Кнопки «выполнить что-нибудь в консоли» в админке нет. Если нужно прогнать разовую команду, дёрните POST /rcon/:server/run с телом {"command": "..."} — ручка отдаёт ответ консоли. Права те же, что у карточки сервера.
RCON даёт полный доступ к консоли
Прав admin.servers.update и admin.dashboard хватит, чтобы выполнить на сервере что угодно, включая stop и op. Не выдавайте их широко.
Чтобы RCON вообще работал, в server.properties игрового сервера нужно:
enable-rcon=true
rcon.port=25575
rcon.password=длинный-парольИ порт не должен смотреть в интернет: RCON-протокол шлёт пароль почти открытым текстом. Если сайт и игровой сервер на разных машинах, гоняйте через приватную сеть или туннель.