Valheim Руководство

Как запустить два сервера Valheim на одном VPS и не перепутать миры

Запустите два независимых сервера Valheim: отдельные порты, миры, каталоги сохранений и управление процессами.

Как запустить два сервера Valheim на одном VPS и не перепутать миры

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

Инструкция рассчитана на уже работающий выделенный сервер Linux. Нужен доступ к настройкам службы или контейнера, постоянному хранилищу и межсетевому экрану. Если к первому экземпляру пока нельзя стабильно подключиться, сначала разберите эту проблему: иначе при добавлении второго причин сбоя станет вдвое больше.

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

Сначала распределите ресурсы между экземплярами#

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

Составьте небольшую таблицу. Имена и пути ниже — пример организации, а не обязательный стандарт:

ПараметрОсновной экземплярВторой экземпляр
Каталог установки/srv/valheim/main/server/srv/valheim/workshop/server
Корень сохранений/srv/valheim/main/saves/srv/valheim/workshop/saves
Выбранный мирMainWorldWorkshopWorld
Базовый порт UDP24562466
Следующий порт24572467
Служба или контейнерvalheim-mainvalheim-workshop

Промежуток между парами упрощает проверку распределения; шаг десять игре не требуется. Учтите все сокеты выбранного сетевого режима и плагинов. Если оболочка добавляет управление по сети, её порты тоже должны быть разными.

Отдельные каталоги установки удобны, когда у серверов разные моды или время обслуживания. При общей установке обновление файлов для одного экземпляра меняет окружение второго, в том числе работающего. Два каталога всё равно делят ресурсы VPS и операционную систему: отказ всего хоста затронет оба мира.

Подготовьте независимое место для данных#

Создайте корень сохранений второго экземпляра и выдайте права его настоящему системному пользователю. Для нового мира оставьте этот каталог пустым и задайте новое имя мира. Для копии существующего сначала штатно остановите процесс, который его записывает, сохраните полный набор данных и только затем перенесите данные во второй каталог. Проверьте, что символическая ссылка или общий том не возвращают оба пути к одним файлам.

В Valheim 1.0 мир может храниться папкой из нескольких частей; у старого сохранения может оставаться пара .db/.fwl. Правило копирования только этих двух расширений нельзя считать универсальным бэкапом. Сохраняйте весь корень данных остановленного экземпляра и оставляйте неприкосновенную копию для восстановления.

Отдельно проверьте скопированные списки доступа. Мир для другой компании не должен случайно получить администраторов и разрешённых игроков первого сервера. Разные названия помогают людям различать экземпляры, но границу записи создают именно отдельные каталоги.

В контейнерах смотрите на источники томов со стороны хоста. Оба контейнера могут использовать внутренний путь /config, если каждому соответствует свой постоянный каталог VPS. Разные имена контейнеров не разделяют общий bind mount.

Сделайте два запуска и два независимых управления#

Для каждого экземпляра создайте собственный скрипт на основе его рабочего стартового файла. Сохраните настройку окружения и вызов исполняемого файла; меняйте значения экземпляра, а не заменяйте рабочий запуск неполной строкой с форума.

Установите -port, -world и -savedir по таблице. Задайте различимые названия серверов, отдельные журналы и надёжные пароли входа. Не используйте имя мира как пароль. Храните скрипты вне путей, которые заменяет обновление, либо сохраняйте защищённые исходные копии и сравнивайте изменения поставляемого скрипта после обновлений.

Создайте отдельное описание службы или контейнера для каждого запуска. Проверьте пользователя и рабочий каталог. Настройте штатное завершение и достаточное время для сохранения: статус «остановлен» не подтверждает, что принудительно завершённый процесс успел записать мир.

В LinuxGSM различающиеся параметры помещайте в конфигурацию нужного экземпляра, а не в общий common.cfg или обновляемый _default.cfg. В другой панели выясните, какие настройки относятся к одному серверу, а какие действуют на все.

Проверьте сетевой маршрут каждого экземпляра#

Для Steam networking разрешите нужную пару UDP каждого сервера в системном и облачном firewall. Если перед VPS есть NAT, направьте обе пары на этот хост без пересечений. При подключении через Join IP внутри Valheim используйте базовый порт; не подставляйте без проверки адрес запросов из браузера серверов Steam.

Crossplay использует ретранслятор PlayFab, поэтому путь подключения другой. По руководству Iron Gate, ему не нужен проброс портов маршрутизатора, а локальный или loopback-адрес для входа не подходит. Разные настроенные порты нужны и здесь. Параметр -instanceid решает описанный разработчиками случай одинакового порта и MAC-адреса; он не позволяет двум процессам безопасно делить сокеты хоста или файлы мира.

Для каждого crossplay-экземпляра используйте его актуальный код входа или публичный адрес. Если клиент продолжает обращаться к прежнему сетевому режиму, удалите старую запись из недавних серверов и добавьте нужное подключение заново.

Докажите независимость двух работающих серверов#

Сначала запустите второй экземпляр отдельно: проверьте выбранный мир, путь данных и ошибки запуска. Подключитесь, осмотрите знакомое место или ожидаемый новый мир, затем штатно остановите сервер. Запустите оба экземпляра и повторите вход по разным адресам.

Сделайте в каждом мире небольшое узнаваемое изменение. Остановите и перезапустите только второй сервер: первый должен сохранить подключение, а каждый мир — собственное изменение. Затем повторите проверку сохранения и перезапуска для первого. Это информативнее работающего процесса или записи в списке серверов.

Если экземпляры работают по отдельности, но мешают друг другу вместе, проверьте пересечение сокетов, общие записываемые каталоги и суммарную нагрузку на память и CPU. Если по двум адресам открывается один мир, сравните реальные аргументы запуска и тома до новых копирований. Перед восстановлением остановите лишний процесс записи.

Разнесите обновления и резервное копирование по времени; подписывайте архивы именем экземпляра и датой. Для организации служб на собственном VPS можно использовать управление инфраструктурой через Nexardo; таблица распределения и отдельные копии восстановления пригодятся и в таком процессе.

Источники#