7 Days to Die

7 Days to Die

Not enough ratings
Создаем игровой сервере 7 Days to Die.
By sovicUA2
Создаем игровой сервер на Linux, используя контейнерную виртуализацию Docker.
   
Award
Favorite
Favorited
Unfavorite
Введение
Создать данное руководство, меня побудило то, что на данный момент такого руководства по инсталляции выделенного сервера на русском я не нашел, по крайней мере для Linux. Есть два англоязычные руководства и все.
Прежде чем начать, хотел предупредить, что это руководство подразумевает что у вас есть понимание того что такое контейнерная виртуализация Docker, и понятное дело вас не пугает консоль Linux :) и в нем много буковок, но некоторые главы вы можете пропустить. Я не буду сильно вдаваться в подробности Docker, как его установить и настроить, но вы можете посетить мой блог UNIX и не только...[unixua.blogspot.com], где это все расписано более подробно.
Итак, я подготовил два образа, все образы доступны на Docker Hub и вы их можете использовать без ограничений в своих експериментах :)
Все они построены на базе Debian Jessie. На текущий момент есть два образа с тегами "jessie" и "steamcmd". Собственно первый это чистый Debian с установленными дополнительными пакетами и настроенной временной зоной. Данные настройки были описаны в Установка timezone в базовом образе Docker[unixua.blogspot.com]. Второй собран на базе первого с установленными библиотеками для игры и steamcmd.
Подготовка образа steamCMD
Данную часть можно пропустить, так как я уже подготовил образ и выложил его на Docker Hub. Но, все таки я решил ее вставить, может кто то захочет для себя повторить и сделать собственный образ. Некоторые инструкции в файле конфигурации создания образа можно удалить, например инсталляция Fish Shell, соответственно нужно будет подправить последнюю инструкцию CMD, указав shell который вы используете.
Итак, создаем файл конфигурации для создания образа контейнера.
~> mkdir docker/steamcmd/ ~> cd docker/steamcmd/ ~/d/steamcmd> vim Dockerfile
FROM sovicua/debian:jessie MAINTAINER Viktor M. Sytnyk <sovicua@sovic.org.ua> ENV DEBIAN_FRONTEND=noninteractive RUN apt-get install -y wget \ && echo 'deb http://download.opensuse.org/repositories/shells:/fish:/release:/2/Debian_8.0/ /' >> /etc/apt/sources.list.d/fish.list \ && wget http://download.opensuse.org/repositories/shells:fish:release:2/Debian_8.0/Release.key \ && apt-key add - < Release.key \ && apt-get update && apt-get upgrade -y \ && apt-get install -y lib32gcc1 lib32stdc++6 fish && apt-get clean \ && useradd -m -c "SteamCMD User" -s /usr/bin/fish steam WORKDIR /home/steam/steamcmd RUN wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz \ && tar -xvzf steamcmd_linux.tar.gz && rm steamcmd_linux.tar.gz \ && chown -R steam:steam /home/steam CMD /usr/bin/fish
Как вы можете видеть, shell по умолчанию я использую Fish Shell, хотя это не существенно, но понравился он мне :)
Создаем образ:
~/d/steamcmd> docker build -t sovicua/debian:steamcmd .
После этого можно выгрузить образ на Docker Hub:
~/d/steamcmd> docker push sovicua/debian:steamcmd
Теперь у нас есть готовый образ с установленным steamcmd, что позволит нам в дальнейшем быстро развернуть любую игру которая поддерживает установку с использованием данной утилиты. Теперь переходим к созданию образа с установленным сервером 7 Days to Die.
Создаем образ и контейнер с игрой
Для начала создадим файл скрипта с помощью которого будем устанавливать, а также обновлять саму игру.
~> mkdir docker/games/7dtd ~> cd docker/games/7dtd ~/d/steamcmd> vim 7dtd.steamcmd
login steam_user steam_password force_install_dir /home/steam/games/7dtd app_update 294420 validate quit
Где, steam_user и steam_password это имя пользователя и пароль на учетной записи которого куплена эта игра.
Теперь создадим собственно сам файл конфигурации создания образа.
~/d/steamcmd> vim Dockerfile
FROM sovicua/debian:steamcmd MAINTAINER Viktor M. Sytnyk <sovicua@sovic.org.ua> WORKDIR /home/steam/steamcmd COPY 7dtd.steamcmd /home/steam/steamcmd/ CMD /usr/bin/fish
Честно говоря, можно было бы и не делать данный образ, для этих целей можно бы использовать предыдущий образ, создав в нем скрипт установки и обновления игры. Изначально я планировал что бы при создании образа, сразу инсталлирована игра, но так как у меня настроен Steam Guard, то он запрашивал у меня код, так как это типа новая машина которая хочет получить доступ к моей учетной записи. Можно конечно отключить Steam Guard, но я бы не рекомендовал вам это делать.
В Dockerfile была команда на запуск скрипта:
RUN ./steamcmd.sh +runscript 7dtd.steamcmd
Победить это, что бы инсталляция останавливалась при запросе кода, у меня так и не получилось. :( По этому инсталляцию придется выполнять руками уже в контейнере.
После этого создаем сам образ как обычно.
~/d/g/7dtd> docker build -t sovicua/games:7dtd .
Теперь мы можем быстренько создать контейнер и запускаем его:
~/d/7dtd> docker run --name="7dtd" --net="host" --user="steam" -i -t sovicua/games:7dtd
Инсталляция и конфигурация сервера
Выполняем инсталляцию игры, не забываем указать имя пользователя и пароль, если это не сделали раньше.
~/steamcmd> ./steamcmd.sh +runscript 7dtd.steamcmd
После инсталляции правим файл конфигурации сервера serverconfig.xml как вам удобно, и можно запускать сервер.
~/steamcmd> cd ../games/7dtd ~/g/7dtd> vim serverconfig.xml
Из параметров которые я у себя изменил, это установил пароль на доступ по telnet, и небольшие настройки самого сервера, такие как тройной лут и длина суток 2 часа реального времени. И еще пару параметров.
<property name="ServerName" value="iHome Games Server" /> <property name="ServerPassword" value="" /> <property name="ServerMaxPlayerCount" value="4" /> <property name="ServerDescription" value="iHome 7 Days to Die server" /> <property name="ServerWebsiteURL" value="home.sovic.org.ua" /> ... <property name="DayNightLength" value="120" /> <property name="DayLightLength" value="18" /> ... <property name="DropOnDeath" value="2" /> <property name="DropOnQuit" value="0" /> ... <property name="CraftTimer" value="0" /> <property name="LootTimer" value="0" /> ... <property name="EnemySpawnMode" value="4" /> ... <property name="LootAbundance" value="300" /> <property name="LootRespawnDays" value="30" />
Запуск севера
Дополнительно, можно установить мод на сервер, который добавит пару дополнительных команд и самое вкусное что мне нравиться это возможность просмотра карты через веб. Очень помогает в поиске пещерок :) так как они редко сейчас встречаются, а на игровой карте искать не удобно, пока ищешь могут и "ушатать" :)
~/g/7dtd> wget http://illy.bz/fi/7dtd/server_fixes.tar.gz ~/g/7dtd> tar -xzvf server_fixes.tar.gz
Пример работы данного мода можно посмотреть у меня на сервере
iHome 7 Days to Die server[home.sovic.org.ua] порт 8082.
Ну вот и все, запускаем сервер:
~/g/7dtd> ./startserver.sh -configfile=serverconfig.xml
Если кто забыл или не знал :), то напоминаю, что бы выйти с контейнера без его остановки, используем комбинацию клавиш Ctrl+p Ctrl+q. В дальнейшем что бы подключиться к контейнеру, если потребуется внести изменения, используем команду
~> docker attach 7dtd
Перед этим остановив сам сервер игры командой shutdown. Управление сервером я выполняю через подключение к нему по telnet.
~> telnet localhost 8081
На этом все, приятной игры. Если кто захочет поиграть вместе у меня на сервера, пишите.
Заходите на мой блог - UNIX и не только...[unixua.blogspot.com]
14 Comments
lilaj Aug 29, 2021 @ 4:05am 
ребята я ищю друзей
OT_MOPO3_OK Jan 3, 2017 @ 4:53am 
Херь линуковская!
Мраконосец Jan 2, 2017 @ 11:00am 
Ребят,сори что не в тему но я хочу LootAbundance сделать 500%.
Как то раз встретил серв,где с зомби просто тьма лута была. Но изменяя конфиг серва,ничего такого не происходит,помогите нубу,как сделать это?)
makar_spb Dec 6, 2016 @ 2:34pm 
{LINK REMOVED} - более удобное решение.
sovicUA2  [author] Jul 26, 2016 @ 10:19am 
Ого... нужно в логи смотреть, если падает куча ПО то тут может совсем проблемма не в самом сервере 7DTD, а в самой системе... в общем так на вскидку не скажешь :(
hedgehog Jul 24, 2016 @ 3:33am 
сервер на отдельной машине стоит, причем заметел когда падает сервер вылетает еще и PHP и MySql. SSH - закрывает доступ к серверу((
sovicUA2  [author] Jul 23, 2016 @ 1:09am 
2Devterev Все эти настройки можно сделать в xml файлах... какие именно можно в интернете найти :) и думаю что ты уже сам их нашел :)
sovicUA2  [author] Jul 23, 2016 @ 1:07am 
Сервер на виртуалке или железный выделенный сервер?
Если на виртуалке, то больше всего из-за проблеммы с памятью.
Хотя у меня не крашился... а просто тупил, при том что виртуалке как бы 8 гиг выделено.
У тебя сервер с можом или без?
hedgehog Jul 16, 2016 @ 1:55am 
Попробывал, сервер крашится через пять минут примерно после старта.
Непойму в чем проблема. На сервер пускает все работает....
Из-за чего может быть не подскажите?
Devterev May 16, 2016 @ 12:32pm 
нет,я имею ввиду - где найти настройки,чтобы можно было настроить автоудаление предметов с сервера.То есть если предмет живет 5 минут,я хочу именьшить до 1й минуты - ибо нагружает сервак