Killing Floor 2

Killing Floor 2

28 ratings
Выделеный сервер и AWS
By Indigo
Простой и действенный способ создать сервер без мучений в виде открытия портов и дополнительной платы за белый IP
   
Award
Favorite
Favorited
Unfavorite
Дисклеймер
#############################################################################
Внимание, авторы не несут никакой ответственности за ваши действия и возможные финансовые убытки.
#############################################################################

Что потребуется:
  • AWS аккаунт
  • Минимальные зания Linux
  • Внимательность
  • Умение искать информацию в сети
  • Минимальное знание англиского
Вопросы типа:
  • Куда нажать чтобы все работало?
  • У меня не коннектит с серваку, что делать?
  • Я ничего не знаю в AWS, можешь мне помочь в нем разобратсья?
  • Как настроить токены?
  • Что такие PuTTy?
и десятки других вопросов на которые можно найти ответ в гугле за 5 минут, будут проигнорированы.

Если возникают проблемы или предложения обращайтесь на прямую к авторам, но учтите, что у нас не всегда есть свободное время.
AWS
AWS - это облачный сервис Amazon, который предоставляет широкий функционал, но, нас больше интересует его free tier[aws.amazon.com]

Так как AWS хоть и предоставляет небольшой бесплатный функционал в виде EC2 инстанца, EBS дисков и прочего. В основном сервис является ПЛАТНЫМ, и если, вы случайно ошибетесь (запустите несколько интсанцов, или выберете не тот тип, или любое другое не обдуманное решение, сделанное по типу "А мне все равно я потом разберусь") вы можете влететь на крупные суммы, так, что если за вами наблюдается такие симптомы как невнимательность, растерянность, забывчивость или если вы просто не поймете о чем тут речь, лучше просто делайте сервер по старинке, меньше проблем будет в будущем.

  • Для регистрации вам потребуется валидная карточка, при самой регистрации с нее будет списан $1 для проверки(есть возможность "скормить" амазону виртуальную карточку, это может быть полезно, чтобы не улететь на большие суммы, но так же может привести к блокировке аккаунта)

  • В общем перед началом основной работы, я настоятельно рекомендую почитать в сети про AWS, заодно вы сможете оценить, и так сказать подготовится морально.

  • К созданию аккаунта советую подойти серьезно, и сразу настроить безопасные ключи и RSA токены для входа, чтобы лишний раз обезопасить себя от взлома и потери денежных средств.

  • В данном руководстве я не буду показывать как регистрироваться, настраивать токены и прочее, я сосредоточусь только на самом необходимом для создания и запуска сервера.

Советую ознакомится с планированием бюджета[docs.aws.amazon.com], полезная вещь при контроле за тратами в AWS.
Создание EC2-instance
Для начала, нам потребуется выбрать регион в котром будет крутится наша машинка, я выбрал Frankfurt(eu-central-1), так как он находится ближе всех ко мне(и да, в России сервак держать нельзя, карта с регионами AWS[www.google.com] вам в помощь)

Перед началом, очень важно проверить в каком регионе вы работаете(регион отображается в правом верхнем углу AWS Console), переносить виртуалки и прочее между регионами нельзя, если вы ошибетесь с регионом, вам придется делать все с начала в нужном регионе.
***
Живу я в Ростовской области, пинг до сервака в среднем оставляет 70ms, отличный результат несмотря на расстояние
***
  1. Заранее создадим Securiity Group'у[docs.aws.amazon.com]
    • Security group name - любое имя, чтобы вам было удобно
    • Description - Любое описание
    • VPC - Выбирайте VPC в котором будете запускать EC2




    Список входящих правил:
    Name
    Protocol
    Port
    Source
    Game Port
    UDP
    7777
    0.0.0.0/0
    NTP Port
    UDP
    123
    0.0.0.0/0
    Steam Port
    UDP
    20560
    0.0.0.0/0
    Query Port
    UDP
    27015
    0.0.0.0/0
    Web Admin Port
    TCP
    8080
    0.0.0.0/0
    SSH Port
    TCP
    22
    0.0.0.0/0
    Note: в столбце Source вместо 0.0.0.0/0 можете указать либо конкретный адрес, либо его диапазон, я указал 0.0.0.0/0 для облегчения руководства.

  2. Создадим нашу виртуалку( она же машина, инстанц, ec2)[docs.aws.amazon.com]:
    • Для создания виртуалки переходим в AWS Console, EC2 Dashbord и нажимаем кнопку "Launch Instance"






    • Для своей машины я выбрал стандартный для AWS тип OS, а именно Amazon Linux последней версии, так как он основан на RHEL и на нем уже установленны почти все необходимые пакеты.



    • Далее выбираем тип истанца, t2.micro(только он входит во free tier), он выбирается по дефолту, но лучше лишний раз убедиться.Тут мы можем просмотреть характеристики будущей машины, а именно количество CPU и RAM, для сервера t2.micro хватает, проверенно на практике.
    • Проверяем кол-во инстанцев - должно быть 1, иначе возможны проблемы.
    • В комбобоксе Network необходимо выбрать VPC в которой создавали Security Group.
    • Проверьте чтобыAuto-assign Public IP был включен.

    • Нажмите кнопку Add New Volume, для сервера необходимо минимум 16гб пространства, я поставил 20гб на всякий случай.
      Либо
    • Увеличьте объем Root Device, это проще, но я предпочитаю работать с отдельным устройством для подобных целей.

    • Для удобства советую добавить тэг Name, чтобы было удобней определять нужный интсанц.






    • Выберете чекбокс Select an existing security group, и подключите заранее созданную SG.






    • На последнем экране внимательно просмотрите всю информацию и после того как убедитесь что все верно, нажмите Launch
    • Вам предложат создать.выбрать/загрузить пару ключей для доступа на сервер, это необходимо в целях безопасности, чтобы только вы имели доступ к созданной машине.
    • После выбора ключей вы сможете создать виртуалку нажав Launch Instance

  3. ОПЦИОНАЛЬНО - Привязка статического EIP[docs.aws.amazon.com] адреса
    • IP адрес будет сохраняться между перезапусками машины, удобно для сохранения сервера в избранном и мониторинга.
Настройка машины
Подсказку как коннектится к серверу вы можете получить прямиком из EC2 Dashbord'а:
Ссылка с описанием коннекта через PuTTy[docs.aws.amazon.com]

При входе на сервер вы увидите примерно следующее:


Далее рассказываю, что я делал:
  1. Разблокировал группу wheel через visudo.
  2. Создал нового пользователя для удобства, добавил его к группе wheel чтобы он имел админские права:
    $ sudo adduser kf2-admin -G wheel


  3. Установил необходимый пакет:
    $ sudo yum install ld-linux.so.2


  4. Замаунтил 20гб диск(Если вы увеличивали Root Device, данный шаг пропускайте).
    Обратите внимание на вывод команды lsblk, она покажет имя устройства с 20гб, именно с ним нужно проводить манипуляции, у меня это было xvdb, у вас может быть xvdf,
    xvdg и тд:
    $ 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

    Добавил новый маунтпоинт в fstab:
    $ sudo vim /etc/fstab
    Привел его к такому виду:
    # LABEL=/ / ext4 defaults,noatime 1 1 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 /dev/xvdb /home/kf2-admin/kf2-server ext4 defaults 0 0


  5. Далее перешел за пользователя kf2-admin, скачал и установил steamcmd:
    $ sudo su - kf2-admin $ mkdir steamcmd && cd steamcmd $ wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz $ tar -xvzf steamcmd_linux.tar.gz


  6. Запуск steamcmd с установкой сервера:
    $ ./steamcmd.sh +login anonymous +force_install_dir /home/kf2-admin/kf2-server +app_update 232130 validate +quit

  7. Запуск сервера производится следующей командой:
    $ /home/kf2-admin/kf2-server/Binaries/Win64/KFGameSteamServer.bin.x86_64 kf-bioticslab
    (скриншот был снят с другой машины, я просто не захотел еще раз скачать и запускать дистрибутив сервера)
Настройка сервера
Все настройки для сервера соответствуют(за исключением названий файлов конфигурация, пример: вместо файла PCServer-KFGame.ini стоит искать файл LinuxServer-KFGame.ini) этому гайду:
https://steamhost.cn/steamcommunity_com/sharedfiles/filedetails/?id=514456515

Так же, есть кастомный сервис написанный на коленке для автозагрузки сервера:

Ссылка на GitHub: https://github.com/IndigoSMDT/kf2-server/blob/master/kf2-server

Необходимо скачать файл kf2-server и добавить его в директорию /etc/init.d/
После прогнать следующие команды:
# chkconfig --add kf2-server # chkconfig kf2-server on

После этого, ваш сервер будет запускаться одновременно с виртуалкой, так же, вы сможете управлять им через команды:
# service kf2-server start # service kf2-server restart # service kf2-server stop # service kf2-server status # service kf2-server update # service kf2-server info
S3 как хранилеще ассетов
Вторая проблема которую удается решить при помощи AWS, это хранилище для кастомных карт.

У большинства людей хостующих сервера возникала проблема с сервером для карт, люди очень любят добавлять кастомные карты на свой сервер, сам я не люблю такую практику, ибо считаю 90% кастомных карт мусором крайне не продуманными. Основная сложность заключалась в поиске подходящего стороннего сервера на котором хранились все кастомные карты.

S3[aws.amazon.com] позволяет убрать зависимость от 3ей стороны, вы сами без труда сможете загружать и обновлять карты по мере надобности.


В AWS Console перейдите в раздел S3:
  • Нажмите кнопку Create backet
  • Введите уникальное имя бакета в поле Backet Name
  • Дальше настраивайте по вкусу




  • Создал папку maps
  • Дал публичный Read-Only доступ на нее.
  • Загрузил в нее карту, так же с публичным Read-Only доступом.




Далее нам потребуется ссылка на бакет, удобно ее взять из описания файла в бакете, потребуется только удалить из нее название карты, чтобы получилось примерно так:
https /s3.eu-central-1.amazonaws.com/kf2-server-test/maps/



Далее уже эту ссылку надо будет в файле ~/kf2-server/KFGame/Config/LinuxServer-KFGame.ini найти и заменить значение параметра RedirectToURL=

[IpDrv.HTTPDownload] RedirectToURL=http /s3eu-central-1.amazonaws.com/kf2-server-test/maps/

Загружать карты на сервер, можно аналогично черзе S3, залили в бакет, а потом уже вытянули через wget.


Аналогичным образом можно поступить с модами, мутаторами и прочими файлами.
К примеру я в бакет загрузил логотип для MOTD.

Дальше по старинке добавить карту в конфиг и цикл.
Troubleshoot
  • aws this account is currently blocked
    Для новых пользователей действует ограничение - новые инстансы можно запускать только в двух регионах: US East (Northern Virginia), US West (Oregon), но, можно сообщить в саппорт AWS предпочтительный регион и будет возможность запустить там.

  • Error! App '232130' state is 0x202 after update job
    [kf-admin@cloud-ams steamcmd]$ ./steamcmd.sh +login anonymous +app_update 232130 +quit Redirecting stderr to '/home/kf-admin/Steam/logs/stderr.txt' [ 0%] Checking for available updates... [----] Verifying installation... Steam Console Client (c) Valve Corporation -- type 'quit' to exit -- Loading Steam API...OK. Connecting anonymously to Steam Public...Logged in OK Waiting for user info...OK Update state (0x3) reconfiguring, progress: 0.00 (0 / 0) Error! App '232130' state is 0x202 after update job.

    Данная ошибка возникает при нехватки места, увеличьте объем или почистите диск чтобы решить проблемму.
Результат
Не смотря на то,что сервер по данным амазона находится во Франкфурте, ~3000км от меня, пинг состовляет 70-90ms.

Мощности сервера вполне хватает, чтобы держать сервер без проседаний, нагрузка на виртуалку во время игры:

Мониторы AWS так же, не показывают высокой нагрузки, пик 100% CPU пришёлся на момент установки сервера, после этого сервер работал в штатном режиме без перерывов.

Для компании друзей это оказался очень хороший вариант, ибо доступность сервера не зависит от наших машин, пинг у всех держится между 70-90ms(у человека с дальнего востока доходит до 130-140ms), самый очевидный плюс, сервер не зависит от наших провайдеров, значит вам не нужен белый IP, и мучение с портами, firewall'ами и прочим вам не грозит. Самое главное, больше не приходится искать сервер, который всех устроит, или спорить, кто будет запускать сервак у себя на машине.
13 Comments
onnei 9 Dec, 2024 @ 1:40am 
$ sudo yum install ld-linux.so.2
This package was not found
By keywords only libc6
GenZmeY 20 Sep, 2019 @ 12:26am 
Мне стало немного стыдно за то что решение своих проблем я давно нашел, но никуда их не выложил. Так что...
1. Кракозябры в админке:
Почему: сервер читает значение переменной LANG и пытается в мультиязычность (но не может).
Лечение: Перед запуском сервера установить LANG в английский, например так:
export LANG=en_US.utf8
2. Не скачиваются кастомные карты:
Почему: я невнимательно читал доки
Решение: карты должен кто то раздавать. Я для этих целей настроил nginx, всё заработало
(Последнее с переходом на steam workshop уже не так актуально, но мало ли, вдруг кому надо)
Foster 10 May, 2019 @ 4:00pm 
я конечно не в тему, но ору с комментаторов, "боже" "ужас"
ахах, этим будут пользоваться те, кто шарит, а не вот такие вот додики как вы, ну а автор молодец
15 Apr, 2019 @ 10:39pm 
как говорится очень интересно но нихуя не понятно, лучше бы фулл гайд на ютубе
GenZmeY 19 May, 2018 @ 9:50am 
Спасибо за помощь (вот уж не ожидал такого быстрого ответа).

1. Ну чтобы не быть голословным - выглядит админка как то так:
https://i.imgur.com/ZjV1Ys4.png

Честно говоря, не особо то и нужен мне этот русский, но как везде использовать английский мне тоже неведомо.

2. По картам - да, видел, пробовал.
Делал я это как то так:
Имя файла карты в нижнем регистре:
kf-deathbasinsands.kfm
Запись о карте (LinuxServer-KFGame.ini) такого вида:
[kf-deathbasinsands KFMapSummary]
MapName=kf-deathbasinsands
MapAssociation=2
ScreenshotPathName=UI_MapPreview_TEX.UI_MapPreview_Placeholder


т.е. тоже всё в нижнем регистре.

Indigo  [author] 19 May, 2018 @ 8:14am 
1. Лично не сталкивался, но чуть позже покапаю в посиках решения

2. На вики трайпвар есть такой ньюанс:

Linux Redirect
As a redirect server can be a Linux machine, it is very important admins have the closing forward slash in the URL as well as spell all map names in lowercase. Failure to do so will result in a broken redirect and clients will only obtain a 1kb file of the proper name but not the actual files. Also take care when adding the map data store to the PCServer-KFGame.ini to use lowercase as well as the server will use those file names over any typed in as an admin.

если коротко то все карты и их названия должны быть в нижнем регистре
GenZmeY 19 May, 2018 @ 7:03am 
Доброго дня.
Имею парочку инстансов KF2 на Linux, поэтому интересует сталкивались ли вы со следующими проблемами в процессе настройки:

1. Кодировка в админке и поддержка русского языка.
В данный момент имею кракозябры почти во все поля.
В LinuxServer-KFEngine.ini есть такой параметр:
CharSet=iso-8859-1
Но не похоже чтобы его изменение на что то влияло...

2. Скачивание кастомных карт клиентами.
А именно - работает не для всех карт. Есть подозрение что дело в регистрозависимости linux (на винде такой проблемы не замечено).

Буду рад если поделитесь опытом :)
Indigo  [author] 4 Mar, 2018 @ 10:11am 
никто и не заставляет
♫WolfyX♫ 4 Mar, 2018 @ 9:13am 
"и дополнительной платы" "возможные финансовые убытки." Можно не дальше не читать
YanCheck 1 Mar, 2018 @ 7:03am 
это все интересно, даже осень интересно. но, НО! игра, которая на анриал энжине не могет создавать серваки сама. это как минимум странно.