RE:NODE

Выделенный сервер Valheim на Linux VPS: от размера до обновлений

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


Для сервера Valheim на Linux VPS нужна x86-64 машина с двумя vCPU, 4 ГБ памяти для группы до шести человек (6-8 ГБ для десяти или для модов), 20 ГБ SSD и больше, Ubuntu LTS или Debian и расположение рядом с игроками. Установите сервер через SteamCMD от непривилегированного пользователя, откройте UDP 2456 и 2457 и в собственном файрволе VPS (sudo ufw allow 2456:2457/udp), и в сетевом файрволе провайдера, если он есть, и запускайте сервер как службу systemd, а не в tmux, чтобы он переживал перезагрузки и сохранялся при остановке. После этого поддерживайте в актуальном состоянии две вещи по разным графикам: операционную систему - автоматически, а игру - осознанно. Это вся работа; остальная часть статьи - рассуждения, точные команды и проблемы, которые VPS добавляет по сравнению с домашним ПК или игровым хостингом.

Подходит ли VPS для сервера Valheim?#

VPS даёт вам целую Linux-машину за ежемесячную плату: root-доступ, публичный IP и ничьих чужих правил. Для Valheim это означает любой мод, любой аргумент запуска, любую схему бэкапов, несколько миров на одной машине и другие сервисы рядом с сервером - бота Discord, небольшой сайт, просмотрщик карты.

Это также делает администратором вас. Никто другой не обновляет ядро, не замечает заполняющийся диск, не ротирует логи и не восстанавливает мир, когда он повреждён. Если это звучит как хобби, VPS - выгодное решение. Если как повинность, управляемый игровой сервер делает ту же работу с панелью сверху, а разница в цене меньше, чем принято считать. Различия в том, что именно вы арендуете, объясняет статья VPS, VDS и выделенный сервер: чем они отличаются.

Две вещи нужно исключить, прежде чем платить:

  • Инстансы ARM. Выделенный сервер Valheim собран только для x86-64 Linux. Дешёвые ARM-тарифы, которые рекламируют некоторые провайдеры, нативно его не запустят, а слои эмуляции - не то, на чём стоит строить мир группы. Проверьте архитектуру процессора в описании тарифа.
  • Burst-процессор или сильно разделяемый CPU. Тарифы, дающие долю ядра с «burst-кредитами», несколько минут работают нормально, а потом троттлятся. Симуляция Valheim - это постоянная нагрузка, а не всплески, поэтому она израсходует кредиты и начнёт подтормаживать.

Выбор размера VPS#

Сервер Valheim опирается на один главный поток, поэтому быстрое ядро важнее, чем много медленных, но второй vCPU стоит иметь - сохранение, сеть и обновления SteamCMD выполняются вне главного потока, а операционной системе нужно где-то работать. Память растёт вместе с исследованным миром и количеством строительных элементов; обследованному миру с четырьмя большими базами нужно гораздо больше, чем свежему сиду.

Цифры ниже относятся ко всему VPS, поэтому включают операционную систему, SSH, файрвол и скачок памяти во время обновления SteamCMD - примерно 0,5-1 ГБ сверх самой игры.

ГруппаvCPUПамять VPSДиск
1-3 игрока, новый мир24 ГБ20 ГБ
4-6 игроков, несколько баз24-6 ГБ25 ГБ
7-10 игроков, исследованный мир2-46-8 ГБ30 ГБ
С модами, 10+ модов BepInEx48 ГБ30-40 ГБ

Использование диска скромное: около 2 ГБ под сервер, файл мира, который обычно вырастает до 20-150 МБ, и бэкапы. Дополнительное место в таблице - для ОС, кэша SteamCMD и разумного числа архивных бэкапов на самой машине. Предпочитайте NVMe или SSD; зависание во время сохранения мира - это запись на диск.

Расположение важнее любых характеристик. Выбирайте регион с наименьшей задержкой для большинства вашей группы; для европейской группы немецкий или нидерландский дата-центр всегда обойдёт более быструю машину в США. Valheim использует мало трафика - десятки или малые сотни КБ/с на игрока, - так что скорость порта в тарифе не имеет значения. Подробности того, как растёт память за время жизни мира, есть в статье сколько RAM нужно серверу Valheim.

На общей виртуализации, когда сервер уже работает с игроками, проверьте CPU steal:

bash
$ vmstat 1 10# the last column, st, is time the hypervisor gave your vCPU to someone else

Если steal держится выше нескольких процентов, пока игроки жалуются на лаги, хост перепродан, и никакая настройка внутри VPS этого не исправит. Исправит тариф с выделенными ядрами или другой провайдер.

Первые шаги на свежем VPS#

Прежде чем делать что-либо, связанное с Valheim, сделайте машину безопасной для оставления в интернете. В Ubuntu или Debian, от root или пользователя с sudo:

bash
$ sudo apt update && sudo apt full-upgrade -y$ sudo adduser admin && sudo usermod -aG sudo admin# copy your SSH public key to the new user, log in with it, then:$ sudoedit /etc/ssh/sshd_config.d/50-hardening.conf
/etc/ssh/sshd_config.d/50-hardening.conf
PasswordAuthentication noPermitRootLogin no
bash
$ sudo sshd -t && sudo systemctl reload ssh

Не закрывайте текущую сессию и проверьте новый вход, прежде чем её закрыть; опечатка в конфигурации SSH закрывает вам доступ, а на VPS это означает консоль восстановления провайдера. Служба SSH называется ssh в Ubuntu и Debian и sshd в большинстве других дистрибутивов. Ключи, fail2ban и остальное описаны в статье SSH-ключи и защита.

Если в тарифе 4 ГБ или меньше, добавьте небольшой файл подкачки. Сервер быстрее от этого не станет - игровой сервер, ушедший в своп, - это игровой сервер с подтормаживаниями, - но ядру будет куда выгрузить неиспользуемую память во время обновления SteamCMD вместо того, чтобы убивать сервер:

bash
$ sudo fallocate -l 2G /swapfile$ sudo chmod 600 /swapfile$ sudo mkswap /swapfile && sudo swapon /swapfile$ echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Что происходит, когда память всё же заканчивается, и почему мир теряет всё несохранённое, объясняет статья подкачка Linux и OOM killer.

Затем установите сам сервер: SteamCMD, отдельного пользователя valheim, приложение 896660 с анонимным входом и вашу собственную копию стартового скрипта. Это работа на пятнадцать минут, пошагово описанная в статье установка сервера Valheim на Linux через SteamCMD, поэтому здесь не повторяется.

Открываем порты: ufw#

Valheim нужны два UDP-порта: игровой, по умолчанию 2456, и следующий за ним 2457, отвечающий на запросы Steam. Оба - UDP. Правило для TCP ничего не даёт.

В Ubuntu самая простая оболочка файрвола - ufw. Сначала разрешите SSH, иначе включение файрвола оборвёт ваше собственное соединение:

bash
$ sudo ufw allow OpenSSH$ sudo ufw allow 2456:2457/udp comment 'Valheim'$ sudo ufw default deny incoming$ sudo ufw default allow outgoing$ sudo ufw enable$ sudo ufw status verbose

OpenSSH - профиль приложения, который ufw поставляет в Ubuntu; в минимальной установке Debian, где его нет, используйте sudo ufw allow 22/tcp или тот порт, на который вы перенесли SSH. Если вы запускаете второй мир с -port 2458, добавьте также 2458:2459/udp. Каждый сервер использует свой игровой порт и следующий за ним, поэтому серверы должны отстоять как минимум на два порта. Почему старые руководства открывают 2458 для одного сервера, объясняет статья порты Valheim 2456-2458: разбор.

Общие приёмы - запрет по умолчанию, ограничение SSH, журналирование - описаны в руководстве по файрволу ufw.

Открываем порты: iptables и nftables#

Если вы не используете ufw или в дистрибутиве его нет, пишите правила напрямую. С iptables:

bash
$ sudo iptables -A INPUT -i lo -j ACCEPT$ sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT$ sudo iptables -A INPUT -p udp --dport 2456:2457 -j ACCEPT$ sudo iptables -P INPUT DROP

Порядок важен: правила для SSH и установленных соединений должны быть на месте до того, как политика по умолчанию станет DROP. Заданные так правила исчезают при перезагрузке. В Debian и Ubuntu установите iptables-persistent и сохраните их:

bash
$ sudo apt install iptables-persistent$ sudo netfilter-persistent save

В современных Debian и Ubuntu команда iptables обычно является слоем совместимости поверх nftables. Если вы предпочитаете писать nftables напрямую, эквивалентное правило внутри цепочки input таблицы фильтра inet выглядит так:

/etc/nftables.conf (excerpt)
udp dport 2456-2457 accept

Каким бы инструментом вы ни пользовались, используйте только один. Запуск ufw вместе с написанными вручную правилами iptables даёт набор правил, в котором никто не разберётся. Общая картина описана в статье правила файрвола, которые важны.

Чтобы проверить, что сервер слушает:

bash
$ sudo ss -ulpn | grep valheim

Вы должны увидеть сокеты UDP на 2456 и 2457. Проверять UDP снаружи не так удобно, как TCP - большинство проверяльщиков портов понимают только TCP, а закрытый UDP-порт часто выглядит так же, как открытый, не давший ответа. Честная проверка - игрок, подключающийся по IP, и затем проверка, что сервер появился в списке сообщества.

tmux или screen против службы#

В большинстве быстрых руководств сервер запускают в tmux или screen, чтобы он продолжал работать после выхода из системы:

bash
$ tmux new -s valheim$ ./start_valheim.sh# detach: Ctrl+b then d; come back with: tmux attach -t valheim$ screen -S valheim$ ./start_valheim.sh# detach: Ctrl+a then d; come back with: screen -r valheim

Для вечера тестов это нормально. Для сервера, который вы оставляете работать, - нет, из-за того, чего он не делает:

tmux / screenСлужба systemd
Переживает выход из системыДаДа
Запускается при загрузкеНетДа
Перезапускается после сбояНетДа, с лимитом
Чистое сохранение при выключенииТолько если вы остановили его вручную заранееДа, с KillSignal=SIGINT
Лог с поискомТолько прокруткаjournalctl
Подключаемая консольДаНет

Мир теряет данные из-за четвёртой строки. Когда VPS перезагружается из-за обновления ядра, сессия tmux убивается вместе со всем остальным, и мир теряет всё с момента последнего сохранения по таймеру - до тридцати минут при -saveinterval по умолчанию. Unit systemd сначала останавливает сервер сигналом SIGINT, Valheim сохраняется, и только потом машина выключается.

Подключаемая консоль - единственное, что даёт tmux и чего нет в systemd, - для Valheim почти ничего не стоит: выделенный сервер не читает команды из стандартного ввода. Админские команды вводятся в консоли F5 игрового клиента. Unit, политика перезапуска и таймеры собраны в статье запуск Valheim как службы systemd. Если вам нужен tmux плюс инструменты управления, vhserver из LinuxGSM оборачивает сервер в сессию tmux со своими командами обновления, бэкапа и мониторинга.

Поддерживаем актуальность: ОС и игра#

На VPS с Valheim бывает два вида обновлений, и относиться к ним нужно противоположно.

Операционная система должна обновляться сама. Ubuntu по умолчанию включает unattended-upgrades для обновлений безопасности; в Debian установите его и выполните sudo dpkg-reconfigure -plow unattended-upgrades. Обновления ядра вступают в силу только после перезагрузки, а unattended-upgrades не перезагружает, пока ему не скажут. Пусть он перезагружается в тихий час:

/etc/apt/apt.conf.d/50unattended-upgrades (excerpt)
Unattended-Upgrade::Automatic-Reboot "true";Unattended-Upgrade::Automatic-Reboot-Time "05:00";

Это безопасно только потому, что сервер работает как служба systemd с чистой остановкой. Когда сервер в tmux, автоматическая перезагрузка - это автоматическая потеря прогресса. Если вы предпочитаете перезагружать вручную, примерно раз в неделю проверяйте /var/run/reboot-required.

Игра должна обновляться тогда, когда решаете вы. Когда выходит патч Valheim, клиенты игроков обновляются через Steam, а сервер должен совпадать точно, иначе все видят Incompatible version. Обновление - одна строка SteamCMD, запускаемая от пользователя valheim при остановленном сервере:

bash
$ sudo systemctl stop valheim$ sudo -u valheim /usr/games/steamcmd +force_install_dir /home/valheim/server \    +login anonymous +app_update 896660 validate +quit$ sudo systemctl start valheim

На ванильном сервере это можно автоматизировать: пусть unit запускает обновление перед каждым стартом, и перезапуск подхватит патч. На модифицированном сервере так делать нельзя: патчи ломают моды BepInEx, пока авторы их не пересоберут, и обновление, которое вы не выбирали, оставляет сервер, который не запускается. validate также восстанавливает start_server.sh до поставляемой версии, поэтому сервер стоит запускать из собственной копии. Выбор времени для групп и проблема расхождения версий описаны в статье обновление сервера Valheim и несовпадение версий.

Бэкапы и ежедневные проверки#

VPS даёт вам один диск, а встроенные копии -backups Valheim лежат на нём рядом с миром. Они защищают от неудачного сохранения, но не от удалённого каталога, переполненного диска или инцидента у провайдера. Архивируйте каталог сохранений по расписанию, по возможности после чистого рестарта, и копируйте архив за пределы машины - в объектное хранилище или на другой компьютер. Восстановление описано в статье бэкапы сервера Valheim и повреждение мира, а как отправить архивы в другое место - в статье бэкапы игровых серверов в S3. Снапшоты провайдера - полезное дополнение, но снапшот, снятый в момент сохранения, - это снапшот недописанного мира.

Короткая рутина ловит большинство проблем раньше игроков:

bash
$ systemctl status valheim$ journalctl -u valheim --since today -g "Exception|Error"$ free -h$ df -h /$ uptime

Следите за тремя тенденциями на протяжении недель: память, ползущая к лимиту (еженедельный рестарт обычно держит её на ровном уровне), диск, заполняющийся бэкапами или логами, и load average выше количества ваших vCPU, пока люди играют. Первые две дёшево исправить. Третья означает более крупный тариф или мир, который перерос свой сервер. Если эти инструменты вам в новинку, начать можно со статьи команды Linux для администраторов серверов.

На RE:NODE#

Если вам нужна вся машина, линейка VDS на RE:NODE - это Intel i9-9900K в Германии, от 8 ГБ памяти и 2 vCPU, настраиваемая вручную в течение 24 часов; на неё распространяется всё из этой статьи. Если вам нужен только сервер Valheim, игровые тарифы начинаются с 2 ГБ, приходят примерно через минуту после оплаты с включённым кроссплеем и уже выделенными обоими UDP-портами и заменяют работу с файрволом, службой и обновлениями панелью: чистые Stop и Restart, вкладка Schedules для рестартов и бэкапов и слоты бэкапов вне машины.

FAQ#

Какой самый маленький VPS запускает Valheim?

Два vCPU и 4 ГБ памяти на x86-64 для небольшой группы на свежем мире. Сама игра при таком размере умещается примерно в 2 ГБ; остальное - запас для операционной системы и обновлений SteamCMD. VPS с 2 ГБ запустит её, но совсем без запаса.

Почему никто не может подключиться, хотя ufw разрешает порты?

Проверьте сетевой файрвол провайдера в его веб-консоли - он стоит перед VPS и блокирует трафик до того, как его увидит ufw. Затем убедитесь, что правила для UDP, а не TCP, и что ss -ulpn показывает сервер слушающим на обоих портах.

Можно ли запустить Valheim на ARM VPS?

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

Достаточно ли tmux, если быть осторожным?

Он работает, пока VPS не перезагрузится без предупреждения - из-за окна обслуживания провайдера или обновления ядра, - и мир теряет всё с момента последнего сохранения. Unit systemd стоит десять строк и устраняет этот риск, а вы ничего полезного не теряете, поскольку у Valheim нет консоли stdin.

Как часто нужно обновлять сервер?

При каждом патче Valheim, потому что клиент и сервер должны совпадать. Ванильные серверы можно обновлять при каждом запуске. Модифицированные - только когда моды поддерживают новую версию, поэтому проверьте это, прежде чем запускать SteamCMD.