Сервер Valheim: сколько RAM на 10 игроков и как ставить моды
TL;DR
Для выделенного сервера Valheim на 10 игроков достаточно 4 ГБ RAM при небольшом количестве модов, но практичный запас на 2026 год — 6–8 ГБ RAM, 2–4 быстрых vCPU и SSD от 40 ГБ. Ниже сервер устанавливается на Ubuntu 24.04 LTS через SteamCMD, запускается отдельным пользователем, защищается firewall и fail2ban, а моды ставятся через BepInExPack Valheim с резервным копированием мира перед каждым обновлением.
- Минимальная рабочая конфигурация: 2 vCPU, 4 ГБ RAM, 40 ГБ NVMe SSD.
- Рекомендуемый вариант для 10 игроков и модпака: 4 vCPU, 8 ГБ RAM, 60–80 ГБ NVMe SSD.
- Для подключения обычно нужны UDP-порты
2456–2458; TCP-порты для самого игрового трафика не обязательны. - Данные мира хранятся отдельно от файлов приложения и должны регулярно копироваться во внешнее хранилище.
- BepInEx устанавливается в каталог Valheim, а серверные DLL-моды — в
BepInEx/plugins. - Обновлять Valheim и моды следует только после бэкапа и проверки совместимости версий.
1. TL;DR
Этот раздел намеренно повторяет краткий ответ в формате, удобном для быстрого поиска: если на сервере играют до 10 человек одновременно, ориентируйтесь не только на номинальный объём RAM, но и на резерв для операционной системы, модов и временных пиков загрузки мира.
| Сценарий | CPU | RAM | Диск |
|---|---|---|---|
| Ванильный Valheim, 2–5 игроков | 2 vCPU | 4 ГБ | 40 ГБ NVMe SSD |
| До 10 игроков, лёгкие моды | 3–4 vCPU | 6 ГБ | 50 ГБ NVMe SSD |
| До 10 игроков, крупный модпак | 4 vCPU с хорошей частотой | 8 ГБ | 60–80 ГБ NVMe SSD |
| Более 10 игроков или несколько миров | 4–8 vCPU | 8–16 ГБ | 80 ГБ и более |
2. Содержание
Инструкция рассчитана на чистый VPS с Ubuntu Server 24.04 LTS и архитектурой x86_64. Команды выполняются от имени пользователя с правами sudo, если отдельно не указано иное.
Серверная версия Valheim и BepInEx меняются со временем. В примерах используются SteamCMD и актуальная для 2026 года Linux-схема установки, но конкретные версии модов всегда проверяйте на странице их релиза. Не смешивайте DLL от старой версии игры с новым сервером без теста.
3. Что мы настраиваем и зачем
Задача выделенного сервера Valheim
Valheim — кооперативная игра на выживание, в которой мир продолжает существовать независимо от того, находится ли владелец мира в игре. Если запускать сервер на домашнем компьютере, он будет зависеть от электричества, домашнего интернета, NAT и того, включён ли компьютер. Выделенный сервер на VPS работает круглосуточно, а игроки подключаются к одному постоянному адресу.
В этой статье создаётся Linux-сервер с отдельным пользователем valheim. Файлы игры будут находиться в /opt/valheim/server, конфигурация запуска — в systemd unit, а сохранения — в /opt/valheim/data. Такое разделение упрощает обновления, резервное копирование и восстановление мира.
Для десяти игроков важна не только RAM. На производительность влияют частота одного-двух ядер CPU, задержка сети до игроков, скорость диска, количество активных объектов в мире и моды. Пик потребления обычно возникает во время генерации новых территорий, массовой загрузки объектов и сохранения мира.
Что получится в результате
- Автоматический запуск сервера после перезагрузки VPS.
- Доступ к миру по доменному имени или IP-адресу.
- Ограничение входа firewall только необходимыми портами.
- Установка BepInEx для серверных модов.
- Отдельный файл запуска с именем мира, паролем и публичностью сервера.
- Ежедневный локальный и внешний бэкап сохранений.
- Команды для просмотра логов, проверки портов и диагностики нехватки памяти.
Cloud-managed и self-hosted
Cloud-managed-хостинг предоставляет готовую панель: пользователь выбирает игру, нажимает кнопку запуска и получает доступ к логам и файловому менеджеру. Это удобно, если сервер нужен на короткий срок или администратор не хочет заниматься Linux. Недостатками могут быть ограничение модов, платные дополнительные ресурсы, зависимость от функций панели и меньший контроль над резервными копиями.
Self-hosted VPS требует больше ручной настройки, зато вы контролируете ОС, systemd, firewall, файловую структуру, расписание бэкапов и набор модов. VPS подходит для небольшой постоянной группы друзей, если вы готовы самостоятельно следить за обновлениями и безопасностью.
Домашний сервер остаётся альтернативой. Он может быть дешевле при уже имеющемся оборудовании, но для публичной игры понадобится стабильный upload, проброс портов, белый IP или туннель, а также защита от отключений. Для игроков из разных регионов VPS обычно проще разместить ближе к большинству участников.
Особенности модов
Моды Valheim бывают клиентскими, серверными и комбинированными. Клиентский мод изменяет интерфейс или локальное поведение и может не требоваться на сервере. Серверный мод работает в процессе dedicated server. Комбинированный мод необходимо установить и на сервер, и на каждый клиент с совместимой версией.
BepInEx — загрузчик плагинов, а не универсальная гарантия совместимости. Сам факт запуска BepInEx не означает, что любой мод будет работать на Linux или на headless-сервере. Перед установкой читайте требования мода, версию Valheim, список зависимостей и комментарии о dedicated server.
4. Какой VPS-конфиг нужен под эту задачу
Сколько RAM нужно Valheim на 10 игроков
Фиксированного официального числа «RAM на игрока» нет. Потребление зависит от версии игры, размера мира, количества открытых территорий, числа построек, животных, предметов, модов и длительности работы процесса. Для чистого сервера на десять игроков разумно начинать с 4–6 ГБ RAM, но 6–8 ГБ дают заметно больший запас.
На VPS с 4 ГБ RAM оставляйте минимум 700–1000 МБ системе и служебным процессам. Если установить крупные моды, добавить мониторинг, агент бэкапов или несколько экземпляров игры, запас быстро исчезнет. Swap помогает пережить краткий пик, но не заменяет физическую память: при постоянном активном swap игровой процесс начнёт испытывать задержки.
Практическая конфигурация
| Компонент | Минимум | Рекомендуется для 10 игроков |
|---|---|---|
| CPU | 2 vCPU, высокая частота | 4 vCPU, современная архитектура |
| RAM | 4 ГБ | 8 ГБ |
| Диск | 40 ГБ SSD | 60–80 ГБ NVMe SSD |
| Сеть | 100 Мбит/с, без жёсткого лимита трафика | 1 Гбит/с порт, достаточный месячный трафик |
| ОС | Ubuntu Server 24.04 LTS x86_64 | Ubuntu Server 24.04 LTS x86_64 |
В качестве одного из вариантов можно взять VPS с такими характеристиками: 4 vCPU, 8 ГБ RAM, NVMe SSD от 60 ГБ и публичный IPv4. Для игрового сервера желательно уточнить, нет ли у тарифа жёсткого ограничения исходящего трафика и разрешён ли входящий UDP.
Когда нужен dedicated
Отдельный физический сервер не требуется только из-за десяти игроков. VPS будет рациональнее, если запущен один мир, нет тяжёлых модпаков и допустимы виртуальные CPU. Dedicated стоит рассматривать при нескольких независимых мирах, большом количестве одновременных игроков, тяжёлых серверных модах, требованиях к гарантированной производительности или необходимости полностью изолировать ресурсы от соседей.
Для одного сервера Valheim с десятью игроками dedicated часто окажется избыточным. Его преимущества проявляются, когда вы используете свободные ресурсы для нескольких игровых сервисов, CI, мониторинга или файлового хранилища. В таком случае учитывайте не только RAM, но и резерв CPU для каждого процесса.
Выбор локации
Выбирайте регион по задержке до основной группы игроков, а не только по географическому расстоянию. Задержка 30–60 мс обычно комфортна, но стабильность маршрута и отсутствие потерь пакетов важнее разницы между 40 и 50 мс. Проверьте маршрут командами ping и mtr с нескольких клиентских сетей.
Если игроки находятся в разных странах, разместите сервер ближе к центру их распределения. Для Valheim обычно не требуется сверхнизкая задержка как для соревновательного шутера, однако скачки latency, packet loss и перегруженный канал приводят к рассинхронизации и задержкам взаимодействия с объектами.
5. Подготовка сервера
Вход по SSH и создание пользователя
После выдачи VPS подключитесь под временным административным пользователем. Не запускайте игровой сервер от имени root: ошибка в моде или скрипте тогда получит лишние права на файловую систему.
# Обновляем индекс пакетов и устанавливаем обновления
sudo apt update && sudo apt full-upgrade -y
# Создаём отдельного системного пользователя для Valheim
sudo adduser --disabled-password --gecos "" valheim
# Создаём каталог приложения и назначаем владельца
sudo install -d -o valheim -g valheim /opt/valheim/server /opt/valheim/data /opt/valheim/backups
# Добавляем административного пользователя в группу sudo
sudo usermod -aG sudo deploy
Замените deploy на фактическое имя вашего административного пользователя. Если провайдер выдал только root, создайте обычного пользователя и добавьте его в группу sudo до отключения root-доступа.
SSH-ключи
На локальном компьютере сгенерируйте ключ Ed25519, если его ещё нет. Защищённый passphrase снижает риск компрометации при краже файла закрытого ключа.
# Выполняется на вашем рабочем компьютере
ssh-keygen -t ed25519 -C "valheim-admin"
# Копируем открытый ключ на сервер
ssh-copy-id deploy@SERVER_IP
# Проверяем вход по ключу
ssh deploy@SERVER_IP
После проверки откройте конфигурацию SSH и запретите вход по паролю и напрямую под root. Перед перезапуском службы оставьте текущую SSH-сессию открытой и проверьте новую.
# Открываем конфигурацию SSH
sudoedit /etc/ssh/sshd_config.d/10-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers deploy
# Проверяем синтаксис и перечитываем настройки SSH
sudo sshd -t && sudo systemctl reload ssh
Firewall
Valheim Dedicated Server использует диапазон портов, начинающийся с базового порта, по умолчанию 2456. На практике откройте UDP 2456–2458. SSH ограничьте своим IP, если он статичен; иначе оставьте SSH открытым для адресов, с которых администрируете сервер, и обязательно используйте ключи.
# Устанавливаем базовые пакеты, UFW и fail2ban
sudo apt install -y ca-certificates curl wget unzip tar jq htop tmux \
ufw fail2ban chrony rsync restic unattended-upgrades
# Разрешаем SSH и игровые UDP-порты
sudo ufw allow from YOUR_ADMIN_IP to any port 22 proto tcp
sudo ufw allow 2456:2458/udp
# Включаем firewall с политикой запрета входящих соединений
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw --force enable
# Проверяем правила
sudo ufw status verbose
Если ваш административный IP меняется, вместо правила с конкретным адресом можно использовать sudo ufw allow 22/tcp, но это увеличит количество автоматических сканирований. Игровые порты не нужно открывать по TCP только «на всякий случай»: используйте протокол, указанный документацией и фактическими логами.
Настройка fail2ban
Fail2ban анализирует логи и временно блокирует адреса с повторными неудачными SSH-входами. Он не защищает Valheim от игровых атак и не заменяет обновления, но уменьшает шум от перебора паролей.
# Создаём локальную настройку jail для SSH
sudo tee /etc/fail2ban/jail.d/sshd.local >/dev/null <<'EOF'
[sshd]
enabled = true
port = 22
backend = systemd
maxretry = 5
findtime = 10m
bantime = 1h
EOF
# Запускаем fail2ban и добавляем его в автозагрузку
sudo systemctl enable --now fail2ban
# Проверяем состояние SSH-защиты
sudo fail2ban-client status sshd
Swap и базовые утилиты
На VPS с 4–8 ГБ RAM можно создать swap-файл размером 2 ГБ. Это не ускоряет игру, но уменьшает риск аварийного завершения процесса при кратком пике. Не задавайте чрезмерный swap на медленном диске и контролируйте значение vm.swappiness.
# Создаём swap-файл размером 2 ГБ, если swap ещё не настроен
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# Делаем swap постоянным после перезагрузки
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# Проверяем память и swap
free -h
swapon --show
Проверьте время на сервере: корректные часы нужны для логов, сертификатов и расписания бэкапов.
# Включаем синхронизацию времени
sudo systemctl enable --now chrony
# Проверяем состояние часов
timedatectl status
6. Установка Valheim и модов — пошагово
Шаг 1. Установка SteamCMD
Для Linux dedicated server используется SteamCMD. На Ubuntu 24.04 включите архитектуру i386, так как часть библиотек SteamCMD имеет 32-битные зависимости. Команды ниже устанавливают SteamCMD из репозитория Ubuntu.
# Подключаем 32-битную архитектуру для зависимостей SteamCMD
sudo dpkg --add-architecture i386
# Обновляем список пакетов
sudo apt update
# Устанавливаем SteamCMD и необходимые библиотеки
sudo apt install -y steamcmd libc6:i386 libstdc++6:i386
В некоторых образах Ubuntu пакет SteamCMD предлагает принять лицензию в интерактивном режиме. Если установка завершается ошибкой лицензии, повторите команду в интерактивной SSH-сессии и подтвердите условия.
Шаг 2. Создание каталога и загрузка сервера
Приложение Valheim Dedicated Server имеет Steam App ID 896660. Запускайте SteamCMD от пользователя valheim, чтобы все файлы сразу получили правильного владельца.
# Загружаем или обновляем dedicated server Valheim
sudo -u valheim /usr/games/steamcmd \
+force_install_dir /opt/valheim/server \
+login anonymous \
+app_update 896660 validate \
+quit
SteamCMD скачает последнюю доступную серверную версию из публичной ветки. Команда validate проверяет целостность файлов и может занимать несколько минут. Повторный запуск этой команды используется для обновления.
Шаг 3. Подготовка каталога сохранений
Серверные сохранения лучше вынести в отдельный каталог. Это позволяет обновлять или заменять файлы приложения, не затрагивая мир. Для Linux Valheim используется переменная VALHEIM_INSTALL_ROOT, чтобы процесс знал, где находятся серверные данные.
# Проверяем наличие исполняемого файла сервера
sudo -u valheim test -x /opt/valheim/server/valheim_server.x86_64 \
&& echo "Valheim server binary is present"
# Проверяем владельца каталогов
sudo chown -R valheim:valheim /opt/valheim/server /opt/valheim/data
# Создаём каталог для логов
sudo install -d -o valheim -g valheim /var/log/valheim
Шаг 4. Первый запуск без systemd
Перед созданием постоянной службы полезно выполнить короткий ручной запуск. Так вы увидите ошибку зависимостей или неправильные аргументы непосредственно в терминале.
# Запускаем тестовый сервер в отдельной сессии пользователя valheim
sudo -u valheim env VALHEIM_INSTALL_ROOT=/opt/valheim/server \
/opt/valheim/server/valheim_server.x86_64 \
-name "Valheim Test" \
-port 2456 \
-world "DedicatedWorld" \
-password "ChangeThisPassword123" \
-public 1
Пароль должен соответствовать требованиям игры и не совпадать с паролем SSH или панелью провайдера. Для остановки тестового процесса используйте Ctrl+C. Не вставляйте настоящий пароль в публичные логи, историю команд или статью.
Шаг 5. Установка BepInExPack Valheim
Для модифицированного сервера понадобится Linux-совместимая сборка BepInExPack Valheim. Скачивайте архив только с официальной страницей проекта на Thunderstore или из другого источника, на который ссылается автор релиза. Нельзя надёжно зафиксировать URL конкретной версии в общей статье: он меняется при выпуске новых сборок.
Скачайте архив на локальный компьютер, проверьте контрольную сумму, если автор её публикует, и передайте на сервер. Ниже имя архива условное; замените его на фактическое имя скачанного файла.
# На локальном компьютере передаём архив BepInEx на сервер
scp BepInExPack_Valheim-.zip deploy@SERVER_IP:/tmp/
# На сервере создаём временный каталог для распаковки
sudo install -d -o valheim -g valheim /tmp/bepinex-valheim
# Распаковываем архив во временный каталог
sudo unzip -q /tmp/BepInExPack_Valheim-.zip -d /tmp/bepinex-valheim
# Просматриваем структуру архива перед копированием
find /tmp/bepinex-valheim -maxdepth 3 -type f | sort | head -50
У разных релизов архив может содержать дополнительный каталог вроде BepInExPack_Valheim. Скопируйте содержимое именно той директории, где находятся BepInEx, doorstop_config.ini и загрузочный файл. Пример с распространённой структурой:
# Копируем файлы загрузчика в каталог dedicated server
sudo cp -a /tmp/bepinex-valheim/BepInExPack_Valheim/. /opt/valheim/server/
# Исправляем владельца всех файлов модифицированного сервера
sudo chown -R valheim:valheim /opt/valheim/server
# Проверяем наличие каталога плагинов
sudo -u valheim mkdir -p /opt/valheim/server/BepInEx/plugins
Путь внутри архива обязательно проверяйте командой find. Если скопировать внешний каталог целиком не туда, Valheim запустится без BepInEx и создаст впечатление, что мод «не работает».
Шаг 6. Установка серверного мода
Каждый мод устанавливайте по инструкции автора. Обычно DLL-файл помещают в /opt/valheim/server/BepInEx/plugins, а конфигурация после первого запуска появляется в BepInEx/config. Зависимости, например библиотека общего назначения, также копируются в соответствующий каталог.
# Передаём DLL-мод на сервер с локального компьютера
scp ExampleServerMod.dll deploy@SERVER_IP:/tmp/
# Копируем мод в каталог плагинов от имени root
sudo install -o valheim -g valheim -m 0644 \
/tmp/ExampleServerMod.dll \
/opt/valheim/server/BepInEx/plugins/ExampleServerMod.dll
# Проверяем список установленных плагинов
sudo -u valheim find /opt/valheim/server/BepInEx/plugins \
-maxdepth 1 -type f -name '.dll' -printf '%f\n'
Не скачивайте случайные DLL из форумных вложений и не устанавливайте моды с одинаковым именем без проверки источника. Плагин имеет права процесса Valheim и потенциально может читать или изменять файлы, доступные пользователю valheim.
Шаг 7. Согласование модов с клиентами
Составьте простой список: название мода, точная версия, зависимости, нужен ли он клиенту, нужен ли серверу, дата установки. Командные и контентные моды часто требуют идентичного набора на всех клиентах. Если версия DLL на клиенте отличается от серверной, возможны ошибки RPC, пропавшие предметы или невозможность входа.
# Сохраняем инвентаризацию файлов модов перед обновлением
sudo -u valheim find /opt/valheim/server/BepInEx \
-type f \( -name '.dll' -o -name '.cfg' \) -print0 \
| sort -z | xargs -0 sha256sum \
| sudo tee /opt/valheim/data/mod-files.sha256
7. Конфигурация, запуск и проверка
Файл переменных окружения
Пароль и параметры мира не следует хранить непосредственно в systemd unit, доступном всем пользователям. Создайте файл /etc/valheim/valheim.env с правами только для root и группы valheim. Systemd сможет прочитать его при запуске, а обычный пользователь не увидит секрет без административных прав.
# Создаём защищённый каталог конфигурации
sudo install -d -o root -g valheim -m 0750 /etc/valheim
# Создаём файл переменных окружения
sudo tee /etc/valheim/valheim.env >/dev/null <<'EOF'
VALHEIM_NAME=Friends Valheim
VALHEIM_PORT=2456
VALHEIM_WORLD=DedicatedWorld
VALHEIM_PASSWORD=replace-with-a-long-game-password
VALHEIM_PUBLIC=1
VALHEIM_SAVE_DIR=/opt/valheim/data
EOF
# Запрещаем чтение файла посторонним пользователям
sudo chown root:valheim /etc/valheim/valheim.env
sudo chmod 0640 /etc/valheim/valheim.env
Не используйте в пароле пробелы, кавычки и символы, которые могут интерпретироваться shell, если не понимаете правила systemd environment-файлов. Пароль игрового сервера не должен быть короче минимального требования текущей версии Valheim.
Systemd unit
Systemd обеспечивает автозапуск после перезагрузки, корректную остановку и доступ к журналу через journalctl. Параметр Restart=on-failure полезен при неожиданном падении, но не должен маскировать несовместимый мод: сначала анализируйте логи.
# Создаём службу dedicated server
sudo tee /etc/systemd/system/valheim.service >/dev/null <<'EOF'
[Unit]
Description=Valheim Dedicated Server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=valheim
Group=valheim
WorkingDirectory=/opt/valheim/server
EnvironmentFile=/etc/valheim/valheim.env
Environment=VALHEIM_INSTALL_ROOT=/opt/valheim/server
ExecStart=/opt/valheim/server/valheim_server.x86_64 -name "${VALHEIM_NAME}" -port ${VALHEIM_PORT} -world "${VALHEIM_WORLD}" -password "${VALHEIM_PASSWORD}" -public ${VALHEIM_PUBLIC} -savedir "${VALHEIM_SAVE_DIR}"
Restart=on-failure
RestartSec=15
KillSignal=SIGINT
TimeoutStopSec=120
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
EOF
# Перечитываем unit-файлы systemd
sudo systemctl daemon-reload
# Запускаем сервер и добавляем его в автозагрузку
sudo systemctl enable --now valheim.service
# Проверяем состояние службы
sudo systemctl status valheim.service --no-pager
Если конкретная сборка сервера не принимает параметр -savedir, удалите его из ExecStart и задайте каталог сохранений через поддерживаемую переменную или механизм версии. Проверяйте фактический help самой бинарной программы, а не копируйте аргументы из инструкции для другой версии.
Логи и проверка процесса
# Смотрим последние 100 строк журнала
sudo journalctl -u valheim.service -n 100 --no-pager
# Следим за журналом в реальном времени
sudo journalctl -u valheim.service -f
# Проверяем запущенный процесс и использование памяти
ps -o pid,user,%cpu,%mem,rss,etime,cmd -C valheim_server.x86_64
free -h
df -h /opt/valheim
# Проверяем, слушаются ли игровые UDP-порты
sudo ss -lunp | grep -E '2456|2457|2458'
Успешный запуск не всегда означает, что сервер доступен из интернета. Локально проверьте, что процесс слушает порты, затем убедитесь, что UFW и сетевой firewall провайдера разрешают UDP 2456–2458. На клиенте подключитесь через список серверов или прямое добавление адреса в интерфейсе Steam.
Проверка ресурсов
Во время теста запустите несколько клиентов, загрузите новые территории и посмотрите пиковые значения RSS и swap. Если RAM стабильно занята более чем на 85–90 процентов, сначала удалите неиспользуемые моды и проверьте утечки, а затем увеличьте тариф.
# Устанавливаем интерактивный монитор процессов
sudo apt install -y sysstat
# Проверяем нагрузку CPU, память и swap
vmstat 5 12
# Смотрим нагрузку по CPU и дисковую активность
iostat -xz 5 6
Управление конфигурацией модов
После первого запуска BepInEx обычно создаёт конфиги в /opt/valheim/server/BepInEx/config. Остановите сервер перед редактированием, если мод не поддерживает горячее изменение. Копируйте конфиги в отдельный каталог или систему контроля версий без секретов.
# Останавливаем сервер перед изменением конфигурации
sudo systemctl stop valheim.service
# Создаём снимок конфигурации модов
sudo tar -C /opt/valheim/server -czf \
/opt/valheim/data/bepinex-config-$(date +%F-%H%M).tar.gz \
BepInEx/config BepInEx/plugins
# После изменений запускаем сервер
sudo systemctl start valheim.service
TLS и HTTPS для служебной страницы
Valheim не использует HTTPS для игрового подключения, поэтому сертификат TLS не нужен для UDP-портов игры. Если вы публикуете отдельную веб-страницу состояния, webhook или панель мониторинга, не открывайте её напрямую без защиты. Самый простой вариант — reverse proxy Caddy с автоматическим сертификатом для домена.
Не размещайте пароль Valheim и административные API в публичном status endpoint. Для панели используйте отдельную авторизацию, ограничение по IP или VPN. Если веб-сервис не нужен, не устанавливайте Caddy вовсе: отсутствие лишнего публичного сервиса уменьшает поверхность атаки.
# Устанавливаем Caddy из официального репозитория проекта
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
| sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
| sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update && sudo apt install -y caddy
# /etc/caddy/Caddyfile
status.example.org {
reverse_proxy 127.0.0.1:8080
encode gzip
}
# Проверяем конфигурацию и перезапускаем Caddy
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
# Открываем HTTPS только если веб-сервис действительно нужен
sudo ufw allow 443/tcp
Для получения сертификата домен должен указывать на VPS, а входящий TCP-порт 443 должен быть доступен. Не открывайте порт 80 без необходимости, если выбранный способ выдачи сертификата этого не требует; Caddy обычно использует его для автоматического HTTP-испытания и перенаправления.
8. Бэкапы и обслуживание
Что сохранять
Критически важны файлы мира, персонажей и серверные настройки. В зависимости от версии Valheim и параметров запуска они находятся в каталоге, заданном -savedir, а при стандартной конфигурации могут использовать каталог профиля пользователя. Всегда определяйте фактический путь по параметрам запуска и времени изменения файлов.
- Файлы миров с расширениями
.dbи.fwl. - Файлы персонажей, если сервер или окружение их хранит локально.
/etc/valheim/valheim.env, но только в зашифрованном хранилище.BepInEx/configи список DLL-плагинов.- Systemd unit и настройки firewall.
- Список версий Valheim, BepInEx и модов.
Бэкап на тот же диск не защищает от отказа диска, удаления каталога или компрометации VPS. Минимальная схема — ежедневная локальная копия плюс копия во внешнее S3-совместимое хранилище или на отдельный сервер. Протестируйте восстановление: архив, который ни разу не открывали, нельзя считать проверенным бэкапом.
Корректная остановка перед копированием
Мир может записываться во время игры. Перед полным бэкапом лучше остановить службу, скопировать данные и запустить её снова. Для десяти игроков короткое окно обслуживания обычно предпочтительнее потенциально повреждённого сохранения.
# Создаём каталог для ежедневных архивов
sudo install -d -o valheim -g valheim -m 0750 /opt/valheim/backups
# Останавливаем сервер и ждём завершения процесса
sudo systemctl stop valheim.service
# Архивируем сохранения и конфигурацию модов
sudo tar -C /opt/valheim -czf \
/opt/valheim/backups/valheim-$(date +%F-%H%M).tar.gz \
data server/BepInEx/config server/BepInEx/plugins
# Запускаем сервер после завершения копирования
sudo systemctl start valheim.service
# Удаляем локальные архивы старше 14 дней
sudo find /opt/valheim/backups -type f -name '.tar.gz' -mtime +14 -delete
Этот сценарий архивации нужно запускать с правами, позволяющими остановить systemd-службу и прочитать каталог. Для автоматизации создайте отдельный root-скрипт с фиксированным путём, а не разрешайте пользователю игры выполнять произвольные команды от root.
Простой скрипт для cron
# Создаём скрипт резервного копирования
sudo tee /usr/local/sbin/backup-valheim.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
SERVICE="valheim.service"
ROOT="/opt/valheim"
DEST="$ROOT/backups"
STAMP="$(date +%F-%H%M%S)"
ARCHIVE="$DEST/valheim-$STAMP.tar.gz"
mkdir -p "$DEST"
systemctl stop "$SERVICE"
trap 'systemctl start "$SERVICE"' EXIT
tar -C "$ROOT" -czf "$ARCHIVE" \
data server/BepInEx/config server/BepInEx/plugins
find "$DEST" -type f -name 'valheim-.tar.gz' -mtime +14 -delete
EOF
# Ограничиваем запуск скрипта и делаем его исполняемым
sudo chown root:root /usr/local/sbin/backup-valheim.sh
sudo chmod 0750 /usr/local/sbin/backup-valheim.sh
# Добавляем ежедневный запуск в 04:15
echo '15 4 root /usr/local/sbin/backup-valheim.sh >> /var/log/valheim-backup.log 2>&1' \
| sudo tee /etc/cron.d/valheim-backup
В скрипте используется trap, поэтому служба будет запущена даже при ошибке после остановки, но всё равно проверяйте уведомления и размер архивов. Если архив должен отправляться в S3, добавьте restic после локального архива. Репозиторий restic должен иметь отдельный пароль и не хранить его в открытом тексте в общем каталоге.
Restic во внешнее хранилище
# Инициализация выполняется один раз с защищёнными переменными
export AWS_ACCESS_KEY_ID='replace-me'
export AWS_SECRET_ACCESS_KEY='replace-me'
export RESTIC_PASSWORD='replace-with-a-long-repository-password'
export RESTIC_REPOSITORY='s3:https://s3.example.org/valheim-backups'
# Создаём restic-репозиторий
sudo -E restic init
# Загружаем сохранения и конфигурацию
sudo -E restic backup /opt/valheim/data /opt/valheim/server/BepInEx/config
# Удаляем старые точки восстановления и проверяем репозиторий
sudo -E restic forget --keep-daily 14 --keep-weekly 8 --keep-monthly 6 --prune
sudo -E restic check
Для постоянной работы храните переменные restic в файле с правами 0600 или используйте secrets manager. Не добавляйте такой файл в Git и не передавайте ключи в командной строке, если они могут попасть в историю shell или список процессов.
Обновление Valheim и модов
У Valheim нет классического rolling update для одного игрового мира: одновременно работают одна версия процесса и один набор файлов. Используйте maintenance window. Предупредите игроков, остановите сервер, сделайте бэкап, обновите файлы через SteamCMD, затем по одному обновляйте несовместимые моды.
# Останавливаем сервер перед обновлением
sudo systemctl stop valheim.service
# Обновляем dedicated server и проверяем файлы
sudo -u valheim /usr/games/steamcmd \
+force_install_dir /opt/valheim/server \
+login anonymous \
+app_update 896660 validate \
+quit
# Просматриваем новые ошибки до запуска в обычном режиме
sudo systemctl start valheim.service
sudo journalctl -u valheim.service -n 150 --no-pager
Если игра обновилась, а мод ещё нет, безопаснее временно удалить проблемный плагин и запустить ванильный сервер, чем пытаться использовать несовместимую DLL на основном мире. Для экспериментов создайте копию мира с другим именем и проверяйте модпак на ней.
9. Troubleshooting и FAQ
Сервер не виден в списке, хотя служба запущена. Что проверить?
Сначала выполните systemctl status valheim и убедитесь, что процесс не перезапускается по кругу. Затем проверьте ss -lunp | grep 2456, правила ufw status и внешний firewall провайдера. Откройте UDP 2456–2458, проверьте правильность публичного IPv4 и не используйте TCP-правило вместо UDP. Если сервер скрыт, проверьте параметр -public 1 и попробуйте прямое подключение через Steam.
Какой VPS-конфиг минимально подойдёт для 10 игроков?
Для ванильного Valheim и небольшой группы подойдёт VPS с 2 vCPU, 4 ГБ RAM, SSD от 40 ГБ и публичным IPv4. Это нижняя граница, а не комфортный универсальный стандарт: при генерации мира и использовании модов свободная память может быстро закончиться. Более безопасный выбор — 4 vCPU и 8 ГБ RAM. Оставьте минимум 1–2 ГБ резерва, контролируйте swap и увеличивайте тариф по измерениям, а не по догадкам.
Что выбрать — VPS или dedicated для этой задачи?
Для одного мира Valheim на десять игроков обычно достаточно VPS. Он дешевле, проще масштабируется и не требует управления физическим сервером. Dedicated оправдан, если запускается несколько миров, тяжёлые модпаки, другие игры или требуется гарантированная производительность без влияния соседних виртуальных машин. Сначала измерьте CPU steal time, RAM, disk latency и сетевые потери на VPS; переходите на dedicated, если именно эти показатели создают проблему.
Мод установлен, но BepInEx его не загружает. В чём причина?
Проверьте расположение DLL: серверный плагин обычно должен лежать непосредственно в /opt/valheim/server/BepInEx/plugins, а не во вложенном каталоге внутри архива. Посмотрите журнал journalctl -u valheim и файлы в BepInEx/LogOutput.log. Проверьте владельца, архитектуру Linux-сборки, зависимости и совместимость с текущей версией Valheim. После изменения плагинов полностью перезапустите службу, а не только подключайтесь заново клиентом.
Игроков выбрасывает, появляются задержки и рассинхронизация. Что измерить?
Сначала сравните нагрузку CPU, RSS, swap и задержку диска в момент проблемы: vmstat 5, iostat -xz 5 и journalctl. С клиента выполните mtr -rw SERVER_IP, чтобы найти потери пакетов и скачки маршрута. Внутри игры причиной также могут быть тысячи построек, предметов, животных или мод, создающий большое количество объектов. Увеличение RAM не исправит packet loss и перегруженный один CPU.
После перезагрузки мир запускается пустым или откатывается. Как восстановить?
Не продолжайте играть в повреждённом состоянии, чтобы не перезаписать рабочую копию. Остановите службу и определите фактический каталог сохранений из ExecStart, переменной VALHEIM_SAVE_DIR и логов. Сравните даты файлов .db и .fwl, затем восстановите последнюю проверенную пару из архива. После восстановления запускайте сервер с тем же именем мира и теми же модами, которые использовались при создании бэкапа.
Можно ли ставить моды только на сервер?
Иногда да, но это зависит от типа мода. Серверные плагины, меняющие правила, команды или сохранение мира, могут работать только на dedicated server. Моды, добавляющие клиентский интерфейс, визуальные эффекты или новые сетевые сообщения, обычно требуют установки на всех клиентах. Ориентируйтесь на инструкцию конкретного проекта. Зафиксируйте одинаковые версии DLL и зависимостей, иначе часть игроков может получить ошибки входа или некорректное состояние мира.
Нужен ли HTTPS для игрового сервера Valheim?
Нет. Игровой dedicated server использует свои сетевые протоколы и UDP-порты, а HTTPS не шифрует и не обслуживает этот трафик. TLS нужен только для отдельной веб-панели, status endpoint, webhook или мониторинга, если они доступны через домен. Такой сервис следует проксировать через Caddy или другой reverse proxy, закрыть административные маршруты и не публиковать игровые секреты. Если веб-интерфейса нет, достаточно не открывать TCP 80 и 443.
10. Выводы и следующие шаги
Для Valheim на десять игроков практичный ориентир — VPS с 4 vCPU, 8 ГБ RAM и быстрым SSD. Сервер устанавливается через SteamCMD, запускается отдельным пользователем под systemd, а моды подключаются через BepInEx с обязательной проверкой совместимости.
Дальше настройте мониторинг RAM, CPU, диска и сетевых потерь, затем регулярно проверяйте восстановление бэкапов. При росте мира или модпака сначала тестируйте изменения на копии сохранения, а уже потом обновляйте production-сервер. Если появятся несколько миров или другие сервисы, разделите их по systemd-службам и пересмотрите лимиты ресурсов.