Запустим новый мир Valheim без модов как Linux-службу, выберем способ подключения игроков и вынесем сохранения из каталога, который обновляет SteamCMD. Нужны чистый VPS с Ubuntu 24.04 x86_64, публичный IPv4, доступ по SSH и пользователь с sudo. Инструкция рассчитана на стабильный сервер из Steam; источники проверены 12 октября 2026 года.
Выбирайте регион VPS поближе к игрокам. Оставьте память и место на диске для системы, роста мира и резервных копий: число заявленных слотов не показывает производительность конкретного VPS. В FAQ версии 1.0 Valheim описана как игра для 1–10 участников.
Сначала выберите Steam или crossplay#
Если все играют через Steam, не добавляйте -crossplay. Для игроков с других поддерживаемых платформ добавьте этот флаг. Сетевые маршруты различаются:
| Режим | Как идёт подключение | Входящее правило VPS |
|---|---|---|
| Steam | Напрямую к игровому серверу | UDP 2456–2457 в примере ниже |
| Crossplay | Через PlayFab relay; код подключения или публичный адрес | Для relay проброс игровых портов не нужен |
Руководство выделенного сервера указывает основной порт и основной+1. В crossplay нельзя подключаться по локальному адресу или loopback. Для relay важен исходящий сетевой доступ; открытие произвольных входящих портов не исправляет его регистрацию.
Установите SteamCMD от имени игрового пользователя#
Выполните команды на VPS. 32-битная библиотека нужна SteamCMD; аудио- и atomic-библиотеки — Linux-серверу Valheim:
sudo apt update
sudo apt install -y ca-certificates curl lib32gcc-s1 libatomic1 libpulse0 libpulse-dev nano ufw
sudo adduser --system --group --home /srv/valheim valheim
sudo install -d -o valheim -g valheim -m 750 /srv/valheim/steamcmd /srv/valheim/server /srv/valheim/data
sudo -u valheim -H curl -fsSLo /srv/valheim/steamcmd/steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
sudo -u valheim -H tar -xzf /srv/valheim/steamcmd/steamcmd.tar.gz -C /srv/valheim/steamcmd
sudo -u valheim -H /srv/valheim/steamcmd/steamcmd.sh +force_install_dir /srv/valheim/server +login anonymous +app_update 896660 validate +quit
Игровой пользователь владеет установкой и имеет постоянный HOME; административные права ему не нужны. Убедитесь, что появились /srv/valheim/server/start_server.sh и исполняемый файл сервера. Если загрузка закончилась ошибкой, сначала исправьте её. Сведения о загруженной сборке сохраните в заметках по серверу.
Настройте скрипт, который переживёт обновление#
Скопируйте штатный Linux-скрипт за пределы каталога загрузки:
sudo -u valheim cp /srv/valheim/server/start_server.sh /srv/valheim/start.sh
sudo chmod 700 /srv/valheim/start.sh
sudo -u valheim nano /srv/valheim/start.sh
Сохраните экспорты переменных из скрипта установленной сборки, включая настройки Steam и библиотек. Замените команду запуска сервера на следующую. Перед первым запуском смените пример пароля; он должен отличаться от названия сервера. Удалите второй запуск или интерактивное ожидание после этой команды. exec позволяет systemd отслеживать сам игровой процесс:
exec /srv/valheim/server/valheim_server.x86_64 -nographics -batchmode -name "Our Valheim World" -port 2456 -world "Friends" -password "REPLACE_WITH_RANDOM_SECRET" -savedir /srv/valheim/data -public 0
Будет создан новый мир Friends. -savedir задаёт отдельный каталог постоянных данных; -public 0 скрывает сервер примера из публичного списка. Для crossplay допишите -crossplay в эту же команду. Код подключения используется по схеме crossplay.
Если штатный скрипт выглядит иначе, прочитайте руководство рядом с установленным сервером. Сохраните его подготовку окружения вместо подстановки старого скрипта из инструкции хостинга.
Один раз запустите сервер в текущем терминале, находясь в каталоге программы:
sudo -u valheim -H /bin/bash -c 'cd /srv/valheim/server && /bin/bash /srv/valheim/start.sh'
Дождитесь запуска, нажмите Ctrl+C и дождитесь завершения процесса. На этом этапе игрокам подключаться не нужно. Ошибки библиотек исправьте до перехода к службе.
Создайте службу#
Откройте sudo nano /etc/systemd/system/valheim.service:
[Unit]
Description=Valheim dedicated server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=valheim
Group=valheim
WorkingDirectory=/srv/valheim/server
Environment=HOME=/srv/valheim
ExecStart=/bin/bash /srv/valheim/start.sh
KillSignal=SIGINT
TimeoutStopSec=180
SendSIGKILL=no
Restart=no
UMask=0027
[Install]
WantedBy=multi-user.target
SIGINT повторяет описанную разработчиком остановку через Ctrl+C. Автоматический перезапуск отключён, чтобы повторяющаяся ошибка загрузки или сохранения оставалась заметной. При превышении времени остановки изучите процесс и журнал до архивации: служба не убивает его принудительно по этому таймауту.
sudo systemctl daemon-reload
sudo systemctl enable --now valheim
sudo systemctl status valheim --no-pager
sudo journalctl -u valheim -n 100 --no-pager
Откройте нужный маршрут и проверьте вход#
Сначала разрешите свой реальный SSH-порт. В примере это 22; замените его до включения UFW, если используете другой. Проверьте также firewall провайдера. Для Steam-режима:
sudo ufw allow 22/tcp
sudo ufw allow 2456:2457/udp
sudo ufw enable
sudo ufw status verbose
sudo ss -lunp
При первоначальной настройке crossplay пропустите правило 2456:2457. Если переводите уже работающий Steam-сервер, сохраните прежний маршрут до успешного входа через relay, затем отдельно удалите ненужное правило.
В Steam-режиме введите VPS_IP:2456 в поле адреса внутри игры. В crossplay используйте актуальный код подключения или публичный адрес, как указано в руководстве. Сам по себе Steam Deck с версией из Steam не требует перехода на crossplay.
Активная служба и UDP-сокет показывают только локальную готовность. Зайдите с внешнего подключения игрока, введите пароль, измените что-нибудь небольшое в мире, выйдите и зайдите снова. После управляемого перезапуска службы убедитесь, что изменение сохранилось:
sudo systemctl restart valheim
sudo journalctl -u valheim -n 100 --no-pager
Скопируйте весь каталог сохранений#
Остановите службу и проверьте её состояние и завершение процесса:
sudo systemctl stop valheim
sudo systemctl is-active valheim
sudo systemctl show valheim -p MainPID -p SubState
sudo journalctl -u valheim -n 60 --no-pager
Ожидаемые проверки — inactive, MainPID=0 и завершённая остановка в журнале. Если процесс ещё останавливается или остановка закончилась ошибкой, сначала разберитесь с этим. Не архивируйте изменяющееся сохранение.
Сохраните весь каталог данных и скрипт запуска. Примечания Iron Gate к обновлениям подтверждают изменение формата сохранений в 1.0. Копирование только старой пары .db/.fwl не подходит как универсальная процедура для актуального сервера.
set -e
sudo install -d -m 700 /var/backups/valheim
VALHEIM_BACKUP="/var/backups/valheim/valheim-$(date -u +%Y%m%dT%H%M%SZ).tar.gz"
sudo tar -czf "$VALHEIM_BACKUP" -C /srv/valheim data start.sh
sudo tar -tzf "$VALHEIM_BACKUP"
install -d -m 700 "$HOME/gamehost-backup-export"
sudo install -m 600 -o "$(id -u)" -g "$(id -g)" "$VALHEIM_BACKUP" "$HOME/gamehost-backup-export/valheim-backup.tar.gz"
sudo systemctl start valheim
Выполните блок архивации целиком: set -e остановит его при ошибке до перезапуска службы. Файл для скачивания создаётся сразу с правами 600 в вашем закрытом каталоге; датированный архив остаётся доступен только root.
На своём компьютере скачайте копию по SSH: используйте тот же логин, от которого выполняли команды архивации, и укажите публичный адрес. Для нестандартного SSH-порта добавьте -P YOUR_SSH_PORT:
scp SSH_USER@VPS_IP:gamehost-backup-export/valheim-backup.tar.gz ./valheim-backup.tar.gz
После скачивания выполните на VPS rm -- "$HOME/gamehost-backup-export/valheim-backup.tar.gz". Датированный архив, файл службы и сведения о сборке храните также вне сервера. Просмотр архива не проверяет восстановление: отрепетируйте его на отдельном экземпляре с соответствующей версией программы и изолированным портом.
Обновляйте отдельно и разбирайте ошибки по симптомам#
Перед обновлением повторите копирование остановленных данных, пропустив последнюю команду sudo systemctl start valheim в блоке архивации. Ещё раз проверьте MainPID=0, затем выполните прежнюю команду установки SteamCMD. Сравните обновлённые скрипт и руководство с вашим окружением, запустите службу и повторите вход из игры. Если после копирования вы уже запустили сервер, сначала снова остановите службу и подтвердите завершение. Обновление планируйте на окно обслуживания, а не на каждый старт процесса.
| Что наблюдаете | Что проверить дальше |
|---|---|
| Сервер не запускается | journalctl, наличие исполняемого файла, сохранённые экспорты окружения и библиотеки. |
| Steam-игрок получает таймаут | UDP 2456–2457 в обоих firewall и публичный адрес. TCP-проверка веб-порта не проверяет этот маршрут. |
| Crossplay не работает с локальным адресом | Используйте код или публичный адрес; проверьте регистрацию relay и исходящий доступ. |
| Появился новый мир | Остановитесь до продолжения игры; сопоставьте -world, -savedir и выбранную копию. Перед сменой путей сохраните все старые данные. |
| Обновление будто не применилось | SteamCMD должен обновлять /srv/valheim/server, а служба — запускать эту же установку. |
Так можно сузить причину ошибки без удаления мира и открытия посторонних портов.




