RE:NODE

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

Сервер Starbound: конфиг и моды

Как запустить выделенный сервер Starbound: установка через SteamCMD, все ключи starbound_server.config, аккаунты и админы, порт 21025, команды, моды и backup вселенной.

0 прочтений

Выделенный сервер Starbound поставляется вместе с самой игрой: starbound_server (Linux) или starbound_server.exe (Windows) лежит рядом с исполняемым файлом игры, а скачивается он через SteamCMD с аккаунта, на котором куплен Starbound. Вся его конфигурация - один JSON-файл, storage/starbound_server.config, который создаётся при первом запуске. Сервер слушает TCP 21025, для маленькой группы ему нужно около 1-2 GB памяти (больше с крупными модами вроде Frackin' Universe), а общую вселенную он хранит в storage/universe. Персонажи остаются на компьютере каждого игрока. Моды - это файлы .pak в папке mods, и у всех игроков должны быть одни и те же.

Как работает сервер Starbound#

Мультиплеер в Starbound бывает двух видов. Хостинг из игры (или через друзей в Steam) держит вселенную на машине одного из игроков. Выделенный сервер запускает её отдельно, без привязки к игроку, поэтому вселенная - каждая посещённая планета, каждая колония, каждая база - существует независимо от того, в сети ли хост.

Что принадлежит серверу, а что клиенту:

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

Последняя крупная версия игры - 1.4.x, и разработка остановлена. Для владельца сервера это значит две вещи: сервер стабилен и хорошо изучен, а пробелы заполнило сообщество. Frackin' Universe - большой мод-переработка, а проекты сообщества вроде OpenStarbound предлагают модифицированные клиент и сервер с исправлениями и дополнительными возможностями. Это отдельные проекты со своей установкой; этот гайд описывает стандартный сервер, на котором до сих пор играет большинство групп.

Что хранится на сервере, а что путешествует с игроком

Разделение между сервером и клиентом объясняет большинство сюрпризов, с которыми сталкивается новый владелец сервера, поэтому в нём стоит разобраться точно.

Корабль игрока - часть персонажа, а не вселенной. Он сохраняется на машине игрока вместе с инвентарём, так что улучшения, декор и сундуки на корабле переезжают вместе с ним с сервера на сервер. Игрок, который набил сундуки корабля редкой рудой на одном сервере, придёт к вам со всем этим добром. Если у вас сервер с экономикой или с упором на прогрессию, это главная дыра, и закрывает её только правило «начинать новым персонажем» (поддерживаемое договорённостью или модом).

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

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

Практические правила, которые из этого следуют:

  • Сброс вселенной не затрагивает персонажей и корабли. Он стирает только планеты и колонии.
  • Потерянного персонажа сервер вернуть не может. Он живёт в собственной папке игрока storage/player; отправьте игрока к его локальным backup.
  • Восстановление всей вселенной откатывает все планеты разом. Каждая посещённая планета - отдельный файл .world, названный по её координатам, поэтому при остановленном сервере можно вернуть из backup и одну планету - найти её дольше, зато это честнее по отношению к остальным.
  • Координаты общие. Игроки обмениваются координатами хороших планет, и все, кто прилетает на одну планету, видят один и тот же мир. Именно это делает выделенный сервер общим местом, а не набором параллельных одиночных игр.

Требования и расход ресурсов#

Starbound почти не нагружает CPU и умеренно расходует память. Затраты складываются из числа загруженных миров - каждый игрок на отдельной планете означает ещё один мир в памяти - и из модов.

ГруппаRAMCPUПримечания
2-4 игрока, ваниль1-2 GB1 ядроБольшинство приватных групп
5-8 игроков, ваниль2-3 GB1-2 ядраИгроки разбредаются по планетам
Frackin' Universe, маленькая группа3-4 GB2 ядраБольшая загрузка ассетов при старте
Крупная сборка модов, 8+ игроков4-6 GB2 ядраПолностью зависит от модов
  • CPU: каждый загруженный мир симулируется отдельно, поэтому несколько игроков на нескольких планетах занимают несколько потоков. Один игрок обходится дёшево.
  • Диск: установка игры занимает несколько гигабайт; папка вселенной растёт с каждой посещённой планетой и на давно работающем сервере доходит до сотен мегабайт.
  • Сеть: скромные требования. Задержка важнее пропускной способности - см. статью задержка, джиттер и потеря пакетов.

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

Сервер - не отдельное анонимное приложение. Скачивается игра (app 211820) с аккаунта, который ею владеет:

bash
$ steamcmd +force_install_dir /home/starbound/game +login your_steam_user \    +app_update 211820 validate +quit

По возможности используйте запасной аккаунт со своей копией игры, а не тот, на котором играете: логин сохраняется там, где запущен SteamCMD, а Steam Guard при первом входе запросит код. В статье SteamCMD простыми словами разобраны процесс входа и то, почему некоторым играм нужен аккаунт с покупкой, хотя большинству - нет.

Бинарный файл сервера лежит в папке платформы:

bash
$ cd /home/starbound/game/linux$ ./starbound_server

В Windows запускайте win64\starbound_server.exe. При первом запуске сервер читает ассеты игры, создаёт storage/ в корне игры, записывает starbound_server.config со значениями по умолчанию и начинает слушать порт. Один раз корректно остановите его, а затем правьте конфиг.

starbound_server.config, ключ за ключом#

Файл в формате JSON. Типичная отредактированная версия:

storage/starbound_server.config
{  "serverName": "Kluex Station",  "maxPlayers": 8,  "gameServerBind": "*",  "gameServerPort": 21025,  "allowAnonymousConnections": false,  "anonymousConnectionsAreAdmin": false,  "allowAdminCommandsFromAnyone": false,  "allowAssetsMismatch": false,  "checkAssetsDigest": false,  "maxTeamSize": 4,  "serverUsers": {    "nova": { "admin": true, "password": "change-me-long-one" },    "kai": { "admin": false, "password": "another-long-one" }  },  "bannedIPs": [],  "bannedUuids": [],  "runQueryServer": false,  "queryServerPort": 21025,  "runRconServer": false,  "rconServerPort": 21026,  "rconServerPassword": ""}

Что делают важные ключи:

КлючПо умолчаниюЧто делает
serverNameобщееИмя, которое видят игроки
maxPlayers8Число одновременных игроков
gameServerPort21025Игровой порт, TCP
gameServerBind*Адрес для привязки; * - все
allowAnonymousConnectionstrueРазрешает вход без аккаунта
anonymousConnectionsAreAdminfalseВсегда оставляйте false
allowAdminCommandsFromAnyonefalseПри true админы все
allowAssetsMismatchtrueПускает клиентов с другими модами
checkAssetsDigestfalseОтклоняет клиентов с отличающимися ассетами
serverUsersпустоИменные аккаунты с паролями и флагом админа
bannedIPs, bannedUuidsпустоСписки банов, правятся командами или вручную
runRconServerfalseВключает RCON в стиле Source
rconServerPort21026Порт RCON, TCP

Помимо них, maxTeamSize ограничивает размер группы, clearUniverseFiles и clearPlayerFiles стирают данные при запуске (оставляйте false, если не уверены, что вам это нужно), а serverFidelity задаёт уровень детализации симуляции - automatic подходит почти всем.

Аккаунты против анонимной игры

Пароля на вход как такового в Starbound нет. Доступом управляет блок serverUsers: каждая запись - это имя аккаунта с паролем и флагом админа. Если allowAnonymousConnections выключен, зайти могут только эти аккаунты. Игроки вводят имя аккаунта и пароль в окне подключения вместе с адресом.

На публичном сервере анонимные подключения включены, а модерация держится на списке банов; на приватном аккаунты проще и надёжнее, чем надежда, что никто не угадает адрес.

Несовпадение ассетов и контроль модов

allowAssetsMismatch и checkAssetsDigest определяют, что происходит, когда моды клиента отличаются от серверных. Значения по умолчанию мягкие, поэтому игрок без сборки модов может подключиться - и затем видит пропавшие предметы, невидимые блоки или вылетает, прилетев на модифицированную планету. Для сервера с модами строгая комбинация (allowAssetsMismatch false, checkAssetsDigest true) превращает эту неразбериху в понятный отказ на входе. Подвох в том, что тогда каждый клиент должен совпадать в точности, включая чисто клиентские косметические моды, так что это подходит группам с общим фиксированным списком модов.

Порты и подключение#

ПортПротоколНазначение
21025TCPИгровой трафик
21025UDPQuery в стиле Steam, только если runQueryServer включён
21026TCPRCON, только если runRconServer включён

Starbound необычен среди игровых серверов тем, что использует для игры TCP. Правило файрвола, открывающее только UDP - правильный выбор для большинства игр, - оставит сервер Starbound недоступным. Разница разобрана в статье порты игровых серверов простыми словами.

Игроки заходят через Multiplayer, Join Server и вводят адрес, порт, а также имя аккаунта и пароль, если вы используете аккаунты. Друзья в Steam могут подключиться и через оверлей Steam к серверам, которые они видят. Внятного публичного браузера серверов у Starbound нет, поэтому серверы сообществ рекламируются на форумах и в Discord - доменное имя, направленное на сервер, упрощает передачу адреса; см. статью как подключить домен к игровому серверу.

Команды админа#

Админы - это аккаунты с "admin": true в serverUsers. Зайдя на сервер, админ вводит /admin в чат, чтобы переключить режим админа: пока он включён, доступны админские команды и возможности в духе творческого режима.

КомандаДействие
/helpПоказывает доступные вам команды
/adminПереключает режим админа
/listПоказывает подключённых игроков
/kick <name>Отключает игрока
/ban <name> <reason> <ip/uuid/both> <seconds>Банит игрока; аргументы зависят от сборки
/whereamiВыводит ваш текущий мир
/warp <location>Перемещает вас в мир или по координатам
/spawnitem <item> <count>Создаёт предмет

Аргументы бана немного менялись от сборки к сборке; /help ban на вашей версии покажет точный формат. Баны записываются в bannedIPs и bannedUuids в конфиге, поэтому переживают перезапуски, а снять их можно, отредактировав файл при остановленном сервере.

Используйте RCON, только если вам нужно удалённое администрирование из какой-то программы, и только с длинным паролем - статья как безопасно пользоваться RCON объясняет, почему открытый порт RCON - частый путь внутрь игрового сервера.

Моды на сервере Starbound#

Моды Starbound - это архивы .pak, иногда просто папки, которые кладутся в папку mods в корне игры - одинаково на сервере и на клиенте.

Как перенести их на сервер:

  1. На клиенте подпишитесь на моды в Steam Workshop. Каждый мод скачивается в steamapps/workshop/content/211820/<id>/ как contents.pak.
  2. Скопируйте каждый contents.pak в папку mods на сервере, переименовав во что-то понятное, например frackinuniverse.pak - два файла не могут одновременно называться contents.pak.
  3. Перезапустите сервер и следите за логом на предмет ошибок, пока грузятся ассеты.

Выделенный сервер сам на предметы Workshop не подписывается, поэтому обновление в Workshop не доходит до сервера, пока вы не скопируете новый файл. Это удобно: вы сами решаете, когда обновляться, а не обнаруживаете, что сервер изменился без вас. Однако игроки, подписанные через Workshop, обновляются автоматически, поэтому объявляйте об обновлениях и копируйте новые pak-файлы в тот же день. Статья моды из Steam Workshop на выделенных серверах разбирает эту схему и для других игр.

Правила, которые спасают сервер:

  • Крупные переработки - первыми и по отдельности. Frackin' Universe меняет так много, что другим модам нужны совместимые с FU версии. Начните с него одного, убедитесь, что сервер запускается чисто, затем добавляйте совместимые моды по одному.
  • Никогда не удаляйте контентный мод из живой вселенной. Планеты и персонажи, в которых есть блоки или предметы мода, при загрузке без него могут вылетать или повреждаться.
  • Чисто клиентские моды (интерфейс, музыка, косметика) на сервере не нужны, если вы не включили проверку digest.

Backup, обновления и сбросы#

Всё состояние сервера - это папка storage: universe (миры и звёздные данные) плюс конфиг. Сделайте backup storage, и сервер можно будет пересобрать на свежей установке.

  • Останавливайте сервер перед копированием `universe`. Миры записываются, пока они загружены, и копия, снятая посреди записи, может содержать наполовину сохранённую планету.
  • Делайте backup перед добавлением или удалением модов. Удаление контентного мода - самый частый способ сломать вселенную.
  • Храните копии вне машины. Почему копии на том же диске не считаются, объясняет статья backup, которые действительно восстанавливаются.

Обновления теперь выходят редко. Когда выходят, обновляйте сервер через SteamCMD одновременно с клиентами, потому что Starbound не пускает клиентов с другой версией.

Сброс - новая вселенная - сводится к тому, чтобы остановить сервер и переместить storage/universe в сторону. Персонажей это не затрагивает, ведь они хранятся у клиентов.

В RE:NODE у каждого игрового сервера есть SFTP и файловый менеджер в браузере для папок mods и storage, а также слоты backup, которые можно ставить по расписанию, защищать от ротации и восстанавливать одной кнопкой. Starbound в каталоге нет, так что воспринимайте это как возможности панели, а не как тариф для Starbound.

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

Никто не может подключиться, хотя сервер пишет, что слушает порт. Порт открыт только для UDP. Starbound нужен TCP 21025.

Игроки получают «Incorrect password» или «No such user». Когда allowAnonymousConnections выключен, нужно ввести аккаунт из serverUsers в точности, с учётом регистра.

Сервер падает, когда кто-то варпается на планету. На этой планете есть контент мода, который на сервере отсутствует или устарел. Найдите в логе путь к недостающему ассету - в нём указан мод.

Игроки видят невидимые блоки и пропавшие предметы. Их моды отличаются от серверных, а проверка ассетов мягкая. Поделитесь точным списком pak-файлов или включите строгую проверку.

Конфиг сбрасывается после правки. Синтаксическая ошибка JSON - пропущенная запятая или кавычка. Проверяйте файл перед сохранением.

Сервер останавливается через несколько часов без всяких сообщений. Обычно дело в памяти. Посмотрите графики и статью почему ваш игровой сервер постоянно перезапускается.

FAQ#

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

Сервер нужно скачивать с аккаунта, на котором есть игра, потому что он входит в её файлы. Игрокам тоже нужны собственные копии.

Могут ли игроки прийти на мой сервер со своими персонажами?

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

Сколько игроков вмещает сервер Starbound?

maxPlayers по умолчанию равен 8, и его можно увеличить. Память и CPU растут с числом одновременно загруженных миров, поэтому разбредающиеся группы обходятся дороже, чем те, что играют вместе.

Будут ли моды из Workshop скачиваться на сервер автоматически?

Нет. Выделенный сервер не подписывается на предметы Workshop. Копируйте .pak каждого мода в папку mods на сервере и обновляйте его сами.

Сильно ли Frackin' Universe нагружает сервер?

Он заметно увеличивает расход памяти при старте и на загруженных мирах и замедляет первый запуск, пока грузятся ассеты. Маленькие группы спокойно играют с ним на 3-4 GB.


Комментарии

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

0/2000