Что понадобится
- Операционная система: 64-битная машина с Linux (выделенному серверу под Linux нужен
start_server.sh) или Windows (разработчик добавил сборку выделенного сервера для Windows в Build 174.2).
- Железо: разработчик не публикует требования к выделенному серверу. На странице Steam указано только то, что нужно клиенту игры.
- Сеть: игровой порт, в примере конфига ниже 7777, доступный из интернета. В наших тестах сервер записал в лог игровой слушатель как UDP на этом порту. Начиная с B897 разработчик пишет, что браузер серверов пингует серверы и читает их состояние по TCP, не называя порт.
- Аккаунт Steam: для загрузки сервера не нужен. В нашей команде установки используется
+login anonymous.
- Игра: Puck бесплатна в Steam для Windows, macOS и Linux, поэтому друзьям ничего покупать не нужно.
Серверное ПО бесплатное. Вы платите за машину, электричество и трафик, а не за программу.
Вариант 1: разместить самому
Запустить собственный сервер можно двумя способами. Быстрый встроен в игру: начиная с Build 174.2 в меню New Server есть вкладка SELF HOSTED, которая размещает сервер на вашем ПК, а Puck пытается пробросить порты через uPnP, что некоторые роутеры и провайдеры не разрешают. Для сервера, который должен работать постоянно, используйте выделенный сервер ниже.
Linux (Debian или Ubuntu)
- Установите библиотеку, нужную SteamCMD, и curl для следующего шага.
sudo apt-get update
sudo apt-get install lib32gcc-s1 curl
- Создайте пользователя
steam и установите SteamCMD от его имени. Valve предупреждает, что запуск SteamCMD от root опасен для безопасности.
sudo useradd -m steam
sudo -iu steam
mkdir ~/Steam && cd ~/Steam
curl -sqL "https://client-update.steamstatic.com/installer/steamcmd_linux.tar.gz" | tar zxvf -
- Скачайте сервер.
~/Steam/steamcmd.sh +quit
~/Steam/steamcmd.sh +force_install_dir /home/steam/puck +login anonymous +app_update 3481440 validate +quit
Первая строка даёт свежему SteamCMD обновить себя перед настоящей загрузкой. Наш скрипт установки делает то же самое и затем повторяет попытку до трёх раз, потому что Steam иногда отвечает "Failed to install app (Missing configuration)", а SteamCMD всё равно заканчивает с "success". Проверьте, что существует /home/steam/puck/steamapps/appmanifest_3481440.acf. Если его нет, запустите загрузку снова.
- Создайте файл конфигурации с именем
server_config.json в /home/steam/puck. Этот файл сервер прочитал при запуске в наших тестах (в его логе строка Deserializing server config from file (./server_config.json)), и его создаёт наша установка:
{
"port": 7777,
"name": "My Puck Server",
"maxPlayers": 12,
"password": "",
"tickRate": 200,
"isPublic": true,
"useVoip": false,
"useWhitelist": false,
"mods": [],
"gameMode": "public",
"level": "default"
}
Пустой password означает, что зайти может любой, кто знает адрес. Поставьте isPublic в false, чтобы сервер не появлялся в браузере серверов: начиная с Build 174 браузер учитывает этот переключатель.
- Запуск сервера выполняйте через лаунчер, а не через старый исполняемый файл. Начиная с Build 202 серверу под Linux нужен
start_server.sh, чтобы загрузилась библиотека Steam API. Скрипт передаёт любые аргументы в Puck.
cd /home/steam/puck
chmod +x start_server.sh
./start_server.sh
Если ваша сборка не подхватывает файл из этой папки, разработчик пишет, что путь к конфигурации можно задать аргументом запуска --serverConfigurationPath (Build 174), а путь к списку банов аргументом --bannedSteamIdsPath.
- Откройте порты. Разрешите игровой порт в брандмауэре машины (в ufw:
sudo ufw allow 7777, он открывает порт для TCP и UDP), затем пробросьте его на роутере на эту машину. Сама игра слушает UDP. Разработчик говорит, что браузер серверов достаёт серверы по TCP, но не называет порт, поэтому если Direct Connect работает, а браузер не показывает ваш сервер, проверять нужно именно это соединение.
- Проверьте. Найдите название сервера в браузере серверов Puck или используйте Direct Connect с публичным IP и портом. В Build 1153 разработчик сделал Direct Connect встроенной кнопкой, поэтому отладочные инструменты по F5 больше не нужны.
Windows
- Скачайте SteamCMD с
https://client-update.steamstatic.com/installer/steamcmd.zip в папку вроде C:\steamcmd.
- Скачайте сервер. У приложения Steam 3481440 есть сборка для Windows наряду с Linux (разработчик добавил её в Build 174.2), поэтому та же загрузка SteamCMD работает с папкой Windows:
C:\steamcmd\steamcmd.exe +force_install_dir C:\puck +login anonymous +app_update 3481440 validate +quit
- Создайте
server_config.json в C:\puck, как в шаге 4 для Linux, и запустите Puck.exe, программу Windows, которую Steam указывает для этого приложения. Мы запускали и проверяли сервер под Linux, а не под Windows, поэтому если он не подхватит файл, передайте путь к нему через --serverConfigurationPath. Разрешите входящий игровой порт в брандмауэре Windows и пробросьте его на роутере.
Моды
Начиная с Build 202 сервер может загружать моды из Steam Workshop через список mods в конфигурации. У каждой записи есть id элемента Workshop, enabled и clientRequired (true заставляет игроков скачать мод при подключении, false нужен для модов только на стороне сервера). Пример разработчика:
"mods": [
{ "id": 3493628417, "enabled": false, "clientRequired": true },
{ "id": 3491056040, "enabled": true, "clientRequired": false }
]
Команды администратора
Согласно объявлениям разработчика, у администраторов выделенных серверов есть команды чата: /kick, /pause и /resume (Build 171), /ban и /unban по SteamID64 (Build 1153). Администраторов сервера нельзя выгнать голосованием, и они могут зайти на полный сервер.
Вариант 2: разместить на PlayNHost
Аренда избавляет от брандмауэра, проброса портов и рутины обновлений. Порт и файл конфигурации настроены за вас.
- Выберите план. Откройте страницу хостинга сервера Puck и сравните планы (на момент написания FACEOFF, SLAPSHOT и OVERTIME, на 12, 16 и 24 игрока). Нажмите Создать сервер у FACEOFF или SLAPSHOT либо Настроить план у OVERTIME и завершите заказ.
- Дождитесь установки. Вам придёт письмо "сервер готов", а сервер появится на panel.playnhost.com. На вкладке Консоль панель считает сервер запущенным, когда в логе появляется строка с
is ready to accept clients on.
- Откройте Настройки, затем Настройки игры. Эти поля записываются в
server_config.json при каждом запуске сервера:
- Название сервера: имя в браузере серверов.
- Пароль сервера: пароль для входа. Вначале он пустой, поэтому задайте его, если хотите, чтобы каток принадлежал только вашей компании.
- Макс. игроков: вначале равно числу игроков вашего плана, выше него поднять нельзя.
- Перезапустите. Когда панель покажет "Сохранено. Чтобы изменения вступили в силу, сервер нужно перезапустить.", нажмите Перезапустить сейчас и дождитесь строки ready.
- Заходите. Найдите название сервера в браузере серверов Puck или используйте Direct Connect с адресом и портом сервера из панели. Введите пароль, если вы его задали.
Что наша настройка делает за вас
- Ключи записываются при каждом запуске. Панель записывает
name, password, maxPlayers и port в server_config.json до загрузки сервера. Ручные правки этих четырёх ключей заменяются при следующем запуске, поэтому меняйте их в Настройках игры.
- Остальные ключи остаются вашими. Наша установка создаёт файл с
tickRate 200, isPublic true, useVoip false и useWhitelist false, а панель их не трогает. Меняйте их на странице Настройки, где у server_config.json есть своя запись, или правьте файл во вкладке Файлы при остановленном сервере и запустите его снова.
- Правильный файл конфигурации. Некоторые руководства и шаблоны сообщества называют файл
server_configuration.json. В наших тестах сервер читал server_config.json, как показывает его собственная строка лога, поэтому панель заполняет именно этот файл, и его нужно править.
- Проверки установки. Скрипт установки пробует SteamCMD до трёх раз и считает доказательством загрузки игры манифест приложения, а не код выхода SteamCMD.
- Обновления при перезапуске. Каждый запуск ищет в Steam более новую сборку сервера и устанавливает её до загрузки Puck, поэтому перезапуск после патча Puck обновляет сервер.
- Список модов. Страница Мастерская предназначена для того, чтобы моды попадали в список
mods на PlayNHost. Мы ещё не подтвердили на рабочем сервере, что добавленные так моды загружаются, поэтому спросите поддержку, прежде чем полагаться на мод или править mods вручную.
- Консоль. Вкладка Консоль показывает лог сервера. Удалённой консоли (RCON) для Puck мы не знаем: команды администратора вводятся в чате игры, а команды из поля консоли панели до игры не доходят, поэтому ваш пульт управления сводится к смене настроек и перезапуску.
Своими силами или аренда: честное сравнение
- Стоимость. Своими силами: программа бесплатна, вы платите за железо, электричество и трафик либо за виртуальную машину в облаке. Аренда: ежемесячная плата по плану. Смотрите актуальные планы.
- Доступность. Своими силами: надёжность равна надёжности вашей машины и домашнего интернета, и она должна работать, когда играют друзья. Аренда: работает на оборудовании хостинга, а не на вашем ПК.
- Открытость сети. Своими силами: игроки подключаются к вашему публичному IP, а брандмауэр и роутер на вас. Аренда: ваш домашний IP не задействован.
- Нужные навыки. Своими силами: командная строка, проброс портов и правка JSON. Вполне посильно и хороший способ научиться. Аренда: веб-панель с полями формы.
- Обновления. Своими силами: остановите сервер, снова запустите команду SteamCMD, запустите сервер. Аренда: запускать рутину SteamCMD не нужно, потому что каждый запуск ищет в Steam более новую сборку сервера. После патча Puck перезапустите сервер.
Своими силами подойдёт, если какая-то машина и так работает весь день и вы уверенно чувствуете себя в сетях. Аренда подойдёт, если вы не хотите возиться с железом. Если вам нужен каток для вашей компании, посмотрите планы Puck.
Частые проблемы и решения
Загрузка завершается, но файлов сервера нет
Причина: SteamCMD вывел "Missing configuration", но всё равно завершился с "success". Мы видели это на собственных установках.
Решение: проверьте, что существует steamapps/appmanifest_3481440.acf. Если его нет, снова запустите +app_update 3481440 validate.
Сервер не появляется в браузере серверов
Причина: isPublic равно false или сервер недоступен снаружи. Браузер достаёт серверы по TCP, поэтому брандмауэр, пропускающий только UDP, может скрыть сервер, до которого Direct Connect всё же достучится.
Решение: поставьте isPublic в true, откройте и пробросьте игровой порт и попробуйте Direct Connect с компьютера вне вашей сети.
Мои изменения конфигурации не применяются
Причина: файл правили при работающем сервере или вы изменили ключ, который панель перезаписывает (PlayNHost).
Решение: остановите сервер, отредактируйте файл, запустите. На PlayNHost меняйте название, пароль, лимит игроков и порт в Настройках игры.
FAQ
Можно ли создать сервер Puck бесплатно?
Да. Выделенный сервер лежит в Steam и скачивается с анонимным входом. Но вы всё равно платите за машину, электричество и интернет, и сервер должен работать, пока люди играют.
Нужно ли мне владеть игрой?
Нет. Puck бесплатна в Steam, поэтому каждый, кто заходит, может скачать её без оплаты.
Сколько игроков может зайти?
Вы задаёте maxPlayers в конфигурации. В Build 19 (сентябрь 2024 года), до выхода выделенного сервера, разработчик ограничил свои собственные серверы 10 игроками; для выделенных серверов он с тех пор лимит не публиковал. Наши планы рассчитаны на 12, 16 и 24 игрока.
Какой порт использует сервер Puck?
Игровой порт равен значению port в server_config.json, в примере 7777. В наших тестах игра слушала UDP. Начиная с B897 браузер серверов пингует серверы по TCP, а разработчик этот порт не называет.
Можно ли добавить моды из Steam Workshop?
Да, начиная с Build 202, через список mods, показанный выше. Игроки автоматически скачивают любой мод с clientRequired при подключении, а начиная с B897 всплывающее окно сначала перечисляет необходимые моды.