У выделенного сервера Valheim нет файла конфигурации. Всё задаётся аргументами запуска в строке, которая стартует valheim_server: -name, -port (по умолчанию 2456), -world (по умолчанию Dedicated), -password (не короче пяти символов и не входит в имя или название мира), -public (по умолчанию 1), -savedir, -logFile, -saveinterval (по умолчанию 1800 секунд), -backups / -backupshort / -backuplong (по умолчанию 4, 7200, 43200), -crossplay, -instanceid, а также аргументы модификаторов мира -preset, -modifier и -setkey. Добавьте спереди флаги Unity -nographics -batchmode - и это вся поверхность настройки. На этой странице каждый аргумент описан со значением по умолчанию, реальным действием и типичной ошибкой.
Где их вводить, зависит от того, как вы запускаете сервер: в своей копии start_server.sh на Linux (установка на Linux), в start_headless_server.bat или в службе NSSM на Windows (установка на Windows), в SERVER_ARGS и соседних переменных в Docker (руководство по Docker) или в полях вкладки Startup на панели хостинга.
Все аргументы одним взглядом#
| Аргумент | По умолчанию | Значение |
|---|---|---|
-nographics | - | Флаг. Unity: без графического устройства |
-batchmode | - | Флаг. Unity: работать без окна |
-name | My server в примере скрипта | Текст, отображается в списке серверов |
-port | 2456 | Порт UDP; следующий за ним тоже используется |
-world | Dedicated | Имя файла мира, без расширения |
-password | - | Не менее 5 символов |
-public | 1 | 1 - в списке, 0 - скрыт |
-savedir | Зависит от платформы | Папка для миров и файлов списков |
-logFile | stdout / консоль | Путь, куда писать лог |
-saveinterval | 1800 | Секунд между сохранениями мира |
-backups | 4 | Сколько автоматических бэкапов хранить |
-backupshort | 7200 | Секунд до первого бэкапа |
-backuplong | 43200 | Секунд между последующими бэкапами |
-crossplay | выкл. | Флаг. Сеть PlayFab, Xbox и Game Pass |
-instanceid | - | Идентификатор для различения экземпляров |
-preset | - | Пресет модификаторов мира |
-modifier | - | <name> <value>, можно повторять |
-setkey | - | Переключатель мира, можно повторять |
Полная строка для типичного сервера:
./valheim_server.x86_64 -nographics -batchmode -name "Longship Crew" -port 2456 \ -world "Midgard" -password "herring-barrel-42" -public 1 \ -savedir /home/valheim/save -saveinterval 900 -backups 6 \ -backupshort 3600 -backuplong 21600 -crossplayПишите имена аргументов точно так, как показано, - -logFile в документации пишется с заглавной F, - а значения с пробелами в командной строке нужно брать в кавычки. На панели хостинга, где каждый аргумент вынесен в отдельное поле, кавычки не вводите: панель добавит их сама, а буквальные кавычки окажутся в названии сервера. Если вы вообще новичок в том, как игровые серверы принимают аргументы, кавычки, порядок и переменные окружения для разных движков разобраны в статье параметры запуска игровых серверов.
Идентичность: -name, -world и -password#
`-name` - то, что показывает общий список. В нём могут быть пробелы и большинство знаков препинания. На мир он не влияет, поэтому сервер можно переименовать в любой момент. Список плохо сортирует и ищет, так что характерное слово в названии помогает игрокам вас найти.
`-world` - это имя файла, а не отображаемое название. -world Midgard загружает Midgard.db и Midgard.fwl из worlds_local в папке сохранений, а если их нет, создаёт новый мир с этим именем и случайным зерном - причём для игроков это происходит молча. Поэтому именно этот аргумент стоит за большинством жалоб «сервер сбросил наш мир»: опечатка, изменённая заглавная буква в регистрозависимой файловой системе Linux или переехавшая папка сохранений. Старые файлы при этом на месте. Исправьте имя и перезапустите.
Если вам нужно конкретное зерно, аргумента для зерна нет. Создайте мир в клиенте игры с нужным зерном, а затем загрузите два файла - шаги описаны в статье загрузка локального мира.
`-password` подчиняется двум правилам, и сервер отказывается запускаться, если нарушено любое из них:
- Не меньше пяти символов.
- Он не должен входить в название сервера или мира.
-name "Bjorn Hall" -password "bjornhall"не пройдёт; не пройдёт и пароль, содержащий название мира.
Запустится ли публичный сервер вообще без пароля, в разных сборках было по-разному; считайте пароль обязательным. Игроки вводят его один раз при подключении, и игра запоминает его для этого сервера.
Сеть: -port, -public и -crossplay#
`-port` задаёт игровой порт, UDP, по умолчанию 2456. Следующий порт сервер использует для запросов Steam, так что -port 2456 занимает 2456 и 2457, а примеры скриптов советуют пробрасывать 2456-2458. Два сервера на одном адресе нужно разнести: обычно выбирают 2456 и 2466, хотя технически сработает и 2459. Игроки, подключающиеся по IP, используют игровой порт. Подробности, включая проброс портов дома, есть в статье порты Valheim 2456-2458.
`-public` принимает 1 или 0. При 1 сервер регистрируется в общем списке; при 0 он там не появляется, но любой, кто знает адрес и пароль, всё равно может зайти по IP. 0 - это не настройка безопасности, она только скрывает сервер от просмотра. Для настоящего белого списка используйте permittedlist.txt, о нём написано в руководстве по файлам списков Valheim. Публичному серверу может понадобиться несколько минут, чтобы появиться в списке; задержку и фильтры разбирает статья сервер не отображается в списке.
`-crossplay` - флаг без значения. Он переключает сервер на сетевой бэкенд PlayFab, которым пользуются игроки Xbox, Game Pass и Microsoft Store, и при каждом запуске печатает в логе шестизначный код присоединения. Без него сервер работает только со Steam. Он меняет способ идентификации игроков - файлам списков тогда нужны ID с префиксом платформы, например Steam_76561198012345678, - а на Linux ему необходим установленный libatomic1. Когда его использовать, а когда оставить выключенным, объясняет статья кроссплей Valheim и игроки с Xbox.
Файлы: -savedir, -logFile и -instanceid#
`-savedir` переносит всё, что пишет сервер: папку worlds_local (а в старых сборках и worlds) и три файла списков adminlist.txt, bannedlist.txt и permittedlist.txt. Без него сервер использует профиль запустившего его пользователя:
| Платформа | Папка сохранений по умолчанию |
|---|---|
| Linux | ~/.config/unity3d/IronGate/Valheim |
| Windows | %USERPROFILE%\AppData\LocalLow\IronGate\Valheim |
Задавайте его явно всякий раз, когда сервер работает как служба или под учётной записью, в которую вы не входите. Иначе мир окажется в папке профиля, куда никто не заглядывает, - в Windows служба под LocalSystem сохраняет данные в C:\Windows\System32\config\systemprofile. С -savedir /srv/valheim миры попадают в /srv/valheim/worlds_local, а файлы списков - в /srv/valheim. Папка должна быть доступна для записи пользователю сервера. Все пути собраны в статье где Valheim хранит свои файлы.
`-logFile` - аргумент Unity, а не Valheim, и в документации Unity он пишется с заглавной F. Без него лог идёт в стандартный вывод, и это то, что нужно под systemd (журнал его сохраняет), в Docker (docker logs) или в консоли панели хостинга. Задавайте ему путь, когда стандартный вывод никто не перехватывает, - в службе NSSM без AppStdout или в запланированной задаче:
-logFile /home/valheim/logs/valheim.logФайл перезаписывается при каждом запуске, а не дополняется, поэтому, если нужна история, ротируйте или переименовывайте его в стартовом скрипте.
`-instanceid` принимает короткий идентификатор и предназначен для различения нескольких экземпляров сервера на одной машине. В большинстве конфигураций он не нужен: два сервера с разными названиями миров, разными портами и собственными папками сохранений не пересекаются. Прибегайте к нему, только если вы намеренно делите одну папку сохранений между экземплярами.
Сохранение: -saveinterval#
Мир живёт в памяти и записывается на диск каждые -saveinterval секунд, по умолчанию 1800 (тридцать минут). Всё, что завершает процесс без чистой остановки, - принудительное завершение, остановка из-за нехватки памяти, отключение питания, - теряет всё после последнего сохранения. Чистая остановка (Ctrl+C, SIGINT, кнопка Stop на панели) сначала сохраняет мир.
-saveinterval | Худшая потеря при сбое | Цена |
|---|---|---|
1800 (по умолчанию) | 30 минут | Редкие подвисания |
900 | 15 минут | Подвисание каждые 15 минут в больших мирах |
600 | 10 минут | Обычный компромисс |
300 | 5 минут | Заметно в больших, плотно застроенных мирах |
Сохранение не бесплатно: в зрелом мире сервер ненадолго замирает, пока сериализует мир, и игроки чувствуют подвисание. Чем больше мир, тем дольше пауза, так что очень короткие интервалы на большом мире меняют потери при сбое на регулярные рывки. Для большинства групп хорошее значение по умолчанию - 600. Админская команда save сохраняет мир немедленно, и её стоит набирать перед чем-то рискованным. Почему сохранения стоят столько, сколько стоят, объясняет статья интервалы автосохранения игровых серверов.
Бэкапы: -backups, -backupshort и -backuplong#
Встроенная ротация бэкапов по таймеру копирует пару файлов мира и хранит фиксированное число копий рядом с ним в worlds_local:
- `-backups` - сколько автоматических бэкапов хранить, по умолчанию
4. Когда создаётся новый, самый старый удаляется.0отключает их. - `-backupshort` - секунд от запуска сервера до первого бэкапа, по умолчанию
7200(два часа). - `-backuplong` - секунд между последующими бэкапами, по умолчанию
43200(двенадцать часов).
При значениях по умолчанию сервер, который перезапускается каждую ночь, делает один бэкап через два часа после каждого запуска и до второго почти не доходит. В этом и подвох: на сервере с ежедневным перезапуском -backuplong почти никогда не срабатывает, а четыре бэкапа покрывают последние четыре дня по одному в день. Если нужно несколько в день, уменьшите оба значения:
-backups 8 -backupshort 3600 -backuplong 10800Это хранит восемь копий, первую - через час после запуска, а потом каждые три часа. Файлы бэкапов называются по имени мира с отметкой времени, поэтому живые файлы они никогда не перезаписывают.
Эти копии лежат на том же диске, что и мир, и защищают от одного: от сохранения, которое пошло не так. От умершего диска, удалённой папки или исчезнувшего хоста они не спасают. Настоящие бэкапы должны лежать в другом месте, создаваться по расписанию и время от времени восстанавливаться, чтобы доказать, что работают, - обе половины разобраны в статье бэкапы сервера Valheim и повреждение мира.
Правила мира: -preset, -modifier и -setkey#
Модификаторы мира добавили в обновлении Hildir's Request. Они применяются при запуске и хранятся вместе с миром, так что изменить их - значит перезапустить сервер с другими аргументами; постройки и прогресс это не затрагивает.
-preset casual-modifier combat hard -modifier raids less -modifier portals casual-setkey nobuildcost -setkey playereventsТри аргумента работают вместе:
- `-preset` выбирает набор:
normal,casual,easy,hard,hardcore,immersiveилиhammer. - `-modifier <name> <value>` задаёт один ползунок и повторяется для каждого. Названия:
combat,deathpenalty,resources,raidsиportals. Отдельные модификаторы переопределяют пресет. - `-setkey <key>` включает переключатель мира, тоже повторяемый:
nobuildcost,playerevents,passivemobs,nomap.
Два подвоха. Значения - это слова в нижнем регистре, а не числа, и значение с опечаткой не останавливает сервер, так что проверьте, что нужный эффект действительно появился. И список модификаторов и ключей с обновлениями растёт; всё, чего здесь нет, смотрите на экране модификаторов мира в игре текущей версии. Что каждое значение делает с игрой, описано в статье модификаторы и пресеты мира Valheim, а связанные глобальные ключи - в статье глобальные ключи и setkey.
На RE:NODE эти аргументы - поля на вкладке Startup, так что изменение интервала сохранения, числа бэкапов или модификатора сводится к правке и перезапуску; кроссплей уже включён, а оба порта UDP выделены вместе с тарифом.
Три готовые строки для типичных конфигураций#
Справочные таблицы удобнее с готовым примером рядом. Эти три покрывают большинство групп.
Небольшая закрытая группа в Steam, которой не нужны посторонние в списке, с частыми сохранениями, потому что ПК одного из игроков время от времени роняет сессию:
./valheim_server.x86_64 -nographics -batchmode -name "Ashwood" -port 2456 \ -world "Ashwood" -password "salted-cod-77" -public 0 -saveinterval 600Здесь -public 0 держит сервер вне общего списка, и игроки заходят по IP. У мира и сервера одно имя, и это нормально; только пароль не должен входить ни в то, ни в другое.
Смешанная группа игроков с ПК и Xbox на арендованной машине, с более спокойной настройкой боя и частыми бэкапами:
./valheim_server.x86_64 -nographics -batchmode -name "Raven Fjord" -port 2456 \ -world "RavenFjord" -password "longboat-oar-19" -public 1 -crossplay \ -modifier combat easy -backups 8 -backupshort 3600 -backuplong 10800Игроки с Xbox заходят по коду из лога, который меняется при каждом перезапуске, поэтому после каждого перезапуска публикуйте новый код там, где общается ваша группа.
Второй сервер на той же машине, что и первый, с собственной папкой сохранений, чтобы ничего не делилось:
./valheim_server.x86_64 -nographics -batchmode -name "Raven Fjord Test" -port 2466 \ -world "TestWorld" -password "spare-anvil-03" -public 0 \ -savedir /home/valheim/save-testПорт на десять выше, чем у первого, папка сохранений отдельная, а сервер скрыт из списка, потому что тестовому миру в общем списке делать нечего. Откройте в файрволе и UDP 2466-2468.
Ошибки, из-за которых сервер не запускается или мир пропадает#
Короткий список ошибок в аргументах и то, как они проявляются:
| Ошибка | Симптом |
|---|---|
| Пароль короче 5 символов или входит в название | Сервер завершается через секунды после запуска |
Опечатка в -world или не тот регистр | Загружается новый пустой мир |
-savedir недоступна для записи | Ошибки сохранения в логе, ничего не остаётся |
Два сервера на 2456 и 2457 | Второй сервер не может занять порт, или ни один не виден в списке |
| Кавычки введены в поле панели | Название показывается с кавычками |
Нет -crossplay | Игроки с Xbox не находят сервер |
Когда сервер не запускается, а аргументы выглядят правильно, читайте в логе первую ошибку, а не последнюю; их по порядку разбирает статья сервер Valheim падает при запуске.
FAQ#
Есть ли файл конфигурации вместо аргументов запуска?
Нет. Ванильный Valheim не читает ничего, кроме своих аргументов и трёх файлов списков. У модов под BepInEx есть собственные файлы конфигурации в BepInEx/config, но у самого сервера их нет.
Можно ли менять аргументы, не потеряв мир?
Да. Чисто остановите сервер, измените аргументы и запустите его снова. На мир влияют только -world и -savedir, которые определяют, какие файлы загружаются; всё остальное можно менять без риска.
Какой аргумент задаёт максимальное число игроков?
Такого нет. Лимит в десять игроков встроен в игру, и изменить его могут только моды. Что стоит его увеличение, описано в статье лимит игроков и большие группы.
Важен ли порядок аргументов?
Нет. Valheim читает их по именам. По традиции -nographics -batchmode ставят первыми, и каждое значение должно стоять сразу после своего аргумента.
Как задать зерно мира?
С сервера - никак. Создайте мир в игре с нужным зерном, затем загрузите файлы .db и .fwl в worlds_local и укажите в -world их имя.
Почему при -public 0 посторонние всё равно могут зайти?
Потому что он лишь убирает сервер из списка. Любой, кто знает адрес и пароль, по-прежнему может войти. Чтобы ограничить круг подключающихся, используйте permittedlist.txt.


