Project Zomboid Руководство

Как настроить сервер Project Zomboid Build 42 на Ubuntu

Выделенный сервер Project Zomboid Build 42 на Ubuntu: SteamCMD, UDP-порты, servertest, первый вход, корректная остановка и копия мира.

Как настроить сервер Project Zomboid Build 42 на Ubuntu

Установим выделенный сервер, согласуем его ветку с клиентами и запустим новый мир без модов с доступной консолью. Инструкция рассчитана на 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-сессии:

bash
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.

Один раз сгенерируйте конфигурацию#

Домашний каталог Linux-пользователя и имя сервера определяют постоянные данные. Копируйте их вместе после завершения игры.

Всё ещё под пользователем pz:

bash
tmux new-session -s pz
cd /srv/pz/server
bash start-server.sh -servername servertest

Задайте пароль администратора при первом запросе. Дождитесь инициализации мира, проверьте номер сборки и ошибки консоли. Если загруженная ветка отличается от клиентской, сначала остановите сервер и исправьте версию.

В игровой консоли введите save, дождитесь завершения и введите quit. Справочник административных команд описывает quit как сохранение и выход. В серверной консоли команды вводят без слеша; в игровом чате администратора — /save и /quit. Дождитесь возврата в Bash.

Редактируйте сгенерированную конфигурацию, не заменяя её шаблоном Build 41:

bash
nano /srv/pz/Zomboid/Server/servertest.ini

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

ini
Public=false
Password=REPLACE_WITH_A_PRIVATE_PASSWORD
MaxPlayers=8
PauseEmpty=true
DefaultPort=16261
UDPPort=16262
Mods=
WorkshopItems=

Замените заглушку пароля. Public=false управляет публикацией в списке, а не авторизацией: пароль нужен и серверу без листинга. PauseEmpty=true приостанавливает симуляцию, когда игроков нет. Эти параметры описаны в справочнике настроек сервера. Пустые списки модов дают исходную точку для первой проверки подключения.

bash
chmod 600 /srv/pz/Zomboid/Server/servertest.ini
bash start-server.sh -servername servertest

Отсоединитесь через Ctrl+B, затем D. После нового SSH-входа вернуться в ту же консоль можно из административной сессии:

bash
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:

bash
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 создайте архив:

bash
(
  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-пользователя:

bash
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"

С рабочей машины замените обе заглушки:

bash
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. Опишите первый неуспешный шаг. Работающий процесс, сервер в списке и вход в игру — отдельные наблюдения; это различие помогает не распыляться при диагностике.