Перейти к содержимому

Свой сервер

Попасть в список серверов

Сервер без ключа работает точно так же, и на него можно зайти по адресу через Прямое подключение. Но в списке серверов его нет, а имена игроков он не проверяет.

С ключом сервер сообщает о себе NodeMP, появляется в лаунчере и на nodemp.com/servers, а аккаунт каждого игрока проверяется при входе.

Нужен аккаунт NodeMP с подтверждённой почтой и привязанным Discord. Discord привязывается в разделе Подключения аккаунта.

  1. Войдите на nodemp.com и откройте Мои серверы.
  2. Введите название, по которому вы узнаете сервер, и создайте ключ.
  3. Сайт покажет Host ID и Host secret. Секрет показывается один раз — скопируйте его сразу.

Один ключ — для одного сервера. В Моих серверах видно все ключи и когда каждый сервер последний раз выходил на связь.

В server.toml уже есть таблица [listing] с пустыми url, host_id и host_secret. Заполните их:

[listing]
url = "https://api.nodemp.com"
host_id = "…"
host_secret = "…"

То же самое переменными окружения, для Docker или systemd. Эти имена не менялись:

NODE_DIRECTORY_URL=https://api.nodemp.com
NODE_DIRECTORY_HOST_ID=…
NODE_DIRECTORY_HOST_SECRET=…

Перезапустите сервер. Нужны все три значения. Если url пустой, сервер просто не сообщает о себе; если url задан, а ключа нет, сервер запустится без списка и напишет об этом в логе. Храните секрет как пароль.

При запуске сервер пишет в лог announcing this server to https://api.nodemp.com, а когда ключ принят — listed in the server browser. Потом он регулярно, обычно раз в 15 секунд, сообщает своё имя, карту, число игроков и мест, теги и список модов. Если NodeMP недоступен, сервер продолжает работать и повторяет попытки сам.

Ещё NodeMP проверяет снаружи, что до сервера можно достучаться по его порту. Недоступный сервер в списке не показывается, даже если в логе есть listed in the server browser. Поэтому порт должен быть открыт и проброшен, а проверять его нужно не из своей сети.

Пока сервер в списке, каждый вход проходит проверку: лаунчер игрока приносит одноразовый билет, сервер сверяет его с NodeMP и получает имя аккаунта. Игрок в режиме Test Drive получает гостевое имя. Сервер без ключа ничего не проверяет и берёт имя, которое прислал лаунчер.

Остальные ключи [listing] задают карточку сервера и то, кого он пускает:

[listing]
description = "Фрирум на West Coast, без таранов"
mode = "freeroam"
tags = "freeroam, no-crash, ru"
guests = true
  • description — одно-два предложения под именем.
  • mode — одно слово, отдельная колонка в списке: freeroam, racing, roleplay…
  • tags — до восьми тегов через запятую. По ним игроки фильтруют список.
  • guests = false не пускает игроков без аккаунта. В лаунчере такой сервер помечен «Нужен аккаунт».
  • public = false убирает сервер из общего списка. Те, кто знает адрес, по-прежнему видят его онлайн.
  • admit_when_down решает, что делать, если NodeMP недоступен в момент входа: false (по умолчанию) — не пускать, true — пускать как непроверенного гостя.

fingerprint, ca_file и allow_http нужны только для собственного каталога серверов. Для api.nodemp.com их не пишут.

В подробностях о сервере, под картой, лаунчер и nodemp.com/servers показывают кнопки на собственные страницы сервера, и на каждой написан её домен. Ссылок пять, все в [listing]:

[listing]
discord = "https://discord.gg/abc123"
rules = "https://example.com/rules"
site = "https://example.com"
donate = "https://example.com/donate"
voice = "mumble://voice.example.com:64738"
  • Ссылка начинается с https://. Для voice можно ещё mumble:// или ts3server://: такой адрес не открывается, а копируется, потому что открыть его может только программа голосового чата.
  • discord должен быть приглашением: https://discord.gg/… или https://discord.com/invite/….
  • Не длиннее 256 символов, без пробелов и без user:password@.
  • Ссылку, которая нарушает эти правила, сервер при запуске выбрасывает и предупреждает, назвав ключ: [listing] discord = "…" is not a link the server list shows: …; left out. Всё остальное в списке работает как обычно.

В окружении это NODE_DIRECTORY_LINK_DISCORD, NODE_DIRECTORY_LINK_RULES, NODE_DIRECTORY_LINK_SITE, NODE_DIRECTORY_LINK_DONATE и NODE_DIRECTORY_LINK_VOICE.

В карточке сервера показывается картинка карты. Откуда она берётся:

  1. Из preview, если он задан: ваш JPEG или PNG до 2 МБ. Относительный путь считается от рабочей папки.
  2. Иначе для своей карты из content/ — её собственная картинка из архива.
  3. Для стоковой карты NodeMP показывает картинку из игры, сервер ничего не отправляет.

Лаунчеры узнают сервер по отпечатку его TLS-сертификата. Он пишется в лог при каждом запуске: TLS 1.3 enabled — certificate fingerprint (SHA-256): …. Отпечаток меняется, только если потерять или заменить node_cert.pem и node_key.pem, поэтому их стоит хранить в резервной копии. Игроки, которые заходили по адресу, запоминают отпечаток и не подключатся к серверу с другим.

В Моих серверах кнопка Сменить секрет выдаёт новый секрет (он тоже показывается один раз), а старый перестаёт работать. Впишите новый host_secret и перезапустите сервер. Делайте так, если секрет мог утечь. Удалить удаляет ключ: сервер продолжит работать, но из списка пропадёт.

В логе Почему Что сделать
The directory refused this server's credentials: … Неверный Host ID или секрет, секрет сменили или ключ удалили. Сверьте с Моими серверами. Если сомневаетесь, смените секрет и впишите новый.
This server is NOT announced to a directory: … Нет host_id или host_secret. Заполните url, host_id и host_secret в [listing].
server.toml has settings this server does not read: [listing] Url, … Ключи записаны под именами из версий до 1.9.0, а сервер — версии 1.9.0. Впишите их как url, host_id и host_secret или обновите сервер до 1.9.1.
Could not reach the directory at https://api.nodemp.com: … Нет исходящего HTTPS, не работает DNS или NodeMP недоступен. Проверьте curl https://api.nodemp.com/healthz на машине сервера. Сервер повторяет попытки сам.
listed in the server browser, но в лаунчере сервера нет NodeMP не достаёт до порта снаружи, или стоит public = false. Откройте и пробросьте порт. Список обновится примерно через 15 секунд.
Игроков не пускает с The server could not verify your account with the directory (…) NodeMP был недоступен, когда они заходили. Подождите. На сервере с Test Drive можно включить admit_when_down.