RE:NODE

LinuxGSM vhserver: установка сервера Valheim и команды

Автор Команда RE:NODE
13 мин чтения


vhserver из LinuxGSM - готовый скрипт управления выделенным сервером Valheim на Linux. Вы создаёте пользователя vhserver, скачиваете linuxgsm.sh, выполняете bash linuxgsm.sh vhserver, а затем ./vhserver install - и получаете одну команду, которая устанавливает сервер через SteamCMD, запускает его в сессии tmux, корректно останавливает, проверяет обновления в Steam, архивирует бэкапы, перезапускает сервер, если он упал, и отправляет оповещения в Discord или на почту. Настройки хранятся в lgsm/config-lgsm/vhserver/vhserver.cfg, а не в _default.cfg. Три строки cron - monitor каждые пять минут, update каждые тридцать, update-lgsm раз в неделю - превращают его в сервер, который в основном следит за собой сам. Цена - слой shell-скриптов между вами и игрой, а vhserver, который обновляет сам себя, - неверное значение по умолчанию для модифицированного мира.

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

Что такое LinuxGSM и что он делает для Valheim#

LinuxGSM (Linux Game Server Managers) - это набор Bash-скриптов с открытым кодом, который управляет более чем сотней выделенных серверов одними и теми же командами. vhserver - его модуль для Valheim. Он не заменяет игровой сервер и не меняет принципа его работы: внутри он по-прежнему устанавливает приложение Steam 896660 с анонимным входом и запускает valheim_server.x86_64 с теми же аргументами, которые вы набрали бы сами. Он добавляет эксплуатационную обвязку:

  • Установка и проверка зависимостей. Он сообщает, каких пакетов не хватает в вашем дистрибутиве, и устанавливает SteamCMD для пользователя.
  • Сессия tmux на сервер. Сервер работает в фоне; ./vhserver console подключается к нему.
  • Проверка обновлений. Он сравнивает установленную сборку с актуальной в Steam и останавливает сервер, только если есть что устанавливать.
  • Бэкапы. Сжатые архивы с ограничением по количеству и возрасту.
  • Мониторинг. Проверка, что сервер запущен и отвечает, с перезапуском и оповещением, если это не так.
  • Оповещения. Discord, почта, Telegram, Slack, Pushover и другие - всё настраивается в одном файле.
  • Сводка. ./vhserver details выводит порты, пароль, пути и строку запуска в одном месте.

У Valheim нет собственного файла конфигурации - каждая настройка является аргументом запуска, - поэтому файл конфигурации LinuxGSM по сути и есть файл конфигурации сервера. Если вы ещё не видели аргументы, в справочнике аргументов запуска Valheim они перечислены со значениями по умолчанию.

Установка vhserver#

LinuxGSM поддерживает распространённые серверные дистрибутивы; чаще всего используют Ubuntu LTS и Debian stable. Делайте всё от отдельного непривилегированного пользователя - LinuxGSM отказывается работать от root.

bash
$ sudo adduser vhserver$ sudo su - vhserver$ curl -Lo linuxgsm.sh https://linuxgsm.sh && chmod +x linuxgsm.sh$ bash linuxgsm.sh vhserver$ ./vhserver install

Шаг установки сначала проверяет зависимости. Если чего-то не хватает, он выводит точную строку sudo apt install для вашего дистрибутива и останавливается; выполните её от пользователя с правами sudo, затем снова запустите ./vhserver install. В 64-битных Debian и Ubuntu в список входят 32-битные библиотеки для SteamCMD, а значит, должна быть выполнена команда dpkg --add-architecture i386 - в выведенных инструкциях она есть, когда нужна. Список пакетов меняется между релизами LinuxGSM и версиями дистрибутивов, поэтому копируйте его из вывода установщика или со страницы vhserver на linuxgsm.com, а не из старой инструкции.

Затем установщик скачивает сервер в ~/serverfiles (около 2 ГБ) и задаёт пару вопросов. ./vhserver auto-install отвечает на них значениями по умолчанию - эта версия подходит для скрипта развёртывания.

Когда установка завершена, домашний каталог выглядит так:

ПутьЧто там лежит
~/vhserverКоманда, которой вы пользуетесь для всего
~/serverfiles/Сервер Valheim из SteamCMD
~/lgsm/config-lgsm/vhserver/Файлы конфигурации LinuxGSM для этого сервера
~/lgsm/backup/Архивы бэкапов
~/log/Логи консоли и скриптов LinuxGSM
~/.config/unity3d/IronGate/Valheim/Миры и списки админов, банов и допуска

Последняя строка - это стандартный каталог сохранений самого Valheim, а не LinuxGSM. Миры лежат в worlds_local внутри него, а adminlist.txt, bannedlist.txt и permittedlist.txt - рядом с этой папкой. Что меняется, если задать -savedir, описано в статье где Valheim хранит свои файлы.

Файлы конфигурации и важные переменные#

LinuxGSM читает три файла по порядку, и каждый переопределяет предыдущий:

  1. _default.cfg - все переменные со значениями по умолчанию. Перезаписывается, когда LinuxGSM обновляет сам себя. Читайте, но никогда не редактируйте.
  2. common.cfg - настройки, общие для всех серверов LinuxGSM этого пользователя, например данные для оповещений.
  3. vhserver.cfg - настройки для этого конкретного экземпляра. Сюда вносятся ваши изменения.

Типичная ошибка - отредактировать _default.cfg, увидеть, что изменение работает, и потерять его при следующем update-lgsm. Скопируйте нужные строки из _default.cfg в vhserver.cfg и правьте их там:

lgsm/config-lgsm/vhserver/vhserver.cfg
servername="Longship Crew"serverpassword="herring-barrel-42"port="2456"gameworld="Midgard"public="1"

Приведённые выше имена переменных давно используются в значениях по умолчанию vhserver, а строка запуска собирается из них в переменной startparameters. Иногда имена меняются между релизами LinuxGSM, поэтому откройте собственный _default.cfg и копируйте из него, а не доверяйте никакой инструкции, включая эту:

bash
$ grep -nE '^(servername|serverpassword|port|gameworld|public|startparameters)=' \    ~/lgsm/config-lgsm/vhserver/_default.cfg

Чтобы добавить аргументы, которые предопределённые переменные не покрывают - кроссплей, интервал сохранения, модификаторы мира, - скопируйте startparameters в vhserver.cfg и расширьте. Сохраните ссылки на переменные, чтобы простые настройки выше продолжали работать:

lgsm/config-lgsm/vhserver/vhserver.cfg
startparameters="-name '${servername}' -password '${serverpassword}' -port ${port} -world '${gameworld}' -public ${public} -crossplay -saveinterval 900 -backups 4 -preset casual"

Если в вашем _default.cfg уже есть отдельная настройка кроссплея, используйте её вместо ручного добавления флага. После этого ./vhserver details выводит итоговую строку запуска - это самый быстрый способ убедиться, что кавычки сохранились.

Правила самой игры действуют поверх правил LinuxGSM: порт запросов всегда равен игровому порту плюс один, поэтому port="2456" означает, что UDP 2456 и 2457 должны быть доступны. Правила для файрвола есть в статье порты Valheim 2456-2458: разбор.

Команды, которыми вы будете пользоваться#

У каждой команды есть короткая форма, она показана в скобках в собственной справке LinuxGSM. ./vhserver без аргументов выводит полный список для вашей версии.

КомандаКороткоЧто делает
startstЗапускает сервер в сессии tmux
stopspКорректно останавливает, так что мир сохраняется
restartrОстановка, затем запуск
detailsdtПорты, пароль, пути, строка запуска, состояние
consolecПодключается к сессии tmux
monitormПроверяет, что сервер работает; если нет, перезапускает
updateuОбновляет сервер, если в Steam есть более новая сборка
check-updatecuСообщает, есть ли обновление, ничего не меняя
force-updatefuОбновляет, даже если сборка выглядит актуальной
validatevПроверяет файлы сервера по данным Steam
backupbСоздаёт архив бэкапа
update-lgsmulОбновляет собственные скрипты LinuxGSM
test-alerttaОтправляет тестовое сообщение в настроенные оповещения
debugdЗапускает сервер на переднем плане для диагностики
mods-installmiПоказывает и устанавливает моды, известные LinuxGSM

Две из этих команд требуют предупреждения. console подключает вас к работающему процессу сервера; выйти можно через Ctrl+b, затем d. Нажатие Ctrl+C в консоли отправляет серверу прерывание и останавливает его - LinuxGSM выводит это предупреждение при подключении, и всё равно люди так делают. Valheim ничего не читает из стандартного ввода, поэтому консоль нужна для наблюдения, а не для ввода команд; админские команды выполняются в консоли F5 игрового клиента игроками из adminlist.txt.

validate перезаписывает изменённые файлы игры копиями из Steam. Это касается start_server.sh и на модифицированной установке может откатить файлы, на которые опирается BepInEx. Запускайте её, когда подозреваете повреждение, а не как рутинную процедуру.

debug - команда на случай, когда start рапортует об успехе, а сервера нет. Она запускает сервер в вашем терминале с видимым выводом, и ошибка, которую скрыла отсоединённая сессия, пробегает у вас перед глазами. Обычные подозреваемые - нарушение правила пароля, занятый порт, отсутствующая библиотека, мир, который не загружается - разобраны в статье сервер Valheim падает при запуске.

Cron: мониторинг, обновления и сам LinuxGSM#

LinuxGSM сам по расписанию ничего не делает; задания cron вы добавляете для пользователя vhserver через crontab -e. Набор, который рекомендует документация LinuxGSM, плюс ночной бэкап и еженедельный рестарт:

crontab -e (as vhserver)
*/5 * * * * /home/vhserver/vhserver monitor > /dev/null 2>&1*/30 * * * * /home/vhserver/vhserver update > /dev/null 2>&10 0 * * 0 /home/vhserver/vhserver update-lgsm > /dev/null 2>&115 5 * * * /home/vhserver/vhserver backup > /dev/null 2>&10 5 * * 1 /home/vhserver/vhserver restart > /dev/null 2>&1@reboot /home/vhserver/vhserver start > /dev/null 2>&1

Что даёт каждая строка:

  • `monitor` каждые пять минут. Если сессии tmux больше нет или сервер перестал отвечать на порту запросов, LinuxGSM перезапускает его и отправляет оповещение. Эта строка заменяет restart-on-failure из systemd.
  • `update` каждые тридцать минут. Проверяет в Steam наличие новой сборки. Если она есть, корректно останавливает сервер, обновляет и запускает снова. На ванильном сервере это значит, что патч Valheim применяется в течение получаса - до того, как большинство ваших игроков запустит обновлённый клиент.
  • `update-lgsm` раз в неделю. Поддерживает скрипты в актуальном состоянии. Ваш vhserver.cfg не затрагивается; _default.cfg заменяется, поэтому его никогда не редактируют.
  • `backup` каждую ночь и `restart` раз в неделю - в часы, когда никто не играет. Бэкап в понедельник запускается через пятнадцать минут после рестарта. Почему для Valheim обычно хватает еженедельного рестарта, объясняет статья расписания рестартов, которые помогают.
  • `@reboot` запускает сервер при загрузке машины. Альтернатива - unit systemd, о нём ниже.

Cron запускает задания с минимальным окружением. Используйте полные пути, как выше, а если задание вроде бы ничего не делает, выполните ту же строку вручную от пользователя vhserver и прочитайте ~/log/script/. Пятиполевой синтаксис описан в статье выражения cron: разбор.

Запуск при загрузке через systemd вместо @reboot#

@reboot работает, но не останавливает сервер корректно при выключении машины - сессия tmux просто убивается вместе со всем остальным. Исправляет это небольшой unit systemd, вызывающий собственные start и stop из LinuxGSM:

/etc/systemd/system/vhserver.service
[Unit]Description=LinuxGSM vhserverWants=network-online.targetAfter=network-online.target[Service]Type=forkingUser=vhserverWorkingDirectory=/home/vhserverRemainAfterExit=yesExecStart=/home/vhserver/vhserver startExecStop=/home/vhserver/vhserver stopTimeoutStopSec=180Restart=no[Install]WantedBy=multi-user.target

Restart=no выбрано намеренно: восстановление после сбоев остаётся за monitor, и вам не нужно, чтобы два супервизора боролись за один процесс. Когда этот unit включён, уберите строку @reboot из cron. Если вы предпочитаете обойтись без LinuxGSM и отдать надзор за сервером напрямую systemd, запуск Valheim как службы systemd собирает такой unit с нуля.

Бэкапы и оповещения#

./vhserver backup записывает сжатый архив в ~/lgsm/backup/. Он архивирует каталог LinuxGSM, который при стандартной установке является домашним каталогом vhserver, за вычетом самой папки бэкапов, - так что файлы мира из ~/.config/unity3d/IronGate/Valheim попадают в архив. Убедитесь в этом на своей установке, прежде чем на это полагаться:

bash
$ ./vhserver backup$ ls -lh ~/lgsm/backup/$ tar -tzf ~/lgsm/backup/vhserver-*.tar.gz | grep -E 'worlds_local/.*\.(db|fwl)$'

Если последняя команда выводит файлы вашего мира, в бэкапе есть всё важное. Если ничего не выводит, ваши сохранения лежат вне архивируемого дерева - обычно из-за -savedir - и вам нужна отдельная копия.

Поведением управляют переменные, которые можно переопределить в vhserver.cfg. Проверьте имена и значения по умолчанию в своём _default.cfg; важны максимальное количество хранимых архивов (maxbackups), максимальный возраст в днях (maxbackupdays) и то, останавливать ли сервер на время архивации (stoponbackup). Остановка безопаснее - она гарантирует свежее сохранение, и ни один файл не пишется посреди архивации, - ценой минуты простоя в 5 утра, которую никто не заметит.

Две оговорки. Архив включает 2 ГБ файлов сервера, поэтому он намного больше мира, который защищает; на маленьком диске уменьшите количество. И ~/lgsm/backup/ находится на том же диске, что и сервер, поэтому копируйте архивы ещё и в другое место. Как восстанавливать и как выглядит повреждённый мир, описано в статье бэкапы сервера Valheim и повреждение мира.

Оповещения настраиваются в common.cfg, чтобы их разделяли все серверы пользователя. Для Discord задайте discordalert="on" и вставьте webhook канала в discordwebhook, затем запустите ./vhserver test-alert. Другие сервисы устроены по тому же шаблону <service>alert плюс учётные данные; _default.cfg перечисляет все поддерживаемые сервисы и их переменные. Оповещение о перезапусках monitor - самое полезное уведомление, какое может быть у небольшого сервера: повторяющиеся перезапуски - первый признак умирающего мира или сломанного мода.

Моды с LinuxGSM#

В LinuxGSM есть команда mods-install, и недавние версии указывают среди вариантов пакет BepInEx для Valheim. Будет ли он в списке, какую сборку BepInEx он скачает и как подключит стартовый скрипт - зависит от вашего релиза LinuxGSM, поэтому запустите ./vhserver mods-install, прочитайте список и после следующего запуска проверьте в логе собственные стартовые строки BepInEx. Если их нет, сервер работает без модов.

Отдельными модами LinuxGSM не управляет. Их .dll-файлы кладутся в ~/serverfiles/BepInEx/plugins, а конфигурации появляются в ~/serverfiles/BepInEx/config после первого запуска. Ручная установка BepInEx, которая работает и под LinuxGSM, описана в статье моды Valheim с BepInEx на сервере. Три правила оттуда важнее под LinuxGSM из-за его автоматизации: отключите задание cron с update, никогда не запускайте validate без необходимости и сохраняйте копию рабочей папки BepInEx перед каждым обновлением, чтобы откатиться за минуту.

LinuxGSM или обычный скрипт: компромиссы#

LinuxGSM хорош. Но это и много shell между вами и одним процессом Unity. Что лучше, зависит от того, чем вы хотите владеть сами.

LinuxGSM vhserverОбычный скрипт под systemd
Время настройкиНесколько минутОт пятнадцати до тридцати минут
Обновленияupdate проверяет сборку и перезапускает, только если нужноSteamCMD вручную или при каждом запуске
Восстановление после сбояmonitor из cron, опоздание до пяти минутRestart=on-failure, секунды
ЛогиФайлы в ~/log/Журнал или выбранный вами файл
ОповещенияВстроеныВаш собственный скрипт
КонсольПодключаемая сессия tmuxНет, и Valheim она почти не нужна
Движущиеся частиLinuxGSM, tmux, cronТолько systemd
Несколько серверовПовторный bash linuxgsm.sh vhserver создаёт vhserver-2Шаблонный unit

Выбирайте LinuxGSM, если хотите обнаружение обновлений, оповещения и бэкапы без их написания или если у вас уже работают другие серверы LinuxGSM и вам нравится единый набор команд. Выбирайте обычный скрипт, если вам нужно минимум слоёв, более быстрое восстановление после сбоев, логи в журнале и установка, в которой каждая строка написана вами. Неправильного выбора нет; неправильно смешивать - нужен один супервизор на сервер.

Где бы это ни работало, сначала на машине должны быть в порядке основы: файрвол, пропускающий только SSH и два UDP-порта, SSH только по ключам и достаточно памяти. Выбор размера и файрвол описаны в статье Valheim на Linux VPS, а команды Linux для администраторов серверов - хорошее напоминание, если вы новичок в командной строке.

FAQ#

Где находятся миры в установке Valheim с LinuxGSM?

В стандартном каталоге сохранений Valheim для пользователя vhserver: ~/.config/unity3d/IronGate/Valheim/worlds_local/, по паре .db и .fwl на мир. LinuxGSM их не перемещает, пока вы не добавите -savedir в параметры запуска.

Почему моё изменение конфигурации пропало?

Вы отредактировали _default.cfg, который перезаписывает update-lgsm. Вносите изменения в vhserver.cfg для этого сервера или в common.cfg для всех серверов пользователя. Оба файла переживают обновления.

Сохраняет ли ./vhserver stop мир?

Да, он корректно останавливает сервер, так что Valheim записывает мир перед выходом. В первый раз проверьте лог консоли после остановки. Если убить сессию tmux или процесс напрямую, сохранения не будет.

Как запустить два сервера Valheim с LinuxGSM?

Запустите bash linuxgsm.sh vhserver ещё раз в том же домашнем каталоге; будет создан vhserver-2 со своим vhserver-2.cfg. Задайте ему другой порт, как минимум на два больше первого, другое имя мира и другое имя сервера.

Безопасно ли автоматически обновлять модифицированный сервер через LinuxGSM?

Обновлять сам LinuxGSM через update-lgsm можно. Автоматически обновлять игру через update нельзя, потому что патч Valheim ломает моды BepInEx, пока их не пересоберут. Используйте check-update и обновляйтесь вручную.