VPS под Pterodactyl: панель, Wings и игровые серверы
Pterodactyl — бесплатная панель для управления игровыми серверами. Она состоит из двух частей. Panel — веб-интерфейс на PHP с базой MariaDB или MySQL и Redis: в нём заводят пользователей, серверы и лимиты. Wings — демон на Go, который ставится на каждый узел и запускает каждый игровой сервер в отдельном Docker-контейнере с жёсткими ограничениями по памяти, процессору и диску. Обе части можно поставить на один VPS, а можно вынести панель на маленький сервер и подключать к ней сколько угодно узлов Wings.
Виртуализация: только полноценная
Документация Pterodactyl прямо пишет: на OpenVZ, Virtuozzo и LXC Wings, скорее всего, не запустится, а на KVM работает всегда. Причина в Docker — ему нужно собственное ядро, cgroups и сетевые модули. Проверить сервер можно командой systemd-detect-virt: если в ответе openvz или lxc, тариф не подойдёт. Ещё одна ловушка — модифицированные ядра некоторых хостеров без нужных функций Docker; Wings требует стандартное ядро дистрибутива. Поэтому в таблицу выше попали только VPS на KVM. Подробнее о требованиях контейнеров — на странице VPS для Docker.
Wings официально поддерживает Ubuntu и Debian (в ветке 1.x ещё Rocky Linux и AlmaLinux), на Windows не работает. Панели нужен веб-сервер (NGINX, Apache или Caddy), PHP с расширениями, база данных и Redis — всё это занимает около 1 ГБ памяти, так что на крошечный тариф вместе с играми панель лучше не ставить.
Сколько памяти закладывать на игры
Узел Wings считают как сумму серверов, которые на нём будут работать, плюс 1–2 ГБ на систему, Docker и панель. Ориентиры для одного сервера:
- Terraria, Factorio, TeamSpeak — 0,5–2 ГБ.
- Minecraft на Paper — 2–6 ГБ в зависимости от плагинов и онлайна, модпаки — 8 ГБ и больше. Подробно разобрано на странице VPS для Minecraft.
- Valheim, CS2 — 2–4 ГБ.
- Rust, ARK, Palworld — 8–16 ГБ на один сервер, к концу вайпа или при большом мире ещё больше.
Панель позволяет задать переподписку памяти на узле, но для игр это опасно: если контейнеры одновременно наберут больше, чем есть физически, ядро начнёт убивать процессы. Для узлов, где серверы получают другие люди, оставляйте запас и включайте swap-учёт (на ядрах 6.1 и новее он включён по умолчанию).
Процессор и диск
Большинство игровых серверов считают мир в одном основном потоке, поэтому на узле важна частота ядра, а количество ядер определяет, сколько серверов уживётся рядом. Четыре быстрых ядра — разумный минимум для нескольких серверов. В Pterodactyl можно закрепить сервер за конкретными ядрами, чтобы тяжёлый Rust не отнимал время у соседнего Minecraft.
Диск лучше брать NVMe: образы Docker, файлы игр и сохранения быстро разрастаются, а установка каждого сервера через SteamCMD скачивает гигабайты. CS2 или ARK занимают десятки гигабайт ещё до первого бэкапа. Встроенные бэкапы Pterodactyl по умолчанию хранятся на том же узле — для надёжности настройте выгрузку в S3-совместимое хранилище.
Одна машина или несколько узлов
Для первого знакомства и сервера на компанию друзей достаточно одного VPS, на котором стоят и панель, и Wings. Когда игр становится больше, выгоднее разделить роли: панель с базой данных живёт на маленьком дешёвом сервере, а игры — на нескольких узлах Wings, которые можно размещать в разных странах ближе к игрокам. Узлы добавляются в разделе Nodes, а панель распределяет новые серверы по ним с учётом свободной памяти и диска. Если узел выйдет из строя, панель и остальные игры продолжат работать. Связь панели с узлами идёт через интернет, поэтому панель не обязана стоять в том же дата-центре — важно лишь, чтобы игровые узлы были близко к игрокам.
Сеть и порты
Wings принимает команды панели по HTTPS на порту 8080 и даёт пользователям SFTP на 2022 — оба порта должны быть открыты, а для HTTPS узлу нужен свой домен с сертификатом. Каждый игровой сервер получает собственные порты из выделенного вами диапазона (allocations), их тоже нужно пропустить в файрволе. Публичные игровые серверы часто атакуют, поэтому для узла с открытыми играми выбирайте хостера с защитой от DDoS, а панель по возможности держите за ограничением по IP.