RE:NODE

Руководства11 мин чтения

Выделенный сервер Rust: установка и порты

Установите RustDedicated через SteamCMD, соберите рабочую строку запуска, откройте нужные порты и пройдите первый запуск и генерацию карты без сюрпризов.

0 прочтений

Выделенный сервер Rust - это бесплатная программа RustDedicated (приложение Steam 258550), которая ставится через SteamCMD и настраивается почти целиком парами +convar value в строке запуска. Ей нужен один UDP-порт для игроков, query-порт для браузера серверов, TCP-порт для RCON, 8-16 ГБ памяти в зависимости от размера карты и числа игроков и быстрое ядро CPU. Первый запуск генерирует карту - это занимает минуты и становится самым прожорливым по памяти моментом в жизни сервера. Всё, что ниже, - подробности за этими фразами, в том порядке, в каком они вам понадобятся.

Что такое RustDedicated и как устроен хостинг#

Facepunch поставляет сервер как отдельное приложение Steam без графики и без меню. Он работает на Windows (RustDedicated.exe) и на Linux (RustDedicated), и обе сборки полноценные: большинство community- и хостинговых серверов работает на Linux-сборке. В отличие от CS2 или Unturned, запрашивать токен игрового сервера Steam не нужно - сервер Rust сам регистрируется в мастер-списке Steam.

Три идеи объясняют почти всё в устройстве сервера Rust:

  • Папка identity. +server.identity "main" задаёт имя папки внутри server/. Карта, сохранение, базы данных игроков и конфигурационные файлы лежат именно там. Смените identity - и сервер начнёт совершенно новый мир в новой папке, не удаляя старую.
  • Convar-ы в командной строке. Настройки - это консольные переменные (server.hostname, server.worldsize, decay.scale). Их задают в строке запуска с + впереди, в server/<identity>/cfg/server.cfg без него или прямо в консоли на лету. Некоторые имеют смысл только при старте - порт, identity, карта - и должны стоять в строке запуска.
  • Ежемесячное обновление. В первый четверг каждого месяца Facepunch выпускает обновление клиента и сервера одновременно. Пока вы не обновитесь, игроки не смогут зайти, а старая карта не загрузится. Этот ритм определяет всё - от способа установки до работы с модами. Календарь разобран в статье о ежемесячном принудительном вайпе.

В браузере серверов для вас важны три вкладки. Official - это собственные серверы Facepunch. Community - для серверов, которые играются как ванилла. Modded - для всего, что меняет геймплей: рейты добычи, киты, размеры стаков. Где вас покажут, отчасти решаете вы, а отчасти - то, что вы установили; правила разобраны в статье о рейтах добычи и китах на модовом сервере.

Требования и потребление ресурсов#

Rust - одна из самых тяжёлых для хостинга популярных survival-игр. Потребление памяти растёт с размером мира и с тем, что строят игроки, и то и другое увеличивается в течение цикла между вайпами. Рассчитывайте на последний день перед вайпом, а не на первый.

КонфигурацияРазмер мираRAMCPU
Друзья, до 10 игроков2000-30006-8 GB2 быстрых ядра
Небольшое сообщество, 20-503000-35008-12 GB2-3 быстрых ядра
Активное сообщество, 75-1253500-425012-16 GB3-4 быстрых ядра
Большой модовый, 150+4250-450016-24 GB4+ быстрых ядра
  • CPU: симуляция идёт в основном в одном главном потоке, поэтому тактовая частота и производительность на ядро определяют, сколько игроков и сущностей выдержит сервер. Дополнительные ядра помогают с сетью, сохранением и компиляцией плагинов, но не с главным циклом. Подробнее об этом - в статье CPU или RAM для игровых серверов.
  • Диск: установка занимает около 10 ГБ и с годами растёт. Файлы сохранения за один вайп весят от десятков до нескольких сотен МБ, плюс backup-копии. Чтобы было с запасом для Oxide или Carbon, логов и пары сохранённых сейвов, закладывайте 25-40 ГБ.
  • Сеть: на игрока немного, но Rust плохо переносит потерю пакетов. Сервер в центральной Европе хорошо обслуживает весь континент; игроки с других континентов почувствуют расстояние, что бы вы ни делали.

Цифры приблизительные, потому что два сервера одного размера могут различаться на гигабайты в зависимости от того, сколько строят игроки. Что на самом деле влияет на эти цифры, разобрано в статье о производительности сервера и числе сущностей, а запланированная статья о том, сколько RAM нужно серверу Rust подробнее разбирает расчёт ресурсов.

Установка через SteamCMD#

На машине, которой вы управляете сами, сервер устанавливает и обновляет SteamCMD. Анонимный вход работает; аккаунт Steam с купленным Rust не нужен.

bash
$ mkdir -p /home/rust/server$ steamcmd +force_install_dir /home/rust/server +login anonymous \    +app_update 258550 validate +quit

Порядок аргументов важен: +force_install_dir должен идти до +login, иначе текущие сборки SteamCMD выдают предупреждение и могут поставить сервер не туда. validate сверяет каждый файл с манифестом. Это медленно, но это единственный надёжный способ починить недокачанное обновление и правильный выбор по умолчанию в день вайпа. Сам инструмент подробно разобран в статье SteamCMD: как он работает.

Вместе с релизной сборкой Facepunch публикует ветку staging. Это обновление следующего месяца, выпущенное заранее, и именно на нём стоит тестировать плагины перед принудительным вайпом:

bash
$ steamcmd +force_install_dir /home/rust/staging +login anonymous \    +app_update 258550 -beta staging validate +quit

Ставьте staging в отдельную папку. Релизные клиенты не могут зайти на staging-сервер, и наоборот, так что это тестовый стенд, а не второй публичный сервер.

Строка запуска, параметр за параметром#

Вот полная строка запуска для сервера на Linux. На Windows всё то же самое, кроме имени исполняемого файла и символов переноса строки.

start.sh
#!/bin/bashcd /home/rust/serverexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/RustDedicated_Data/Plugins/x86_64./RustDedicated -batchmode -nographics -logfile - \  +server.identity "main" \  +server.port 28015 \  +server.queryport 28017 \  +rcon.port 28016 +rcon.web 1 +rcon.password "change-me-long-random" \  +app.port 28082 \  +server.level "Procedural Map" \  +server.seed 1234567 \  +server.worldsize 3500 \  +server.maxplayers 75 \  +server.hostname "Longship | EU | Biweekly" \  +server.description "Vanilla. Wipes every other Thursday. Discord in the URL." \  +server.url "https://example.com" \  +server.saveinterval 300
ПараметрЧто делает
-batchmode -nographicsФлаги Unity: без окна и без рендера
-logfile -Пишет лог в стандартный вывод, а не в файл
+server.identityЗадаёт папку внутри server/, где хранится этот мир
+server.portИгровой порт, к которому подключаются игроки, UDP
+server.queryportПорт, который опрашивает браузер Steam, UDP
+rcon.port, +rcon.web, +rcon.passwordУдалённая консоль через WebSocket
+app.portПорт приложения-компаньона Rust+, TCP
+server.levelProcedural Map, Barren или фиксированная карта вроде HapisIsland
+server.seed, +server.worldsizeКакая процедурная карта и какого размера
+server.maxplayersСлоты; лишние игроки ждут в очереди
+server.hostnameНазвание в браузере - самый читаемый текст, который у вас есть
+server.saveintervalИнтервал между сохранениями мира в секундах

Несколько правил экономят часы. Берите в кавычки любое значение с пробелами. Не ставьте + перед строками в server.cfg - этот синтаксис только для строки запуска. И держите convar-ы, определяющие карту (level, seed, worldsize), в строке запуска, чтобы то, что вы видите в скрипте, и было тем, из чего сгенерирована карта. Всё, что должно жить в конфигурационном файле, разобрано в статье о server.cfg и convar-ах.

Если не указать +server.seed, сервер выберет его сам и будет использовать для этого сохранения. Если позже поменять seed или размер, сервер сгенерирует новую карту - старую он не конвертирует.

Порты и firewall#

ПортПротоколНазначение
28015UDPИгровой трафик, задаётся server.port
28017UDPЗапросы Steam для браузера, задаётся server.queryport
28016TCPRCON, WebSocket при rcon.web 1
28082TCPПриложение-компаньон Rust+, задаётся app.port

Номера выше - договорённость, а не закон. Важно, чтобы все порты были разными и доступны по нужному протоколу. Типичные ошибки: открыть игровой порт только по TCP, допустить совпадение query-порта с RCON и вовсе забыть про query-порт - тогда сервер работает по прямому подключению, но никогда не появляется в браузере.

По умолчанию порт Rust+ вычисляется от игрового (28015 плюс 67 дают привычный 28082), поэтому если вы переносите игровой порт, явно задайте app.port на порт, который у вас действительно есть. Недоступный порт приложения ничем не вредит, кроме того что приложение-компаньон не сможет подключиться, - игроки это заметят и сообщат, что «Rust+ сломан». Сильнее всего стоит подумать о порте RCON, потому что это защищённый паролем админский интерфейс в открытом интернете. Подробно об этом - в статье Rust RCON и WebRCON, а основы о query-портах есть в статье о портах игровых серверов.

Игроки подключаются из консоли F1 командой client.connect 203.0.113.10:28015 или через браузер, когда сервер появится в списке. Появление в списке обычно занимает несколько минут после старта; прямое подключение работает сразу.

Первый запуск и генерация карты#

Первый запуск не показателен. Сервер больше ничего не скачивает, но ему нужно сгенерировать всю процедурную карту: рельеф, топологию, монументы, дороги, реки, а затем заполнить популяции ресурсов и животных. На карте 3500 это занимает несколько минут на быстром CPU; на карте 4500 - заметно дольше, с долгими отрезками, когда лог как будто стоит на месте.

Что вы увидите, примерно по порядку:

  1. Загрузку бандлов ассетов и префабов.
  2. Сообщения о генерации карты, затем запись файла карты как proceduralmap.<size>.<seed>.<version>.map.
  3. Заполнение популяций спавна.
  4. Регистрацию сервера в Steam и строку о том, что запуск сервера завершён.

Подключаться имеет смысл только после последнего шага. Если запустить клиент раньше, будут таймауты, похожие на проблему с сетью.

Здесь чаще, чем где-либо ещё, ломаются две вещи. Первая - память: генерации ненадолго нужно больше, чем готовой карте, поэтому сервер, которому хватает памяти в игре, может быть убит во время первого запуска. Если первый старт падает, а второй, с меньшим worldsize, проходит, причина была в этом. Вторая - диск: при генерации записываются карта и первое сохранение, так что почти заполненный диск подводит именно здесь раньше, чем где-либо ещё.

Последующие запуски загружают уже готовые файлы .map и .sav и проходят гораздо быстрее. Сохранение записывается каждые server.saveinterval секунд и при корректном выключении командой quit.

Как стать админом и что сделать в первый час#

Выдайте себе статус владельца из консоли сервера по своему SteamID64, а затем запишите это на диск:

code
ownerid 76561198012345678 "YourName" "server owner"server.writecfg

После выдачи переподключитесь: уровень доступа применяется при входе. Без server.writecfg права живут только в памяти и пропадают при следующем перезапуске - отсюда классическая жалоба «у меня пропала админка». Полный список команд - в статье об админских командах Rust.

Что стоит сделать в первый час:

  1. Задайте server.description, server.url и картинку-заголовок, чтобы панель информации о сервере не была пустой.
  2. Определитесь с периодичностью вайпов и укажите её в названии сервера.
  3. Решите, будет сервер ванильным или модовым. Если модовым - ставьте Oxide (uMod) или Carbon до того, как откроете двери, а не после.
  4. Сделайте backup папки identity сразу после генерации мира, чтобы у вас была чистая отправная точка.

Запуск в панели или на своей машине#

На своём Linux-сервере запускайте скрипт под systemd или внутри tmux либо screen, чтобы он пережил вашу SSH-сессию, и оберните его в цикл или политику перезапуска, чтобы после краша сервер поднимался сам. На Windows ту же работу делает файл .bat с циклом goto. В любом случае процесс обновления на вас: остановка, SteamCMD, запуск.

В панели на базе Pterodactyl строку запуска собирают за вас из переменных вкладки Startup (название, размер мира, seed, порты), а обновление обычно происходит при старте. Многие egg-и для Rust управляют консолью панели через WebRCON, а не через стандартный ввод, поэтому прочитайте примечания к egg-у, прежде чем выключать rcon.web.

Панель RE:NODE построена на Pterodactyl и Wings. Порты добавляются и удаляются на вкладке Network, игровые переменные и переменные окружения находятся на вкладке Startup, а вкладка Schedules выполняет cron-выражение с упорядоченными задачами, например backup, а за ним перезапуск. Rust пока нет в каталоге игр, поэтому если вы хотите запускать его сами на железе, которое обслуживаем мы, честный вариант - линейка VDS: целая машина с 8, 16 или 24 ГБ памяти, где вы ставите RustDedicated ровно так, как описано выше.

Решение проблем при первом запуске#

Сервер сразу завершается на Linux. Проверьте строку с путём к библиотекам и то, что RustDedicated исполняемый. Запускайте его из папки установки, а не откуда-то ещё.

Сервер запускается, но не появляется в браузере. Query-порт закрыт, открыт не по тому протоколу или совпадает с другим портом. Сначала проверьте прямое подключение - если оно работает, дело в query-порте.

Игроки получают «Connection attempt failed». Игровой порт недоступен по UDP, или игроки указывают в команде подключения порт RCON или query.

«Disconnected: Wrong connection protocol». Сборки сервера и клиента различаются. После ежемесячного обновления запустите SteamCMD с validate и перезапустите сервер; если вы на staging, вернитесь на релиз.

Первый запуск убивается без ошибки. Память при генерации карты. Уменьшите server.worldsize или дайте больше памяти, затем попробуйте снова.

После перезапуска появилась новая карта. Изменились seed, размер мира или identity, либо обновление поменяло версию сохранения. Имя файла .map подскажет, с каким seed и размером сервер генерировал карту в последний раз.

FAQ#

Сколько стоит содержать сервер Rust?

Программа бесплатная; платите вы за машину. Rust нужно больше памяти, чем большинству игр, - 8 ГБ это реалистичный минимум для публичного сервера, а 12-16 ГБ нормальны для загруженного, - поэтому он находится в верхней части ценового диапазона игровых серверов. Варианты сравниваются в статье о том, сколько стоит игровой сервер.

Можно ли запустить сервер Rust на Windows?

Да, Windows-сборка полностью поддерживается, а некоторые админские инструменты работают только на Windows. Для хостинга чаще выбирают Linux, потому что операционная система там потребляет меньше памяти и автоматизация даётся проще.

Нужно ли покупать Rust, чтобы держать сервер?

Нет. SteamCMD скачивает приложение 258550 с анонимным входом. Игра нужна, чтобы зайти на сервер, а не чтобы его держать.

Сколько игроков выдерживает сервер Rust?

У server.maxplayers нет низкого жёсткого потолка; реальный предел - CPU и память. Сервер с правильно подобранными ресурсами держит 100-200 игроков, но большинству community-серверов комфортнее на 50-100 с соответствующим размером мира.

Чем server.port отличается от server.queryport?

server.port несёт игровой трафик. server.queryport отвечает на вопросы браузера Steam о названии, карте и числе игроков. Это должны быть разные порты, и оба работают по UDP.

Почему мой сервер Rust с каждым днём потребляет больше памяти?

Игроки строят, а каждая стена, ящик и установленный предмет - это сущность, которую сервер держит в памяти. Потребление растёт в течение цикла вайпа и сбрасывается, когда вы вайпаете карту.


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000