Свой сервер

Сервер KF2 на Ubuntu: SteamCMD, WebAdmin и systemd

Страница основана на китайском руководстве из Steam (здесь в переводе) по установке выделенного сервера Killing Floor 2 на Ubuntu. Автор выбирает Ubuntu, потому что она близка к SteamOS (обе происходят от Debian) и SteamCMD ставится через apt, а не распаковкой бинарников вручную. Другие способы: выделенный сервер KF2 через SteamCMD и Docker на VPS.

Установка SteamCMD

Создайте отдельного пользователя и поставьте SteamCMD:

sudo useradd -m -s /bin/bash steam
sudo add-apt-repository multiverse -y
sudo dpkg --add-architecture i386
sudo apt update -y
sudo apt-get remove needrestart -y
echo steam steam/license note '' | sudo debconf-set-selections
echo steam steam/question select "I AGREE" | sudo debconf-set-selections
sudo apt install steamcmd -y

Для других дистрибутивов смотрите вики SteamCMD.

Установка файлов сервера

sudo -u steam /usr/games/steamcmd +login anonymous +app_update 232130 +quit

Создание конфигов по умолчанию

Запустите сервер один раз, чтобы он записал стандартную конфигурацию:

sudo -u steam /home/steam/.local/share/Steam/steamapps/common/kf2server/Binaries/Win64/KFGameSteamServer.bin.x86_64 kf-bioticslab

Быстрая настройка (только WebAdmin)

Тем, кто плохо знает Linux, проще всего включить веб-консоль и менять всё остальное в ней. Нужные файлы лежат в .../kf2server/KFGame/Config/.

  1. В KFWeb.ini, секция [IpDrv.WebServer], поставьте bEnabled=true. Для безопасности можно сменить ListenPort с 8080. Одной командой: sed -i "s/bEnabled=false/bEnabled=true/" .../KFWeb.ini
  2. В LinuxServer-KFGame.ini, секция [Engine.AccessControl], задайте AdminPassword= (он нужен и для WebAdmin, и для входа админа в игре). GamePassword= - необязательный пароль на комнату.
  3. Отключите takeover в LinuxServer-KFEngine.ini: sed -i "s/bUsedForTakeover=TRUE/bUsedForTakeover=FALSE/" .../LinuxServer-KFEngine.ini

Порты

В облаке эти порты нужно открыть в группе безопасности или файрволе.

ПортПротоколНазначение
Game PortUDPОбязателен. Основной игровой порт
Query PortUDPНеобязателен. Определяет, виден ли сервер в публичном списке
Steam PortUDPНеобязателен. Связь со Steam, в основном загрузка Workshop
NTP PortUDPНеобязателен. Только для режима Weekly: синхронизация времени с официальными серверами, чтобы работали еженедельные задания
Web AdminTCPНеобязателен. WebAdmin, по умолчанию 8080

Пример правил группы безопасности у облачного провайдера Пример правил группы безопасности (автор использует Alibaba Cloud).

После этого откройте http://<адрес-сервера>:<ListenPort>, войдите как Admin с паролем администратора и настройте остальные параметры.

Вход в WebAdmin и страница настроек Консоль WebAdmin после входа.

Установка модов сообщества

Пример: мод отображения урона (ID Workshop 2625647922) и мод изменения максимума игроков (ID 2143104493). Запишите ID подписки, убедитесь, что сервер остановлен, и отредактируйте LinuxServer-KFEngine.ini:

[IpDrv.TcpNetDriver]
; добавьте строку выше всех существующих DownloadManagers=
DownloadManagers=OnlineSubsystemSteamworks.SteamWorkshopDownload

[OnlineSubsystemSteamworks.KFWorkshopSteamworks]
ServerSubscribedWorkshopItems=2625647922
ServerSubscribedWorkshopItems=2143104493

Перезапустите сервер и дождитесь загрузки. Признак успеха - папки с ID Workshop в каталоге KFGame\Cache.

Управление сервером

По умолчанию сервер работает на переднем плане и останавливается, как только вы покидаете сессию. Есть три варианта: запуск в фоне через nohup <команда> &, screen или tmux, либо служба systemd (автор настоятельно рекомендует именно её).

cat <<EOF > /usr/lib/systemd/system/killingfloor2-server.service
[Unit]
Description=killingfloor2-server.service
After=network.target

[Service]
User=steam
Restart=on-failure
RestartSec=30s
ExecStart=/home/steam/.local/share/Steam/steamapps/common/kf2server/Binaries/Win64/KFGameSteamServer.bin.x86_64 kf-bioticslab

[Install]
WantedBy=multi-user.target
EOF
КомандаНазначение
systemctl start killingfloor2-serverЗапустить сервер
systemctl status killingfloor2-serverПоказать состояние
systemctl stop killingfloor2-serverОстановить сервер
systemctl restart killingfloor2-serverПерезапустить сервер

Чтобы сервер стартовал при загрузке системы: systemctl enable killingfloor2-server --now.

Вывод systemctl status для работающей службы KF2 Служба под управлением systemd.

Скрипт установки одним запуском

В конце руководства приведён bash-скрипт, который выполняет все шаги выше: создаёт пользователя steam, если его нет, добавляет репозиторий multiverse и архитектуру i386, ставит SteamCMD, скачивает приложение 232130 в /home/steam/kf2server, один раз запускает сервер для генерации конфигов, пишет unit-файл systemd, включает веб-консоль, задаёт пароль администратора через sed, отключает takeover и в конце включает и запускает службу. Он выводит сообщение об успехе или указывает на /tmp/killingfloor2_install.log. Перед использованием смените пароль администратора в скрипте и не забудьте открыть порты в группе безопасности.

Вопросы и ответы

Какой ID приложения у выделенного сервера KF2?
232130. Ставится через steamcmd: +login anonymous +app_update 232130.
Какие порты нужны серверу KF2?
Обязателен игровой порт (UDP). Необязательные: порт запросов (UDP) для публичного списка, порт Steam (UDP) для загрузки Workshop, порт NTP (UDP) для синхронизации времени в режиме Weekly и порт WebAdmin (TCP, по умолчанию 8080).
Как оставить сервер работать после выхода из сессии?
Зарегистрировать его как службу systemd либо запустить через nohup или screen/tmux. Автор советует systemd.