Выделенный сервер Vintage Story - это та же загрузка, что и серверный пакет игры, - VintagestoryServer с .NET под ним, - которая настраивается одним файлом serverconfig.json в папке данных. Он слушает порт 42420, хранит мир в одном файле .vcdbs, держит персонажей всех игроков внутри этого мира и на выделенном сервере по умолчанию включает белый список, так что никто не сможет зайти, пока вы его не добавите. Потребление памяти начинается примерно с 1 ГБ и растёт примерно на 300 МБ на каждого активного игрока, больше - при большой дальности обзора или тяжёлых модах. Моды - это zip-файлы в папке Mods, и игрокам, у которых нет модов сервера, при подключении предлагается их скачать. В этом руководстве разобраны установка, все важные настройки в serverconfig.json, параметры генерации мира, которые выбираются один раз, роли и права, моды и бэкапы.
Как устроен хостинг Vintage Story#
Сервер - отдельный от клиента игры исполняемый файл, и для запуска ему не нужен игровой аккаунт, а вот игрокам для входа нужны собственные аккаунты: при включённом VerifyPlayerAuth, а он включён по умолчанию, сервер проверяет через сервис аутентификации Anego Studios, что каждый игрок владеет игрой.
Несколько свойств определяют всё остальное:
- Мир и персонажи хранятся на сервере. Инвентари, навыки и позиции живут в сохранении мира на сервере. Прогресс игрока на вашем сервере остаётся на вашем сервере.
- Один процесс - один мир. Конфиг называет файл сохранения; другой мир - это другой файл и перезапуск.
- В папке данных лежит всё, что вам важно. Конфиг, сохранения, моды, логи и бэкапы находятся по одному пути, который задаётся через
--dataPath. Бэкапьте эту папку, а остальное можно восстановить, скачав сервер заново. - Сервер и клиенты должны работать на одной версии игры. Мелкие патчи выходят часто; мажорные версии меняют моды, а иногда и генерацию мира.
Требования и потребление ресурсов#
Официальная рекомендация - около 1 ГБ памяти как база плюс 300 МБ на игрока при достаточно быстром CPU. На практике важнее всего, какая часть мира загружена, а это определяется дальностью обзора игроков в пределах серверного MaxChunkRadius.
| Группа | RAM | CPU | Примечания |
|---|---|---|---|
| 1-4 игрока, ванилла | 2-3 ГБ | 2 ядра | С запасом при стандартной дальности обзора |
| 5-10 игроков | 4-6 ГБ | 2-3 ядра | Разбредающиеся игроки загружают больше чанков |
| 10-20 игроков или тяжёлые моды | 6-10 ГБ | 3-4 ядра | Большие сборки модов добавляют свою нагрузку |
- CPU: по умолчанию сервер тикает примерно 30 раз в секунду. Самая тяжёлая нагрузка - генерация мира для новых исследованных чанков, поэтому первые недели мира обходятся дороже последующих.
- Диск: сохранение растёт с исследованной площадью. Сервер, где несколько игроков широко исследуют мир, за месяцы может дорасти до нескольких гигабайт; оставьте место для бэкапов.
- Сеть: скромно, со всплесками, когда игроки быстро перемещаются и подтягивают новые чанки.
Самый действенный рычаг - MaxChunkRadius, который ограничивает, как далеко может видеть любой игрок. Снижение с 12 до 8 резко уменьшает потребление памяти и CPU ценой меньшей дальности обзора. Прежде чем решать, за какой ресурс платить, стоит прочитать статью CPU или RAM для игровых серверов.
Установка сервера#
Сервер скачивается со страницы вашего аккаунта Vintage Story, а не через Steam. Пакет для Linux - это .tar.gz, названный по платформе и версии; для Windows есть установщик и серверный исполняемый файл рядом с клиентом.
Актуальным версиям в Linux нужен .NET: по официальному руководству по установке - .NET 8 для серии 1.21 и .NET 10 для 1.22 и новее; старым версиям нужны были более старые рантаймы, так что подбирайте рантайм под ту версию, которую запускаете.
$ mkdir -p /srv/vintagestory/server /srv/vintagestory/data$ tar -xzf vs_server_linux-x64_<version>.tar.gz -C /srv/vintagestory/server$ cd /srv/vintagestory/server$ ./VintagestoryServer --dataPath /srv/vintagestory/dataВ пакете также есть server.sh - вспомогательный скрипт с действиями start, stop и status, который запускает сервер в фоне от указанного пользователя; перед использованием отредактируйте имя пользователя и пути в начале скрипта. В Windows аналог - ярлык на серверный исполняемый файл с добавленным в поле «Объект» --dataPath=, чтобы данные не смешались с собственной папкой клиента.
Первый запуск создаёт папку данных:
data/ serverconfig.json Saves/ Mods/ Logs/ Backups/Останавливайте сервер командой /stop в его консоли. Править serverconfig.json при работающем сервере в лучшем случае бессмысленно: сервер может записать поверх вашей правки собственную копию из памяти.
serverconfig.json: настройки, которые имеют значение#
Файл в формате JSON, полностью записывается при первом запуске. Вот ключи, которые стоит прочитать, со значениями по умолчанию:
{ "ServerName": "Vintage Story Server", "ServerDescription": null, "WelcomeMessage": "Welcome {0}, may you survive well and prosper", "Ip": null, "Port": 42420, "Upnp": false, "CompressPackets": true, "AdvertiseServer": false, "MaxClients": 16, "Password": null, "WhitelistMode": 0, "VerifyPlayerAuth": true, "TickTime": 33.333332, "MaxChunkRadius": 12, "SpawnCapPlayerScaling": 0.5, "PassTimeWhenEmpty": false, "AntiAbuse": 0, "CorruptionProtection": true, "RegenerateCorruptChunks": false, "DieBelowDiskSpaceMb": 400, "StartupCommands": null, "ModPaths": ["Mods"]}| Ключ | По умолчанию | Что делает |
|---|---|---|
ServerName | Vintage Story Server | Имя в публичном списке, 4-80 символов |
Port | 42420 | Единственный порт, к которому подключаются игроки |
MaxClients | 16 | Слоты игроков |
Password | null | Пароль для входа, если задан |
AdvertiseServer | false | Показывать в публичном списке серверов |
WhitelistMode | 0 | 0 по умолчанию (включён для выделенного), 1 выключен, 2 включён |
VerifyPlayerAuth | true | Проверяет, что игроки владеют игрой. Не выключайте |
MaxChunkRadius | 12 | Максимальная дальность обзора в чанках. Главный рычаг по памяти |
TickTime | 33.33 | Миллисекунд на тик сервера, около 30 в секунду |
SpawnCapPlayerScaling | 0.5 | Насколько лимит существ растёт с числом игроков онлайн |
PassTimeWhenEmpty | false | Идёт ли календарь, когда никого нет онлайн |
AntiAbuse | 0 | Уровень защиты от вредоносного поведения клиентов |
CorruptionProtection | true | Дополнительные данные для обнаружения повреждённых чанков |
RegenerateCorruptChunks | false | Заменять повреждённые чанки свежим рельефом |
DieBelowDiskSpaceMb | 400 | Выключает сервер до того, как диск заполнится полностью |
StartupCommands | null | Команды, выполняемые при каждом запуске, через перевод строки |
ModPaths | ["Mods"] | Папки, в которых ищутся моды |
Замечания, которые не уместить в ячейку таблицы:
- `WhitelistMode` 0 означает, что белый список включён на выделенном сервере. Это самая частая жалоба «никто не может зайти». Либо добавьте игроков, либо осознанно поставьте
1. - `PassTimeWhenEmpty` решает, идут ли сезоны, пока никто не играет. Для группы, которая играет дважды в неделю,
falseне даёт зиме наступить незамеченной; для оживлённого публичного сервера это неважно. - `DieBelowDiskSpaceMb` - страховочная сетка, а не помеха. Сервер, у которого кончилось место посреди сохранения, может повредить мир; эта настройка останавливает его раньше. Если она сработала, почистите старые бэкапы и логи.
- `StartupCommands` удобен для того, что должно быть верно после каждого запуска, например объявления или настройки роли.
Многие из этих настроек можно менять на лету через /serverconfig, например /serverconfig maxclients 20 или /serverconfig password со значением, и изменение заодно сохраняется в файл.
Генерация мира: выбирается один раз#
Раздел WorldConfig определяет мир, и большая его часть имеет значение только при создании мира.
"WorldConfig": { "Seed": null, "SaveFileLocation": "/srv/vintagestory/data/Saves/default.vcdbs", "WorldName": "A new world", "AllowCreativeMode": true, "PlayStyle": "surviveandbuild", "WorldType": "standard", "WorldConfiguration": null, "MapSizeY": null}SaveFileLocation задаёт файл мира; если указать несуществующий файл, там будет создан новый мир. Seed фиксирует генерацию, а пустое значение означает случайный сид. PlayStyle выбирает пресет - стандартное выживание, варианты для исследования и выживания в дикой природе, творческое строительство, - а WorldConfiguration содержит подробные настройки, которые заполняет пресет: размер мира, климат, временные бури, враждебность существ, число жизней игрока, радиус спавна и ещё десятки.
На практике эти детали не набирают руками. Создайте мир в клиенте игры с настройками, которые хочет группа, и используйте те же значения на сервере - или запустите сервер и поправьте правила через /worldconfig до того, как кто-нибудь начал играть. Настройки рельефа и климата влияют только на чанки, сгенерированные после изменения, так что в мире, где настройки генерации сменились посередине, виден шов. Игровые правила вроде частоты временных бурь или враждебности существ можно менять и позже через /worldconfig - они действуют с этого момента. Договоритесь о настройках генерации до того, как зайдёт первый игрок.
Роли, белый список и админы#
В Vintage Story полноценная система ролей. Стандартные роли варьируются от гостевых, которые не могут строить, через suplayer (обычный игрок на выживании) и crplayer (творческий), до ролей модераторов и admin. У каждой роли есть привилегии и лимит на приват территории.
/op Steinar give the admin role/player Steinar role sumod survival moderator/player Mira whitelist on allow a player to join/player Mira whitelist check their status/kick Mira reason here/ban Mira reason here/role suplayer landclaimallowance 262144/announce Server restart in 10 minutes/stop/op и /deop - сокращения для выдачи и снятия роли админа. Синтаксис команд изменился при переработке системы команд в 1.18, и старые руководства показывают прежние формы; для вашей версии авторитет - встроенная справка по командам. У консоли полные права, поэтому первого админа всегда назначают из консоли.
Приваты территорий - защита Vintage Story от гриферов: игроки занимают участки в пределах лимита своей роли, и другие не могут там строить. На публичном сервере задавайте лимиты осознанно - достаточно щедрые для настоящих баз и достаточно маленькие, чтобы один игрок не занял целую долину. Человеческая сторона работы с модераторами - в статье правила сервера, модерация и команда.
Моды на сервере#
Моды Vintage Story - это zip-файлы в папке Mods. Каждый объявляет в своём modinfo.json, на какой стороне работает: только клиент, только сервер или универсальный. Серверные моды для игроков ничего не меняют. Универсальные моды - почти все контентные, всё, что добавляет блоки, предметы или существ, - должны быть на обеих сторонах. Когда игрок заходит на сервер с универсальными модами, которых у него нет, игра предлагает скачать их из официальной базы модов, и это делает модифицированный сервер куда проще, чем в большинстве игр.
Правила, которые сохраняют мир с модами здоровым:
- Совпадайте по версии игры. Мод, собранный под одну мажорную версию, на следующей часто сломан. Проверяйте поддерживаемую версию каждого мода перед обновлением сервера.
- Добавляйте моды до генерации мира, если они добавляют рельеф или руды. Как и настройки генерации, они влияют только на новые чанки.
- Удаление контентного мода из мира оставляет без его блоков и предметов. Делайте бэкап перед тем, как что-либо удалять.
- Кодовые моды, использующие патчинг через Harmony, не работают на серверах ARM64 - так сказано в официальном руководстве. Если собираетесь их использовать, запускайте на x64.
Обновляйте моды и сервер вместе, а если мир дорог - сначала на тестовой копии. Как это делать, объясняет статья тестовый сервер рядом с рабочим, а если всё равно что-то сломалось, порядок восстановления - в статье что делать, когда обновление мода всё сломало.
Порты и подключение#
| Порт | Протокол | Назначение |
|---|---|---|
42420 | TCP | Игровое подключение |
42420 | UDP | Используется в недавних версиях; откройте оба |
Официальное руководство по установке открывает 42420 и по TCP, и по UDP. Игроки заходят по адресу в меню мультиплеера или из публичного списка, если AdvertiseServer равен true. Upnp предназначен только для домашних роутеров, и на машине у хостера его стоит оставить выключенным. Как проверить порт снаружи - а только такая проверка и имеет значение, - рассказано в статье порты игровых серверов.
Сохранения, бэкапы и обновления#
Мир - это один файл .vcdbs в Saves, внутри которого база данных SQLite. Копирование во время записи сервером может дать повреждённую копию, так что не бэкапьте его простым копированием файла с работающего сервера.
- `/genbackup` записывает согласованную копию мира в папку
Backupsпрямо во время работы сервера. Используйте перед любым риском. - `/autosavenow` принудительно сохраняет мир немедленно - полезно перед плановой остановкой.
- Копии вне сервера. Папка
Backupsлежит на том же диске, что и мир. Копируйте бэкапы в другое место по расписанию; почему копия, которую вы ни разу не загружали, ещё не бэкап, объясняет статья бэкапы, которые действительно восстанавливаются. - Перед каждым обновлением игры делайте бэкап и храните его, пока новая версия не проработает неделю. Мажорные обновления могут менять генерацию мира, а после некоторых модам приходилось догонять.
Чтобы восстановить мир, остановите сервер, положите файл бэкапа на место файла мира с тем же именем и запустите. Повреждённый файл держите в стороне, пока не убедитесь, что всё в порядке.
Где его хостить#
Vintage Story нет в каталоге игр RE:NODE, так что тарифа Vintage Story или готовой установки нет. Сервер хорошо работает на машине общего назначения с Linux, а это и есть выделенный сервер: root-доступ, чтобы установить .NET, запустить server.sh или юнит службы и открыть 42420. Тарифы VDS готовятся вручную и выдаются в течение 24 часов. Основы - в статье первый час на новом VDS, как держать сервер запущенным между перезагрузками - в статье службы systemd для ваших приложений, а как открыть один порт, не открывая всё подряд, - в статье правила файрвола, которые имеют значение. Игры, для которых в каталоге есть тарифы, - в разделе игровые серверы.
Решение проблем#
Игроки получают «not whitelisted». WhitelistMode 0 на выделенных серверах означает, что белый список включён. Добавьте их через /player name whitelist on.
Сервер не запускается в Linux. .NET не установлен или его версия не подходит к этой версии игры. Первые строки лога скажут, в чём дело.
Игрокам сообщают, что у них нет модов, и скачивание не удаётся. Мода нет в официальной базе модов, или его версия там отличается. Дайте игрокам прямую ссылку на скачивание.
Память растёт, пока сервер не убивают. Дальность обзора. Уменьшите MaxChunkRadius, затем посмотрите на моды.
В рельефе виден шов. Настройки генерации мира или моды генерации изменились после того, как часть мира уже была сгенерирована. Это ожидаемо: новые настройки применяются только к новым чанкам.
Сервер выключился сам. Поищите сообщение о нехватке места на диске от DieBelowDiskSpaceMb, затем почистите старые бэкапы и логи.
FAQ#
Какой порт использует сервер Vintage Story?
По умолчанию 42420, задаётся через Port в serverconfig.json. Официальное руководство открывает его и по TCP, и по UDP.
Почему никто не может зайти на мой новый сервер Vintage Story?
На выделенных серверах белый список по умолчанию включён. Добавьте игроков через /player name whitelist on или поставьте WhitelistMode в 1, чтобы выключить его.
Нужно ли игрокам устанавливать моды сервера?
Универсальные моды должны быть на обеих сторонах, но при подключении игра предлагает скачать недостающие моды из официальной базы модов. Серверные моды от игроков ничего не требуют.
Где сохраняется мой персонаж?
В сохранении мира на сервере. Персонажи не переходят между серверами, и персонаж в одном мире никак не зависит от другого.
Как сделать бэкап работающего сервера?
Используйте /genbackup - команда пишет согласованную копию в папку Backups, - а затем скопируйте этот файл в другое место. Не копируйте живой файл .vcdbs, пока сервер работает.
Сколько RAM нужно серверу Vintage Story?
Для начала около 1 ГБ плюс 300 МБ на игрока. Сильнее всего на потребление влияют дальность обзора и моды; снижение MaxChunkRadius - самый быстрый способ его уменьшить.




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