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.
$ 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 читает три файла по порядку, и каждый переопределяет предыдущий:
_default.cfg- все переменные со значениями по умолчанию. Перезаписывается, когда LinuxGSM обновляет сам себя. Читайте, но никогда не редактируйте.common.cfg- настройки, общие для всех серверов LinuxGSM этого пользователя, например данные для оповещений.vhserver.cfg- настройки для этого конкретного экземпляра. Сюда вносятся ваши изменения.
Типичная ошибка - отредактировать _default.cfg, увидеть, что изменение работает, и потерять его при следующем update-lgsm. Скопируйте нужные строки из _default.cfg в vhserver.cfg и правьте их там:
servername="Longship Crew"serverpassword="herring-barrel-42"port="2456"gameworld="Midgard"public="1"Приведённые выше имена переменных давно используются в значениях по умолчанию vhserver, а строка запуска собирается из них в переменной startparameters. Иногда имена меняются между релизами LinuxGSM, поэтому откройте собственный _default.cfg и копируйте из него, а не доверяйте никакой инструкции, включая эту:
$ grep -nE '^(servername|serverpassword|port|gameworld|public|startparameters)=' \ ~/lgsm/config-lgsm/vhserver/_default.cfgЧтобы добавить аргументы, которые предопределённые переменные не покрывают - кроссплей, интервал сохранения, модификаторы мира, - скопируйте startparameters в 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 без аргументов выводит полный список для вашей версии.
| Команда | Коротко | Что делает |
|---|---|---|
start | st | Запускает сервер в сессии tmux |
stop | sp | Корректно останавливает, так что мир сохраняется |
restart | r | Остановка, затем запуск |
details | dt | Порты, пароль, пути, строка запуска, состояние |
console | c | Подключается к сессии tmux |
monitor | m | Проверяет, что сервер работает; если нет, перезапускает |
update | u | Обновляет сервер, если в Steam есть более новая сборка |
check-update | cu | Сообщает, есть ли обновление, ничего не меняя |
force-update | fu | Обновляет, даже если сборка выглядит актуальной |
validate | v | Проверяет файлы сервера по данным Steam |
backup | b | Создаёт архив бэкапа |
update-lgsm | ul | Обновляет собственные скрипты LinuxGSM |
test-alert | ta | Отправляет тестовое сообщение в настроенные оповещения |
debug | d | Запускает сервер на переднем плане для диагностики |
mods-install | mi | Показывает и устанавливает моды, известные 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, плюс ночной бэкап и еженедельный рестарт:
*/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:
[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.targetRestart=no выбрано намеренно: восстановление после сбоев остаётся за monitor, и вам не нужно, чтобы два супервизора боролись за один процесс. Когда этот unit включён, уберите строку @reboot из cron. Если вы предпочитаете обойтись без LinuxGSM и отдать надзор за сервером напрямую systemd, запуск Valheim как службы systemd собирает такой unit с нуля.
Бэкапы и оповещения#
./vhserver backup записывает сжатый архив в ~/lgsm/backup/. Он архивирует каталог LinuxGSM, который при стандартной установке является домашним каталогом vhserver, за вычетом самой папки бэкапов, - так что файлы мира из ~/.config/unity3d/IronGate/Valheim попадают в архив. Убедитесь в этом на своей установке, прежде чем на это полагаться:
$ ./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 и обновляйтесь вручную.


