SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor · Обновлено 2026-08-01

Как разместить сервер Minecraft на VPS

Запустите Paper Minecraft на Ubuntu 24.04: подберите RAM, установите Java 21, настройте systemd и оба firewall для порта 25565, создайте безопасные бэкапы мира и разберите ошибки.

Что вы создаете

Стабильный сервер Minecraft Java Edition: Paper на Ubuntu 24.04, работающий от имени отдельного пользователя minecraft через systemd с Restart=on-failure, с включенным белым списком, портом 25565, открытым в обоих межсетевых экранах между игроками и JVM, и резервным копированием, которое не повреждает защищаемый мир. Сам сервер состоит из одного JAR-файла и одной команды java. Все, что отличает сервер, на котором ваши друзья играют год, от сервера, который выходит из строя в первые выходные, связано с этой командой. Об этом и рассказывает данное руководство.

Перед тем как тратить деньги, учтите два важных момента. Во-первых, Minecraft требует много памяти и в основном использует одно ядро процессора: VPS с 1 GB не сможет поддерживать пригодный для игры сервер, а одно быстрое ядро лучше четырех медленных. Во-вторых, это Java Edition. Игроки Bedrock, владельцы консолей и телефонов, а также пользователи приложения Windows Bedrock не могут подключиться к серверу Java. Для Bedrock требуется другое серверное программное обеспечение с UDP-портом 19132 или плагин Geyser, который выходит за рамки этого руководства.

Вам потребуется новый KVM VPS с Ubuntu 24.04, root или sudo и примерно тридцать минут.

Размер: что действительно нужно серверу для друзей

Оперативная память — главный параметр. Реальные значения ниже, чем обычно указывают на форумах модпаков:

  • 2 GB достаточно для vanilla на 2–5 игроков при умеренной дальности прорисовки. Играть можно, но запаса нет.
  • 4 GB — комфортный объём для сервера друзей: около десяти игроков одновременно на Paper с несколькими плагинами, а также достаточный запас для ОС.
  • 8 GB и больше — вариант для модпаков и более чем 20 игроков. В этом случае также важна производительность одного ядра CPU, поскольку основной игровой цикл выполняется в одном потоке.

Мир также занимает больше места на диске по мере исследования игроками. Хорошо исследованный мир в режиме выживания может занимать несколько гигабайт, поэтому оставьте запас для самого мира и его резервных копий.

Vanilla или Paper? Paper — это замена официальному jar без дополнительных изменений: используются те же миры и клиенты, а моды на стороне клиента не требуются. Paper оптимизирует самые медленные участки работы сервера: загрузку чанков, обработку сущностей и воронок, а также предоставляет API для плагинов. Единственная причина использовать vanilla — необходимость полного соответствия механикам vanilla для технических ферм на редстоуне, работу которых могут изменить оптимизации Paper. Во всех остальных случаях Paper поддерживает больше игроков при том же объёме памяти. Всё ниже применимо к обоим вариантам.

Шаг 1: установите Java 21

Для Minecraft 1.20.5 и всех последующих выпусков, включая все версии 1.21.x, требуется Java 21. Ubuntu 24.04 включает этот пакет в репозитории по умолчанию. Вариант headless не устанавливает библиотеки рабочего стола, которые сервер не использует:

sudo apt update && sudo apt install -y openjdk-21-jre-headless
java -version

Правильный результат: в первой строке указано openjdk version "21.0.x". Если указано 17 или 11, установлена другая JRE, которая имеет приоритет. Исправьте это с помощью sudo update-alternatives --config java и выберите запись, содержащую java-21.

Если пропустить эту проверку, позже возникнет самая часто встречающаяся в поисковых запросах ошибка Minecraft-сервера. С Java 17 JAR-файл сервера немедленно завершает работу с ошибкой:

Error: LinkageError occurred while loading main class net.minecraft.bundler.Main
	java.lang.UnsupportedClassVersionError: net/minecraft/bundler/Main has been
	compiled by a more recent version of the Java Runtime (class file version 65.0),
	this version of the Java Runtime only recognizes class file versions up to 61.0

Эти числа показывают несовместимость версий: версия class file 65.0 соответствует Java 21, 61.0 — Java 17, 60.0 — Java 16. Независимо от увиденной пары, исправление одинаково: установите более новую JRE и повторно выполните update-alternatives.

Шаг 2: отдельная учетная запись, никогда не root

Сервер выполняет код плагинов и обрабатывает сетевые данные от любого, кто может подключиться к порту. Если что-то пойдет не так, взлом с правами root полностью скомпрометирует VPS, а взлом с правами minecraft затронет игровой мир.

sudo adduser --system --group --home /opt/minecraft minecraft

--system создает учетную запись без пароля, которая не может подключаться по SSH. Каталог /opt/minecraft используется как ее домашний и рабочий каталог. С этого момента каждая команда, взаимодействующая с сервером, выполняется от имени этого пользователя.

Шаг 3: скачайте серверный jar из официального источника

Серверный jar следует скачивать только из двух источников: с официальной страницы загрузки серверного ПО на minecraft.net для vanilla и со страницы загрузок на papermc.io для Paper. Сторонние «хабы загрузок», перепаковывающие серверные jar, уже много лет используются для распространения вредоносного ПО. Серверный jar содержит произвольный код, который вы собираетесь запускать круглосуточно на сервере, доступном из Интернета.

Скопируйте ссылку на загрузку текущей сборки с официальной страницы. URL меняется с каждой версией и сборкой, поэтому жестко указывать его здесь не следует. Затем выполните:

cd /opt/minecraft
sudo -u minecraft wget -O server.jar 'PASTE-THE-COPIED-URL-HERE'

Правильный результат: server.jar размером примерно 50 MB, принадлежащий minecraft, что подтверждается с помощью ls -lh /opt/minecraft/server.jar.

Шаг 4: первый запуск, EULA и назначение себя оператором

Сначала один раз запустите сервер в интерактивном режиме. До настройки systemd такой запуск нужен только для выполнения двух задач, для которых удобна активная консоль.

cd /opt/minecraft
sudo -u minecraft java -Xms1G -Xmx1G -jar server.jar nogui

Сервер завершает работу через несколько секунд. Paper сначала еще некоторое время применяет исправления. Затем в журнале появляется строка, с которой сталкиваются все:

[ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

Это не ошибка, а проверка лицензии. Во время запуска рядом с JAR-файлом создается файл eula.txt. Если вы еще не ознакомились с EULA, прочитайте ее по ссылке, затем измените значение флага:

sudo -u minecraft sed -i 's/eula=false/eula=true/' /opt/minecraft/eula.txt

Снова выполните ту же команду java. На этот раз сервер создаст мир. При первом запуске это занимает одну-две минуты. Затем он перейдет в состояние:

[Server thread/INFO]: Done (9.204s)! For help, type "help"

Теперь у вас есть активная консоль. Используйте ее для второй задачи: введите op YourMinecraftName (точное имя пользователя в игре). Сервер добавит вас в файл ops.json. После этого, когда консоль не подключена, вы сможете выполнять любые команды администратора из игры. Затем введите stop, чтобы корректно сохранить данные и завершить работу.

Шаг 5: server.properties и почему online-mode остается равным true

При первом запуске также был создан файл server.properties. Большинство значений по умолчанию подходят. Эти параметры стоит выбрать осознанно:

online-mode=true
white-list=true
enforce-whitelist=true
view-distance=8
max-players=10
motd=A private server for people I actually know

online-mode=true заставляет сервер проверять каждое имя пользователя, подключающегося игрока, через серверы сеансов Mojang. Это подтверждает, что игрок владеет учетной записью. Значение false, то есть параметр «cracked server», означает, что сервер принимает на веру имя клиента. Любой пользователь сможет войти под любым именем, в том числе под вашим. Поскольку права ops и списки разрешенных игроков привязаны к именам, злоумышленник сможет войти с вашими правами оператора. Единственная допустимая причина установить это значение в false — работа за аутентифицирующим прокси, например Velocity, который самостоятельно проверяет игроков. На обычном сервере это значение всегда остается равным true.

view-distance — самый важный параметр производительности в этом файле. Затраты CPU и RAM примерно пропорциональны его квадрату. Значение 8 подходит для VPS по умолчанию. Значение 10 используется в vanilla по умолчанию и заметно увеличивает нагрузку.

white-list=true вместе с enforce-whitelist=true закрывает сервер для посторонних пользователей. В разделе о безопасности ниже объясняется, почему это обязательно. Добавляйте игроков в игре с помощью /whitelist add TheirName, имея права ops.

Шаг 6: параметры памяти, почему -Xms и -Xmx должны совпадать

JVM выделяет память в куче от -Xms (начальный размер) до -Xmx (предельный размер). На выделенном игровом сервере задайте одинаковое значение: куча всё равно достигнет предельного размера, а её поэтапное расширение только увеличивает нагрузку на сборщик мусора во время игры. Для VPS с 4 GB подходит следующая пара:

/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui

-Xmx — это не общий объём памяти, используемый процессом. JVM дополнительно использует память вне кучи, стеки потоков, кэши JIT и прямые буферы. В сумме это занимает примерно полгигабайта или больше. Кроме того, Ubuntu требуется свободная память. Практическое правило: задавайте -Xmx не более чем как объём оперативной памяти VPS минус 1 GB. Если превысить это значение, возможна одна из двух ошибок. Если выделить память не удаётся сразу, сервер отказывается запускаться и выводит:

Error: Could not reserve enough space for object heap

Эта ошибка однозначна и возникает сразу. Более опасный вариант: сервер запускается нормально, но через несколько часов завершается, когда под нагрузкой куча заполняется, а убийца процессов OOM в ядре выбирает самый крупный процесс на сервере — JVM. В журнале сервера ничего не появляется. Подтверждение находится в sudo dmesg | grep -i oom, например в строке Out of memory: Killed process 1234 (java). Если служба «случайно» перезапускается, сначала проверьте этот журнал и уменьшите -Xmx.

Для Paper в документации проекта описаны флаги Aikar — настроенный набор параметров G1GC (-XX:+UseG1GC -XX:MaxGCPauseMillis=200 и ещё около дюжины параметров), который уменьшает паузы сборки мусора в кучах большого размера. Сформируйте полную строку по документации Paper. Для кучи размером 2–4 GB прирост невелик, но эти параметры безопасны.

Шаг 7: модуль systemd с Restart=on-failure

Сервер, запущенный вручную, завершает работу вместе с сеансом SSH и остается остановленным после перезагрузки. Создайте /etc/systemd/system/minecraft.service:

[Unit]
Description=Minecraft server (Paper)
After=network-online.target
Wants=network-online.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms3G -Xmx3G -jar server.jar nogui
Restart=on-failure
RestartSec=10
TimeoutStopSec=120

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -f

Ожидаемый результат: status показывает active (running), а журнал, в котором теперь сохраняется вывод консоли сервера, снова заканчивается строкой Done.

В этом модуле есть два намеренных решения. Restart=on-failure запускает сервер после сбоя, но не после штатного stop, поэтому техническое обслуживание остается возможным. Важен и параметр TimeoutStopSec=120: systemctl stop отправляет SIGTERM, сервер Minecraft обрабатывает его и сохраняет все миры перед завершением работы, а для большого мира это сохранение занимает время. Стандартный тайм-аут systemd может отправить SIGKILL JVM во время сохранения. Именно это приводит к повреждению файлов регионов. Установите тайм-аут в две минуты.

Если служба перезапускается по кругу и в журнале отображается:

[Server thread/WARN]: **** FAILED TO BIND TO PORT!
[Server thread/WARN]: The exception was: io.netty.channel.unix.Errors$NativeIoException: bind(..) failed: Address already in use
[Server thread/WARN]: Perhaps a server is already running on that port?

значит, порт 25565 уже занят. Почти всегда это означает, что предыдущий запуск в переднем плане все еще выполняется в другом сеансе SSH. Найдите его с помощью sudo ss -tlnp | grep 25565 и остановите этот процесс. Никогда не запускайте два сервера на одном порту.

Шаг 8: откройте порт 25565 в обоих брандмауэрах

Minecraft Java использует только TCP 25565. UDP нужен только для необязательного протокола запросов и по умолчанию отключен. На VPS:

sudo ufw allow OpenSSH
sudo ufw allow 25565/tcp
sudo ufw enable

Это первый брандмауэр. Большинство провайдеров VPS используют второй брандмауэр на уровне сети в панели управления. О нем часто забывают. Откройте там TCP 25565. Если открыт только один из двух брандмауэров, проблема проявляется неопределенно: клиент зависает на сообщении «Подключение к серверу...» и завершается с ошибкой Connection timed out: no further information. Отказа в подключении нет, ошибок сервера нет, в журнале ничего нет, потому что пакеты не дошли до сервера. Проверьте подключение с компьютера вне VPS с помощью nc -vz your.server.ip 25565. Результат succeeded означает, что оба брандмауэра открыты. Зависание означает, что как минимум один из них закрыт.

Пока вы работаете с ufw, учтите, что этот же сервер предоставляет SSH через публичный IP-адрес, а сообщения о переборе паролей начинают появляться в журнале уже через несколько часов. Поэтому заранее настройте Fail2ban для SSH в Ubuntu 24.04.

Теперь подключитесь: Multiplayer, Direct Connection, IP-адрес сервера. Поскольку на шаге 4 вы назначили себе права оператора, внутриигровые команды сразу доступны: /whitelist add FriendName для каждого игрока, /gamemode creative, если это предусмотрено планом.

Шаг 9: список разрешённых игроков, потому что интернет обнаруживает порт 25565

Открытый для интернета сервер Minecraft — это не теоретический риск: массовые сканеры непрерывно проверяют всё пространство IPv4 на наличие порта 25565, проекты любителей гриферства таким способом обнаружили сотни тысяч открытых серверов, а на сервер без списка разрешённых игроков незваные посетители приходят в течение нескольких дней, а иногда и часов. Список разрешённых игроков из шага 5 устраняет этот риск: online-mode=true подтверждает личность, а список разрешённых игроков ограничивает вход выбранными вами пользователями. Вся модель безопасности для сервера друзей сводится к этим двум мерам, и их достаточно.

Для доступа через консоль без запуска игры, создания резервных копий по сценарию и задания cron включите RCON в server.properties (enable-rcon=true, задайте надёжный rcon.password, порт 25575) и соберите небольшой клиент mcrcon из исходного кода GitHub непосредственно на VPS; в репозиториях Ubuntu его нет. Не открывайте порт 25575 в брандмауэре: RCON передаёт пароль в открытом виде, поэтому он должен быть доступен только через loopback-интерфейс.

Шаг 10: резервные копии, которые не повреждают игровой мир

Главное правило: никогда не копируйте каталог мира, пока сервер записывает в него данные. Файлы регионов постоянно перезаписываются во время игры. Если tar одновременно выполняет запись, архив может содержать частично записанные чанки. При восстановлении в критический момент журнал заполнится ошибками загрузки чанков, а в ландшафте появятся пропуски. Этого позволяют избежать два подхода.

Остановить — скопировать — запустить — простой вариант, но он требует минуты простоя:

sudo systemctl stop minecraft
sudo mkdir -p /opt/backups
sudo tar czf /opt/backups/world-$(date +%F-%H%M).tgz \
  -C /opt/minecraft world world_nether world_the_end
sudo systemctl start minecraft

(Paper разделяет измерения на world, world_nether и world_the_end. В vanilla-сервере всё хранится в world, поэтому остальные два каталога следует поместить туда.)

Save-off позволяет создать резервную копию без остановки сервера: через RCON выполните save-off (остановить автоматическое сохранение), затем save-all flush (принудительно записать всё на диск и дождаться завершения), создайте tar-архив, затем выполните save-on. Этот вариант следует добавить в cron на 5 a.m.

В любом случае резервная копия, хранящаяся на том же VPS, что и сервер, резервной копией не является. scp или rclone архивы за пределы сервера и храните несколько копий. Поскольку при сбое вы не будете постоянно смотреть на консоль, настройте внешнюю проверку порта: Uptime Kuma на другом сервере с TCP-проверкой порта 25565 сообщит, что сервер недоступен, раньше игроков.

Плагины и обновления

В Paper установка плагина сводится к копированию jar-файла в /opt/minecraft/plugins/ и перезапуску. Используйте плагины только с официальных страниц их проектов (Hangar, Modrinth, SpigotMC). Причина та же, что и для jar-файла сервера: каждый плагин представляет собой произвольный код, выполняемый от имени пользователя minecraft.

Обновление сервера выполняется так: остановите сервер, создайте резервную копию, замените server.jar сборкой для новой версии Minecraft и запустите сервер. Учтите два момента. Обновление мира необратимо: мир, открытый в новой версии, нельзя открыть в старой. Поэтому резервные копии необходимы и для этой операции. Кроме того, плагины часто начинают поддерживать новую версию Minecraft только через несколько дней или недель после ее выпуска. Поэтому перед обновлением в первый день проверьте совместимость плагинов.

Если вы предпочитаете управлять всем этим в контейнере, задавая фиксацию версии, принятие EULA и параметры памяти через переменные окружения, широко используемый образ itzg/minecraft-server запускает тот же сервер Paper в Docker Compose на вашем VPS с теми же правилами настройки брандмауэра и создания резервных копий.

FAQ

Сколько RAM требуется серверу Minecraft?

2 GB достаточно для ванильного сервера на 2–5 игроков; 4 GB будет достаточно для сервера друзей примерно на десять игроков на Paper с несколькими плагинами; для модпаков и 20 и более игроков требуется 8 GB или больше. Независимо от размера VPS, задавайте -Xmx не более общего объема RAM за вычетом 1 GB: JVM использует память за пределами heap, а превышение этого значения приводит к Error: Could not reserve enough space for object heap или незаметному завершению процесса из-за OOM kill.

Почему мои друзья не могут подключиться к серверу Minecraft?

Зависание клиента с завершением в Connection timed out: no further information почти всегда означает проблему с firewall. Их два: ufw на VPS и сетевой firewall вашего провайдера в панели управления. Порт TCP 25565 должен быть открыт в обоих. Убедитесь, что сервер действительно прослушивает порт, выполнив sudo ss -tlnp | grep 25565 на сервере, а затем проверьте подключение извне с помощью nc -vz your.server.ip 25565.

Следует ли задавать online-mode=false в server.properties?

Нет. При online-mode=false сервер полностью пропускает аутентификацию Mojang. Поэтому любой пользователь может подключиться под любым именем, включая имя оператора, и получить его права. Кроме того, перестают работать скины и стабильные UUID. Единственный корректный вариант использования — за аутентифицирующим proxy, например Velocity, который самостоятельно проверяет игроков. На обычном сервере должно оставаться значение true.

Paper лучше ванильного сервера Minecraft?

Почти для всех — да. Paper — это jar-файл, который загружает ванильные миры, принимает клиентов без изменений, значительно эффективнее обрабатывает сущности и загружает чанки, а также предоставляет экосистему плагинов. Исключение составляют технические redstone-сообщества, которым требуется побитно точное ванильное поведение, поскольку некоторые оптимизации Paper его изменяют. На небольшом VPS эффективность Paper фактически дает дополнительный объем RAM бесплатно.

Как создать резервную копию мира Minecraft без его повреждения?

Никогда не архивируйте каталог мира, пока сервер записывает в него данные. Копирование одновременно с записью region-файла приводит к поврежденным чанкам, которые обнаруживаются только при восстановлении. Остановите сервер, создайте tar-архив каталогов миров и снова запустите сервер. Либо оставьте сервер работающим и используйте save-off, save-all flush, tar и save-on через RCON. Затем переместите архив с VPS.