Выделенный сервер KF2 на AWS EC2 (Linux) и карты в S3
Это руководство показывает, как поднять выделенный сервер Killing Floor 2 для компании друзей на Amazon Web Services. Сервер работает на виртуальной машине EC2 из free tier, поэтому он не зависит ни от чьего домашнего ПК, роутера или белого IP. Общие основы смотрите в статьях Dedicated server и Сервер через SteamCMD.
Дисклеймер и что потребуется
Автор не несёт ответственности за ваши действия и возможные финансовые убытки. Нужно:
- AWS-аккаунт (для регистрации нужна действующая карта, при проверке списывается небольшая сумма);
- минимальные знания Linux и внимательность;
- умение искать информацию самостоятельно (вопросы вроде «куда нажать» или «что такое PuTTY» автор игнорирует).
AWS в основном платный сервис: бесплатно даётся лишь небольшой объём (инстанс EC2, диски EBS и т.д.). Запуск нескольких инстансов или неверный тип машины может стоить дорого. Защитите аккаунт ключами и MFA и заранее изучите планирование бюджета AWS.
Консоль AWS: для этого руководства хватает free tier.
Создание EC2-инстанса
- Выберите регион поближе к игрокам (автор взял Франкфурт, eu-central-1, пинг из Ростовской области около 70 мс). Регион указан в правом верхнем углу консоли; переносить машины между регионами нельзя.
- Сначала создайте Security Group со входящими правилами:
| Название | Протокол | Порт |
|---|---|---|
| Game port | UDP | 7777 |
| NTP port | UDP | 123 |
| Steam port | UDP | 20560 |
| Query port | UDP | 27015 |
| Web Admin | TCP | 8080 |
| SSH | TCP | 22 |
В источнике стоит 0.0.0.0/0 для простоты; можно ограничить своим диапазоном адресов.
Входящие правила Security Group.
- В EC2 Dashboard нажмите Launch Instance и выберите свежий Amazon Linux (основан на RHEL, почти все нужные пакеты уже установлены).
- Выберите тип t2.micro: только он входит во free tier. Автор проверил на практике, что его хватает.
- Количество инстансов - 1, сеть - VPC, где создана Security Group, Auto-assign Public IP включён.
- Добавьте диск минимум на 16 ГБ (взято 20 ГБ) или увеличьте Root Device.
- Добавьте тег Name, подключите существующую Security Group, проверьте настройки, нажмите Launch и выберите или создайте пару ключей.
- По желанию привяжите статический Elastic IP, чтобы адрес не менялся при перезапусках и сервер можно было держать в избранном.
Мастер Launch Instance.
t2.micro - тип из free tier.
Настройка машины
Подключитесь по SSH (подойдёт PuTTY; подсказка есть в EC2 Dashboard). Дальше:
sudo adduser kf2-admin -G wheel
sudo yum install ld-linux.so.2
sudo lsblk
sudo mkfs.ext4 /dev/xvdb
sudo mkdir /home/kf2-admin/kf2-server
sudo mount /dev/xvdb /home/kf2-admin/kf2-server
sudo chown -R kf2-admin:kf2-admin /home/kf2-admin/kf2-server
Используйте имя устройства, которое lsblk показывает для диска на 20 ГБ (xvdb, xvdf и т.д.); если вы увеличивали корневой диск, монтирование пропустите. Добавьте точку монтирования в /etc/fstab (/dev/xvdb /home/kf2-admin/kf2-server ext4 defaults 0 0). Также автор разблокировал группу wheel через visudo.
От имени kf2-admin установите SteamCMD и сервер:
mkdir steamcmd && cd steamcmd
wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh +login anonymous +force_install_dir /home/kf2-admin/kf2-server +app_update 232130 validate +quit
Запуск сервера: /home/kf2-admin/kf2-server/Binaries/Win64/KFGameSteamServer.bin.x86_64 kf-bioticslab.
Конфигурация и автозапуск
Настройки соответствуют стандартному руководству по конфигурации, но на Linux файлы называются LinuxServer-.ini вместо PCServer-.ini (например, LinuxServer-KFGame.ini).
Автор написал простой init-скрипт (репозиторий IndigoSMDT/kf2-server на GitHub). Скачайте его в /etc/init.d/kf2-server и выполните chkconfig --add kf2-server и chkconfig kf2-server on. Сервер будет стартовать вместе с виртуалкой, а управлять им можно командами service kf2-server start | restart | stop | status | update | info.
S3 как хранилище кастомных карт
Игроки любят кастомные карты, а найти надёжный сторонний сервер для редиректа сложно. Бакет S3 снимает эту зависимость:
- Создайте бакет с уникальным именем.
- Создайте папку maps с публичным доступом только на чтение и загрузите туда карты с публичным чтением.
- Возьмите ссылку на бакет без имени файла, например
https://s3.eu-central-1.amazonaws.com/your-bucket/maps/. - В ~/kf2-server/KFGame/Config/LinuxServer-KFGame.ini укажите её в параметре
RedirectToURL=секции[IpDrv.HTTPDownload].
Карты на сам сервер можно подтягивать через S3 командой wget в KFGame/BrewedPC/Maps/. Так же можно хранить моды, мутаторы и логотип для MOTD. Затем добавьте карту в конфиг и цикл карт как обычно.
Бакет с кастомными картами.
Возможные проблемы
- «This account is currently blocked»: новым пользователям AWS разрешены инстансы только в нескольких регионах (US East N. Virginia, US West Oregon). Попросите поддержку AWS открыть нужный регион.
- «Error! App '232130' state is 0x202 after update job»: не хватает места на диске. Увеличьте или очистите диск.
Результат
Хотя сервер стоит во Франкфурте примерно в 3000 км, пинг у игроков 70-90 мс (130-140 мс с Дальнего Востока). Нагрузка на CPU достигала 100% только при установке, потом была штатной. Плюсы для компании друзей: сервер не зависит от чужих ПК и провайдеров, белый IP не нужен, а мучения с портами и фаерволами не грозят.
Пинг до сервера во Франкфурте.
Нагрузка на виртуальную машину во время игры.
Вопросы и ответы
- Какие порты нужно открыть для сервера KF2 на AWS?
- UDP 7777 (игра), UDP 123 (NTP, Weekly Outbreak), UDP 20560 (Steam), UDP 27015 (query), TCP 8080 (WebAdmin) и TCP 22 (SSH).
- Хватит ли t2.micro для Killing Floor 2?
- Автор держал сервер для друзей на t2.micro: нагрузка на процессор достигала максимума только при установке, дальше была штатной.
- Сколько места нужно под сервер?
- Минимум 16 ГБ, в руководстве подключён диск на 20 ГБ. Ошибка SteamCMD 0x202 означает нехватку места.