Valheim с удовольствием поднимает сервер прямо из игры, и в этом вся проблема: мир живёт на машине одного игрока, существует только пока он играет, а его частота кадров становится симуляцией для всех остальных. Выделенный сервер отделяет мир от тех, кто в него приходит. Ему нужно около 2 ГБ памяти на компанию из нескольких друзей и 4 ГБ на полную группу из десяти человек, одно быстрое ядро CPU, два UDP-порта и пароль. Всё остальное в этом руководстве - детали, но именно детали решают, будет ли этот мир на месте через полгода.
Что такое выделенный сервер Valheim и что он умеет#
Выделенный сервер - это отдельное бесплатное приложение (valheim_server, Steam app id 896660) без графики. Оно загружает один мир, держит его запущенным, даже когда никого нет в сети, и принимает одновременно до 10 игроков. Этот потолок зашит в саму игру; поднимают его только моды, а на большее число людей игра не сбалансирована и не оптимизирована.
Что он умеет из коробки:
- Кроссплей между Steam, Microsoft Store / Game Pass на PC и Xbox - через флаг
-crossplay. На кроссплей-сервер заходят по шестизначному коду подключения или через общий список серверов, а трафик идёт через релей PlayFab, а не напрямую на ваш порт. - Модификаторы мира - наборы сложности и отдельные ползунки, добавленные в обновлении Hildir's Request: сложность боя, штраф за смерть, скорость появления ресурсов, частота рейдов, правила порталов и несколько переключателей вроде бесплатного строительства.
- Белый список, список банов и список администраторов - каждый представляет собой обычный текстовый файл с ID игроков.
- Автоматические резервные копии мира по таймеру, которые складываются рядом с файлом мира.
- Моды через BepInEx: ванильный сервер о них ничего не знает, но прекрасно под ними работает.
Чего у него нет, так это конфигурационного файла. Сервер Valheim настраивается целиком аргументами запуска, и это удивляет тех, кто приходит из Minecraft и ищет файл server.properties.
Одно архитектурное решение объясняет почти всё поведение мультиплеера в Valheim, так что о нём стоит знать до того, как выбирать ресурсы: сервер не симулирует мир целиком. Мир разбит на зоны, и каждую зону симулирует тот игрок, который вошёл в неё первым. Сервер хранит мир, пересылает состояние между игроками и владеет теми зонами, которыми не владеет никто другой. Именно поэтому один игрок с гостиничным wi-fi заставляет монстров дёргаться у всех, кто стоит рядом с ним, и именно поэтому выделенный сервер улучшает положение дел (мир больше не зависит от компьютера хоста), но лечит не все виды лагов.
Требования и расход ресурсов#
Сервер Valheim нетребователен на фоне выживалок, вышедших после него. Память растёт вместе с исследованной площадью и количеством построенных элементов: мир с четырьмя большими базами держит в себе куда больше объектов, чем только что созданный.
| Группа | RAM | CPU | Комментарий |
|---|---|---|---|
| 1-3 игрока, новый мир | 2 ГБ | 1 ядро | Комфортно, пока мир не исследован как следует |
| 4-6 игроков, несколько баз | 3-4 ГБ | 1.5-2 ядра | Самый частый случай |
| 7-10 игроков, разведанная карта | 4-6 ГБ | 2+ ядра | Крупные постройки и терраформинг начинают дорого обходиться |
| С модами (BepInEx, 10+ модов) | 6-8 ГБ | 2+ ядра | Целиком зависит от набора модов |
- CPU: симуляция опирается на один поток, поэтому тактовая частота важнее числа ядер. Второе ядро всё же полезно - сохранение и сеть работают вне основного потока.
- Диск: установленный сервер занимает около 2 ГБ. Мир - это один файл
.db, обычно 20-150 МБ у долгоживущего мира, плюс его резервные копии. 10 ГБ хватит с избытком; быстрый накопитель укорачивает подвисание во время сохранения. - Сеть: Valheim передаёт мало данных - примерно 50-150 КБ/с на игрока на пике. Задержка между игроками важнее полосы пропускания из-за описанного выше владения зонами. В статье задержка, джиттер и потери пакетов разобрано, как понять, что именно у вас.
Самое тяжёлое, что можно сделать с сервером Valheim, - это терраформинг. Каждый поднятый или выровненный участок земли сохраняется как отдельная правка рельефа, и база на срезанной горе обходится дороже такой же базы на ровном месте. Если зрелый мир начинает заикаться, когда все собираются на главной базе, причина обычно в этом, а не в планировке. Работает общее правило из статьи CPU или RAM для игрового сервера: сначала выясните, что именно упёрлось в свой предел, и только потом платите за другое.
Параметры запуска: вся конфигурация целиком#
На своей машине с Linux сервер ставится через SteamCMD и запускается примерно такой строкой:
$ steamcmd +force_install_dir /home/valheim/server +login anonymous +app_update 896660 validate +quit$ cd /home/valheim/server$ ./valheim_server.x86_64 -nographics -batchmode \ -name "Longship Crew" -port 2456 -world "Midgard" \ -password "herring-barrel-42" -public 1 -crossplay \ -saveinterval 1200 -backups 4У хостера с панелью эту строку писать не нужно: те же аргументы лежат полями на вкладке Startup. Так или иначе, вот всё, что вообще существует:
| Аргумент | По умолчанию | Что делает |
|---|---|---|
-name | - | Имя в браузере серверов. Не должно содержать пароль |
-world | Dedicated | Файл мира для загрузки, создаётся, если его ещё нет |
-password | - | Минимум 5 символов. Не должен встречаться в имени сервера или мира |
-port | 2456 | Игровой порт. Сервер занимает и следующий за ним |
-public | 1 | 1 показывает сервер в общем браузере, 0 прячет |
-crossplay | выключен | Включает игроков Xbox и Microsoft Store и код подключения |
-savedir | по платформе | Где лежат миры и файлы списков |
-saveinterval | 1800 | Секунд между сохранениями мира |
-backups | 4 | Сколько автоматических копий хранить |
-backupshort | 7200 | Секунд до первой копии |
-backuplong | 43200 | Секунд между последующими копиями |
-preset | - | Пресет модификаторов мира (см. ниже) |
-modifier | - | Один модификатор и его значение, можно повторять |
-setkey | - | Переключатель мира вроде nomap, можно повторять |
-instanceid | - | Различает несколько серверов на одной машине |
-logFile | stdout | Писать лог в файл вместо вывода |
Имя мира - это имя файла. -world "Midgard" загружает Midgard.db и Midgard.fwl из папки worlds_local, а если их там нет, создаёт заново со случайным сидом. Тем же способом на сервер переносят уже существующий мир, и об этом ниже.
Порты, кроссплей и подключение#
| Порт | Протокол | Назначение |
|---|---|---|
2456 | UDP | Игровой трафик |
2457 | UDP | Steam query - с ним разговаривает браузер серверов |
Открыты должны быть оба, и оба - UDP: правило файрвола, открывающее только TCP, это классическая причина, по которой сервер работает, но его никто не находит. Если вы меняли -port, query-порт всегда равен этому числу плюс один. В статье порты игрового сервера разобрано, зачем вообще нужны query-порты и что происходит, когда из пары доступен только один.
Зайти можно тремя способами, и ведут они себя по-разному:
- По IP (только для игроков Steam): Join Game, затем Add Server, затем
203.0.113.10:2456. Самый надёжный способ, и именно его стоит использовать, когда браузер серверов тормозит. - Общий список: требует
-public 1, и новый сервер может появляться в нём несколько минут. Список длинный, а внутриигровой фильтр слабый, поэтому ищите по необычному слову из имени вашего сервера. - Код подключения (на кроссплей-серверах): шесть цифр, которые пишутся в лог при старте и видны в консоли панели. Его вводит под Join Game игрок с любой платформы. Код меняется при каждом перезапуске сервера.
Session "Longship Crew" with join code 483920 and IP 203.0.113.10:2456 is active with 0 player(s)Кроссплей стоит включать только тогда, когда он вам действительно нужен. Трафик через релей добавляет лишний прыжок, а игроки на кроссплей-сервере опознаются по платформенным ID, а не по обычным SteamID, и это меняет то, что пишется в список администраторов. Группе, целиком сидящей в Steam, без -crossplay достанется чуть меньшая задержка. Адресу можно дать и имя: A-запись разобрана в статье как привязать домен к игровому серверу, хотя в Valheim это помогает только тем, кто заходит по IP.
Администраторы и команды консоли#
Права администратора берутся из файла adminlist.txt в каталоге сохранений, по одному ID игрока на строку. bannedlist.txt и permittedlist.txt устроены точно так же; если в permittedlist.txt есть хотя бы один ID, сервер начинает пускать только по белому списку.
// Сервер только для Steam: 17-значный SteamID6476561198012345678// Кроссплей-сервер: ID с префиксом платформыSteam_76561198012345678Xbox_2535412345678901Надёжный способ узнать точный ID - попросить игрока зайти один раз и прочитать ID из лога сервера, где каждое подключение записано ровно в той форме, которую сервер ожидает. Файлы перечитываются на ходу, так что перезапуск для этого не нужен.
Администратор открывает консоль клавишей F5 (сначала её нужно включить: добавьте -console в параметры запуска игры в Steam) и может пользоваться этими командами:
| Команда | Действие |
|---|---|
help | Показывает доступные команды |
kick [name/ip/userID] | Выкидывает игрока |
ban [name/ip/userID] | Банит и добавляет в bannedlist.txt |
unban [ip/userID] | Снимает бан |
banned | Печатает список банов |
save | Немедленно сохраняет мир |
ping | Время отклика до сервера |
info | Печатает сведения о системе и версии |
Этот короткий список - и есть всё. Читерские команды, знакомые по одиночной игре, - devcommands, spawn, god, fly - на ванильном выделенном сервере не работают, с правами администратора или без них. Чтобы их включить, нужен мод, обычно для этого берут Server Devcommands. RCON в ванильном Valheim тоже нет: удалённое администрирование здесь - это консоль панели плюс три файла со списками.
Модификаторы мира и пресеты#
Модификаторы задаются при запуске и сохраняются в мире, поэтому поменять их можно и позже - достаточно перезапустить сервер с другими аргументами. Пресет - это готовый набор; отдельные модификаторы перекрывают его.
# Щадящий сервер для спокойной компании-preset casual# Или соберите свой набор-modifier combat hard -modifier deathpenalty casual -modifier resources more \-modifier raids less -modifier portals casual -setkey playerevents| Модификатор | Значения |
|---|---|
combat | veryeasy, easy, hard, veryhard |
deathpenalty | casual, veryeasy, easy, hard, hardcore |
resources | muchless, less, more, muchmore, most |
raids | none, muchless, less, more, muchmore |
portals | casual (руда проходит), hard (нет порталов у боссов), veryhard (порталов нет) |
Пресеты называются normal, casual, easy, hard, hardcore, immersive и hammer. Переключатели -setkey - это nobuildcost, playerevents (рейды подстраиваются под прогресс каждого игрока, а не всего мира), passivemobs и nomap. portals casual - самая запрашиваемая настройка: она пропускает металлы через порталы и убирает почти всю морскую логистику, вокруг которой построена игра, так что договаривайтесь о ней всей группой до первого похода на болота, а не после него. В статье модификаторы мира и пресеты Valheim каждый из них разобран подробно.
Как перенести существующий мир на сервер#
Мир - это два файла с одинаковым именем: Name.fwl (метаданные и сид, несколько сотен байт) и Name.db (всё остальное). В Windows миры одиночной игры лежат здесь:
%USERPROFILE%\AppData\LocalLow\IronGate\Valheim\worlds_local\Если папка пуста, значит мир лежит в Steam Cloud в разделе worlds - откройте игру, зайдите в Manage Saves и сначала перенесите его в локальные.
- Остановите сервер. Никогда не загружайте файлы поверх работающего мира: следующее же сохранение их перезапишет.
- Загрузите оба файла в папку
worlds_localна сервере по SFTP или через файловый менеджер - реквизиты подключения есть в статье SFTP и файловый менеджер. - На вкладке Startup укажите имя мира - имя файла без расширения, с точным совпадением по регистру.
- Запустите сервер и найдите в логе строку
Load world: Name. Если там написано, что генерируется новый мир, значит имя не совпало.
Персонажи не входят в состав мира. Они остаются на машине каждого игрока - именно поэтому инвентарь переживает переезд между серверами, и именно поэтому сервер не может помешать человеку прийти со снаряжением из другого мира.
Моды на выделенном сервере#
Моды Valheim работают на BepInEx. На сервере это означает BepInExPack for Valheim, распакованный в корневую папку сервера: каталог BepInEx, doorstop_libs и скрипт start_server_bepinex.sh, который заменяет обычную команду запуска. Моды - это файлы .dll, которые кладут в BepInEx/plugins, а их настройки появляются в BepInEx/config после первого старта.
Важно различать, куда именно мод нужно ставить:
- Только на сервер: менеджеры резервных копий, серверный античит, мосты в Discord. Игрокам не нужно ничего.
- Только на клиент: моды интерфейса и мелких удобств. Сервер в них вообще не участвует.
- И туда, и туда: всё, что меняет правила игры или добавляет содержимое, - форки Valheim Plus, Epic Loot, Plant Everything, наборы существ и биомов. У каждого игрока должен быть тот же мод той же версии и с совпадающей конфигурацией, иначе его выкинет при подключении или рассинхронизирует сразу после него.
Отсюда два следствия. Игроки на Xbox моды ставить не могут, поэтому сервер, требующий клиентских модов, - это сервер только для PC, что бы ни говорил флаг кроссплея. И любой патч игры ломает моды BepInEx, пока их авторы не выпустят новые версии, так что серверу с модами не стоит обновляться автоматически в день патча. Сохраняйте копию рабочей папки BepInEx и прочитайте что делать, когда обновление мода всё ломает заранее, а не тогда, когда припечёт. Полная установка описана в статье моды Valheim на BepInEx на сервере.
Сохранения, резервные копии и перезапуски#
Именно на этом теряются миры. Valheim не записывает изменения по мере их появления. Мир держится в памяти и выгружается на диск каждые -saveinterval секунд - по умолчанию раз в тридцать минут. Всё, что завершает процесс без сохранения, выбрасывает весь прогресс с момента предыдущего.
- Корректная остановка сохраняет. Обычная остановка сервера (кнопка Stop или Restart в панели, либо
SIGINTна своей машине) запускает сохранение перед выходом. Дождитесь строкиWorld savedв логе. - Убийство процесса - нет. Убитый контейнер, остановка из-за нехватки памяти или падение самой машины стоят вам целого интервала.
- Уменьшите интервал.
-saveinterval 600стоит короткого подвисания раз в десять минут на большом мире и ограничивает потерю теми же десятью минутами. Для большинства компаний это верный размен. - Встроенные копии - это не резервные копии. Они лежат в той же папке, что и мир, и на том же диске. Они защищают от повреждённого сохранения, но не от удалённого сервера и не от ошибки, сделанной в файловом менеджере.
Мир Valheim - это один файл, поэтому повреждение забирает всё целиком, а не один регион. Держите настоящие резервные копии в другом месте, по расписанию, и время от времени восстанавливайте одну из них, чтобы убедиться, что это работает: в статье резервные копии, которые действительно восстанавливаются объясняется, почему вторая половина этой фразы важнее первой. Разумное расписание - ежедневная копия в час, когда никто не играет, плюс ручная перед каждым обновлением игры и перед установкой любого мода.
В RE:NODE кнопка Restart посылает корректную остановку, так что мир сохраняется первым; слоты для резервных копий входят в каждый тариф Valheim, а восстановление - это одна кнопка; а вкладка Schedules может делать за вас ежедневную копию и еженедельный перезапуск. Если сервер всё же упрётся в лимит памяти, его останавливают и запускают заново начисто, а не оставляют уходить в swap, - а это ровно тот случай остановки без сохранения, о котором сказано выше, и ещё один повод сократить интервал сохранения на большом мире.
Что делать, когда не работает#
Сервера нет в общем списке. Проверьте -public 1, проверьте, что открыты оба UDP-порта, и подождите десять минут - список обновляется медленно. Проверьте подключением по IP: если оно проходит, с сервером всё в порядке и проблема в списке.
«Failed to connect» при подключении по IP. Почти всегда дело в порте. Убедитесь, что используете игровой порт (2456), а не query-порт, и что он UDP.
«Incompatible version». Клиент обновился, а сервер нет, или наоборот. Перезапустите сервер с включённым обновлением; если у вас моды, сначала дождитесь, пока обновятся они.
У всех лагает рядом с одним игроком. Это владение зоной. Игрок, вошедший в эту местность первым, симулирует её на плохом соединении. Попросите его отойти подальше или перезайти, и владение перейдёт к кому-то другому.
Мир сбросился на новую карту. Имя в -world не совпадает с файлом. Сервер создал свежий мир рядом со старым; ваш исходный .db никуда не делся. Исправьте имя и перезапустите.
Память растёт день за днём. До определённого предела это нормально: чем больше зон исследовано, тем больше нужно держать. Еженедельный перезапуск по расписанию держит её ровной - см. перезапуски по расписанию, от которых есть польза.
FAQ#
Сколько игроков выдерживает выделенный сервер Valheim?
Десять. Лимит стоит в самой игре, а не в хостинге, и симуляция рассчитана именно на это число. Моды его поднимают, но масштабирование врагов и сетевая нагрузка под большие группы не проектировались, так что после примерно пятнадцати человек ждите проблем.
Нужен ли выделенный сервер, если нас играет всего двое?
Строго говоря, нет, но он меняет саму манеру игры: любой из вас может зайти без другого, мир не привязан к компьютеру одного человека, и хост больше не платит за это производительностью. Самого младшего тарифа на двоих хватает.
Могут ли игроки на Xbox и на PC сидеть на одном сервере?
Да, с включённым -crossplay. Игроки заходят по шестизначному коду. Сервер при этом должен быть ванильным или нести только серверные моды, потому что на консоли установить ничего нельзя.
Должна ли версия сервера совпадать с версией игры?
Совпадать должна ровно. После каждого патча Valheim сервер нужно обновить, прежде чем кто-либо сможет зайти. Сервер с модами стоит обновлять только после того, как обновились его моды.
Можно ли поменять сложность на уже существующем мире?
Да. Модификаторы мира применяются при запуске, так что просто перезапустите сервер с новыми аргументами -preset или -modifier. Постройки и прогресс это не тронет; с этого момента изменятся только правила.
Почему после падения мы потеряли двадцать минут прогресса?
Потому что мир пишется на диск по таймеру, а не непрерывно. Всё, что случилось после последнего сохранения, существовало только в памяти. Уменьшите -saveinterval и всегда останавливайте сервер корректно.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.