Установим выделенный сервер, согласуем его ветку с клиентами и запустим новый мир без модов с доступной консолью. Инструкция рассчитана на Ubuntu 24.04 x86_64, Steam-клиенты и публичную ветку Build 42. На 12 октября 2026 года разработчик указывает 42.21 как stable; старые команды с обязательным -beta unstable могут установить другую ветку. Текущее состояние подтверждает объявление The Indie Stone о стабильном релизе.
Нужны чистый VPS, SSH, sudo, публичный IPv4 и место для игровых файлов, мира и резервных копий. В примере выделяем 16 ГБ RAM, а перед запуском проверяем фактические ограничения памяти скачанного launcher. Это рабочее предположение для небольшой группы без модов, а не обещание определённого числа игроков.
Выберите ветку до переноса сохранения#
Миры Build 41 несовместимы с Build 42. Для существующей группы на Build 41 держите отдельную установку и согласуйте сервер и клиенты с legacy41; разработчик описал этот вариант в объявлении о переходе на Build 42. Не направляйте команды ниже на старое сохранение в расчёте на автоматическую конвертацию.
Здесь создаём новый мир servertest. Используйте это имя на всех шагах: изменение -servername меняет и выбранную конфигурацию, и сохранение.
Установите SteamCMD и выделенный сервер#
Из обычной административной SSH-сессии:
sudo apt update
sudo apt install -y software-properties-common tmux ufw nano
sudo add-apt-repository -y multiverse
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install steamcmd
sudo useradd --system --user-group --create-home \
--home-dir /srv/pz --shell /bin/bash pz
sudo install -d -o pz -g pz -m 750 /srv/pz/server /srv/pz/backups
sudo -iu pz
umask 077
/usr/games/steamcmd +force_install_dir /srv/pz/server \
+login anonymous +app_update 380870 validate +quit
cd /srv/pz/server
sed -n '1,160p' start-server.sh
free -h
При запросе примите лицензию Steam-пакета. App 380870 — выделенный сервер. force_install_dir задаётся до входа, для публичной ветки beta-флаг не нужен. Официальная инструкция по выделенному серверу описывает установку и Linux-launcher, но доступная редакция примечания о ветке ещё относится к прежнему unstable-релизу. В этом выборе ориентируйтесь на актуальное объявление разработчика.
Сохраняйте поставляемый скрипт запуска вместе с его средой выполнения. Посмотрите путь к ней в start-server.sh; внешняя Java нужна только тогда, когда этого явно требует текущая поставка. Найдите, где этот launcher задаёт -Xms и -Xmx, включая ProjectZomboid64.json, если скрипт использует его. В примере с 16 ГБ максимальный heap выше 12 ГБ оставляет слишком мало места для нативной памяти и Ubuntu. Если штатные ограничения превышают ваш бюджет, до запуска отредактируйте файл, который действительно использует launcher. Запишите изменение: проверка файлов Steam может заменить содержимое каталога установки. Увеличение heap не исправит нехватку общей памяти VPS.
Один раз сгенерируйте конфигурацию#
Всё ещё под пользователем pz:
tmux new-session -s pz
cd /srv/pz/server
bash start-server.sh -servername servertest
Задайте пароль администратора при первом запросе. Дождитесь инициализации мира, проверьте номер сборки и ошибки консоли. Если загруженная ветка отличается от клиентской, сначала остановите сервер и исправьте версию.
В игровой консоли введите save, дождитесь завершения и введите quit. Справочник административных команд описывает quit как сохранение и выход. В серверной консоли команды вводят без слеша; в игровом чате администратора — /save и /quit. Дождитесь возврата в Bash.
Редактируйте сгенерированную конфигурацию, не заменяя её шаблоном Build 41:
nano /srv/pz/Zomboid/Server/servertest.ini
Измените существующие строки ниже. Остальные параметры оставьте сгенерированными, если нет конкретной причины менять их:
Public=false
Password=REPLACE_WITH_A_PRIVATE_PASSWORD
MaxPlayers=8
PauseEmpty=true
DefaultPort=16261
UDPPort=16262
Mods=
WorkshopItems=
Замените заглушку пароля. Public=false управляет публикацией в списке, а не авторизацией: пароль нужен и серверу без листинга. PauseEmpty=true приостанавливает симуляцию, когда игроков нет. Эти параметры описаны в справочнике настроек сервера. Пустые списки модов дают исходную точку для первой проверки подключения.
chmod 600 /srv/pz/Zomboid/Server/servertest.ini
bash start-server.sh -servername servertest
Отсоединитесь через Ctrl+B, затем D. После нового SSH-входа вернуться в ту же консоль можно из административной сессии:
sudo -iu pz tmux attach-session -t pz
Tmux сохраняет процесс при разрыве SSH. После перезагрузки VPS создайте новую tmux-сессию под pz, перейдите в /srv/pz/server и повторите команду launcher. Автоматического восстановления после reboot здесь нет. Добавлять управление службой стоит после проверки остановки, которая передаёт игре quit и дожидается завершения процесса.
Откройте правильные UDP-порты#
Используйте отдельную административную SSH-сессию. Проверьте SSH-порт командой sudo sshd -T и сначала разрешите его; пример предполагает TCP 22:
sudo ufw allow 22/tcp
sudo ufw allow 16261/udp
sudo ufw allow 16262/udp
sudo ufw enable
sudo ufw status verbose
sudo ss -lunp 'sport = :16261 or sport = :16262'
При другом SSH-порте замените 22 до включения UFW. Разрешите оба UDP-порта в firewall провайдера. Если сервер за роутером, направьте оба на его постоянный локальный адрес. Не переносите старые диапазоны TCP на каждого игрока и не открывайте все Steam-порты по привычке. Если текущая сборка требует дополнительный порт, проверьте её стартовый лог.
В Steam-клиенте совпадающей версии откройте Join → Favorites, добавьте публичный IP VPS и порт подключения 16261, введите серверный пароль и отдельные имя/пароль игрока. Для обычной игры не используйте администратора. Листинг и UDP-скан дают слабое подтверждение: войдите в мир, сделайте узнаваемое изменение и проверьте его после сохранения и перезапуска. Сайт проверки TCP-портов не тестирует нужный протокол.
Добавляйте моды после успешного подключения без них#
WorkshopItems выбирает скачиваемые Workshop-пакеты, Mods — компоненты внутри них. Числовой ID Workshop и внутренний ID мода — разные идентификаторы. В Build 42 структура и выбор модов отличаются от Build 41, а ранние обсуждения multiplayer содержат противоречивые обходные решения.
Когда будете расширять сервер, создайте нужную конфигурацию через Host → Manage Settings в клиенте той же версии и изучите полученный .ini. Сохраните его синтаксис Mods и связи с Workshop вместо копирования строки Build 41. На актуальной странице каждого мода проверьте зависимости и поддержку multiplayer. Сначала опробуйте набор на временном мире, особенно с модами карты. Отключение проверки Lua checksum не подходит как первый шаг для нового сервера.
Копируйте настройки, мир и учётные записи вместе#
В серверной консоли предупредите игроков, выполните save, дождитесь завершения и выполните quit. После выхода процесса под pz создайте архив:
(
set -e
umask 077
pz_backup="/srv/pz/backups/zomboid-$(date -u +%Y%m%dT%H%M%SZ).tar.gz"
tar -czf "$pz_backup" -C /srv/pz Zomboid
tar -tzf "$pz_backup"
)
Так вместе сохраняются настройки, multiplayer-мир и база, а не только файлы карты. Данные персонажа/карты на клиентах при необходимости храните отдельно: серверный архив не собирает файлы с компьютеров игроков.
Передайте архив за пределы VPS. В отдельной административной SSH-сессии введите точный путь к архиву и создайте защищённую копию в домашнем каталоге SSH-пользователя:
read -r -p "Exact archive path: " game_archive
ssh_admin=$(id -un)
ssh_group=$(id -gn)
ssh_home=$(getent passwd "$ssh_admin" | cut -d: -f6)
sudo install -o "$ssh_admin" -g "$ssh_group" -m 600 \
"$game_archive" "$ssh_home/zomboid-export.tar.gz"
С рабочей машины замените обе заглушки:
scp YOUR_SSH_USER@YOUR_VPS_IP:zomboid-export.tar.gz .
Копию для передачи может читать только её владелец. После скачивания и проверки удалите её. Внешний архив тоже нужно защищать: в нём есть серверные пароли и данные учётных записей игроков.
Для восстановления остановите сервер, отдельно сохраните текущий Zomboid и распакуйте выбранный архив во временный каталог. Верните весь набор с владельцем pz:pz, оставьте то же имя сервера и запустите соответствующую версию игры. Проверьте узнаваемое изменение мира и вход обычного игрока. Перед обновлением также сохраните текущую установку и ограничения памяти: старый бинарник может не прочитать данные, уже записанные новой сборкой.
Если сервер запустился, но подключение не работает#
| Симптом | Что проверить дальше |
|---|---|
| Клиент завис на “Getting server info” | Сравните сборки, проверьте публичный адрес, инициализацию Steam на сервере и оба UDP-маршрута |
| При старте ошибка выделения памяти | Проверьте доступную RAM и heap-параметры фактически используемого launcher |
| Появился другой мир | Проверьте Linux-пользователя, домашний каталог и -servername; не переименовывайте сохранения наугад |
| Workshop-пакет скачался, мода нет | Сравните сгенерированные Mods/WorkshopItems, зависимости и поддерживаемую сборку |
| После перезапуска игроки видят изменённые данные | Проверьте корректную остановку и восстановите согласованную копию мира/базы |
Если причина не найдена, соберите стартовую версию, соответствующую конфигурацию без паролей, текущий вывод консоли и файлы из /srv/pz/Zomboid/Logs. Опишите первый неуспешный шаг. Работающий процесс, сервер в списке и вход в игру — отдельные наблюдения; это различие помогает не распыляться при диагностике.




