MHOSTMHOST

Игровой сервер Minecraft

Свой сервер Minecraft Java Edition — это полный контроль над версией игры, миром и настройками, в отличие от чужих публичных серверов. В этой статье вы поставите на VPS mHost нужную версию Java, скачаете и запустите серверный jar-файл (ванильный или Paper), примете лицензионное соглашение, настроите ключевые параметры и оставите сервер работать постоянно — через systemd или tmux/screen, — открыв порт для друзей.

Что понадобится

  • VPS mHost на Ubuntu 22.04/24.04, Debian 11/12 или AlmaLinux/Rocky Linux 8/9.
  • Доступ по SSH под root либо пользователем с правами sudo.
  • Свободно как минимум ~2 ГБ RAM под сам процесс Java — это комфортный минимум для небольшого ванильного сервера. Для Paper с плагинами или заметным числом игроков стоит взять запас побольше (см. шаг 5).
  • Публичный IP-адрес VPS — это и есть адрес для подключения друзей, отдельный домен не обязателен.
Совет: команды ниже даны с sudo. Если вы уже подключены как root и sudo в системе нет — выполняйте те же команды без префикса sudo.

Шаг 1. Установите Java нужной версии

Каждой линейке версий Minecraft соответствует своя минимальная версия Java — более старая Java просто откажется запускать новый сервер:

  • версии 1.17–1.17.1 — Java 16;
  • версии 1.18–1.20.4 — Java 17;
  • версии 1.20.5–1.21.11 (последняя версия со старой нумерацией 1.x) — Java 21;
  • версии 26.1 и новее (с 2026 года игра перешла на нумерацию «год.дроп», например 26.1, 26.2) — Java 25.
Проверьте: точное требование может измениться с очередным релизом — перед установкой сверьтесь со страницей загрузки для конкретной версии, которую собираетесь ставить: minecraft.net/en-us/download/server для ванильного сервера, papermc.io/downloads/paper для Paper. Java 21 закрывает всю линейку 1.20.5–1.21.x; для самых свежих релизов 2026 года (26.1 и новее) нужна уже Java 25 — команды ниже одинаковы для обеих версий, меняется только номер.

Вариант А: пакет из репозитория дистрибутива

Работает для Java 21 «из коробки» на Ubuntu 22.04/24.04 и AlmaLinux/Rocky Linux 9.

Ubuntu 22.04/24.04:

bash
sudo apt update
sudo apt install -y openjdk-21-jre-headless

AlmaLinux/Rocky Linux 9:

bash
sudo dnf install -y java-21-openjdk-headless
Совет: пакет *-jre-headless — это только среда выполнения Java, без графики и без инструментов JDK для компиляции. Для запуска сервера этого достаточно, устанавливать полный JDK не нужно.

Вариант Б: репозиторий Adoptium (Temurin) — для остальных случаев

Понадобится на Debian 11/12 и AlmaLinux/Rocky Linux 8, где в штатных репозиториях нет даже Java 21, а также если нужна Java 25, а вариант А её ещё не находит (новые версии Java попадают в репозитории дистрибутивов не сразу). Adoptium — официальный проект Eclipse с готовыми сборками OpenJDK; замените 21 на 25 в командах ниже, если нужна именно она.

Debian/Ubuntu (apt):

bash
sudo apt update
sudo apt install -y wget apt-transport-https gpg
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
echo "deb https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print $2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update
sudo apt install -y temurin-21-jre

AlmaLinux/Rocky Linux (dnf):

bash
sudo tee /etc/yum.repos.d/adoptium.repo > /dev/null <<EOF
[Adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/$(. /etc/os-release; echo $ID)/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
EOF
sudo dnf install -y temurin-21-jre

Проверьте установку (любой вариант):

bash
java -version

Вывод должен содержать openjdk version "21... (или "25..., если ставили Java 25).

Готово: java -version показывает нужную версию — можно переходить к загрузке сервера.

Шаг 2. Создайте пользователя, скачайте server.jar

Запускать игровой сервер под root не стоит — заведите отдельного системного пользователя с домашней директорией под сервер:

bash
sudo useradd -r -m -d /opt/minecraft -s /bin/bash minecraft
  • -r — служебная (системная) учётная запись;
  • -m -d /opt/minecraft — создать /opt/minecraft и использовать как домашнюю директорию;
  • -s /bin/bash — обычный shell: понадобится в шаге 6 для варианта с tmux/screen (для systemd тип шелла роли не играет).

Переключитесь на этого пользователя — команды до шага 6 (systemd) выполняются от его имени, и вы автоматически окажетесь в /opt/minecraft:

bash
sudo -iu minecraft

Скачайте jar одного из двух серверов.

Вариант А: vanilla — официальный сервер Mojang

  1. На своём компьютере откройте страницу minecraft.net/en-us/download/server и скопируйте адрес ссылки на серверный jar-файл (правой кнопкой мыши по кнопке загрузки → «Копировать адрес ссылки»).
  2. На VPS, всё ещё от имени minecraft:
bash
curl -L -o server.jar "<URL>"

Вариант Б: Paper — производительная альтернатива с поддержкой плагинов

Paper — форк vanilla-сервера с оптимизациями производительности и поддержкой плагинов Bukkit/Spigot, полностью совместимый с обычным клиентом Minecraft.

  1. Откройте papermc.io/downloads/paper, выберите версию Minecraft и скопируйте ссылку на последнюю сборку (build).
  2. На VPS:
bash
curl -L -o server.jar "<URL>"
Совет: для автоматизации у Paper есть официальный API загрузок (https://fill.papermc.io/v3, документация — https://fill.papermc.io/swagger-ui/), который отдаёт JSON со ссылками на сборки. Для разовой установки проще воспользоваться ссылкой со страницы загрузок, как показано выше.
Проверьте: имя скачанного файла может отличаться от server.jar (например, содержать номер версии и сборки) — переименуйте его, чтобы дальнейшие команды статьи сработали без изменений, например mv paper-*.jar server.jar.

Шаг 3. Примите лицензионное соглашение — eula.txt

Запустите сервер первый раз — он создаст конфигурационные файлы и сразу завершится, потому что лицензия ещё не принята:

bash
java -jar server.jar --nogui

В логе будет примерно:

[...] [ServerMain/ERROR]: Failed to load properties from file: server.properties
[...] You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

Рядом появится файл eula.txt с таким содержимым:

properties
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#<timestamp>
eula=false
Важно: eula=true означает, что вы прочитали и приняли лицензионное соглашение Minecraft от Mojang/Microsoft. Без этого сервер не запустится ни при каких настройках.

Откройте файл и поменяйте false на true:

bash
nano eula.txt
properties
eula=true

Сохраните файл (в nano — Ctrl+O, Enter, затем Ctrl+X).

Шаг 4. Настройте server.properties

Тот же первый запуск создал файл server.properties со значениями по умолчанию:

bash
nano server.properties

Самые важные параметры для первой настройки:

  • server-port (по умолчанию 25565) — TCP-порт сервера. Меняйте, только если знаете зачем, — какой порт укажете здесь, тот и нужно будет открыть в файрволе на шаге 7.
  • difficulty (easy) — сложность мира: peaceful, easy, normal или hard.
  • gamemode (survival) — режим игры по умолчанию: survival, creative, adventure или spectator.
  • max-players (20) — максимум игроков одновременно.
  • motd (A Minecraft Server) — строка, которую игроки видят в списке серверов.
  • white-list (по умолчанию выключен) — включает белый список: заходить смогут только игроки, добавленные командой /whitelist add <name> в консоли сервера.
  • online-mode (true) — сервер проверяет игроков через аккаунты Mojang/Microsoft.
Важно: не выключайте online-mode без крайней необходимости. online-mode=false пускает на сервер кого угодно под любым ником без проверки лицензии — это открывает дорогу читерам и обычно считается небезопасной настройкой.
  • view-distance (10) — сколько чанков вокруг игрока сервер прогружает и передаёт клиенту.
  • simulation-distance (10) — на каком расстоянии от игроков сервер обсчитывает мобов и механики (редстоун и т. п.).
Совет: на VPS с небольшим объёмом RAM/CPU уменьшите view-distance и simulation-distance (например, до 6–8) — это заметно снижает нагрузку почти без потери играбельности.

Пример итоговых строк в файле:

properties
motd=mHost Minecraft server
difficulty=normal
max-players=10
view-distance=8

Сохраните файл так же, как eula.txt.

Шаг 5. Соберите стартовый скрипт: память -Xmx/-Xms

  • -Xms — начальный размер кучи (heap) Java при старте.
  • -Xmx — максимальный размер кучи, который процессу разрешено занять.

Разумно ставить -Xms равным -Xmx — тогда Java сразу выделяет всю память и не тратит время на её увеличение прямо во время игры. Оставьте операционной системе как минимум ~1 ГБ свободной памяти сверх выделенного -Xmx.

Например, на VPS с 4 ГБ RAM для сервера с несколькими игроками разумно выделить 3 ГБ:

-Xms3G -Xmx3G

Для ванильного сервера с несколькими игроками комфортный минимум — от 2 ГБ; для Paper с плагинами или большим числом игроков может понадобиться заметно больше — ориентируйтесь на нагрузку по факту.

Создайте стартовый скрипт start.sh — он пригодится и для systemd, и для tmux/screen (шаг 6):

bash
nano start.sh
bash
#!/bin/sh
cd "$(dirname "$0")"
exec java -Xms3G -Xmx3G -jar server.jar --nogui
Совет: exec в скрипте заменяет процесс шелла процессом Java, а не запускает его как дочерний, — это важно для systemd (шаг 6): он отслеживает и посылает сигналы именно процессу из ExecStart, и без exec это был бы шелл-скрипт, а не сам сервер.

Сделайте скрипт исполняемым и проверьте его вручную:

bash
chmod +x start.sh
./start.sh

Через некоторое время в логе появится строка вида Done (12.345s)! For help, type "help" — сервер запущен и готов принимать подключения. Наберите stop и нажмите Enter, чтобы корректно остановить сервер (мир сохранится) и вернуться в консоль:

stop
Готово: сервер стартует по ./start.sh и корректно останавливается по stop — можно переходить к постоянному запуску.

Шаг 6. Запустите сервер постоянно: systemd или tmux/screen

Пока сервер запущен только вручную в текущей SSH-сессии — он остановится, как только вы отключитесь. Выберите один из двух вариантов, чтобы это исправить.

Вариант А: systemd (рекомендуется)

Управление через systemctl, автозапуск после перезагрузки VPS и автоматический перезапуск при падении. Обратная сторона — без RCON у сервера нет интерактивной консоли: команды в игре подаются только из чата (с правами оператора) или планируются заранее.

Создайте юнит:

bash
sudo nano /etc/systemd/system/minecraft.service
ini
[Unit]
Description=Minecraft Java Edition server
After=network.target

[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/opt/minecraft/start.sh
Restart=on-failure
RestartSec=10
TimeoutStopSec=60

[Install]
WantedBy=multi-user.target
  • Restart=on-failure — автоперезапуск при падении сервера, но не после штатной остановки командой stop/systemctl stop.
  • TimeoutStopSec=60 — сколько секунд ждать корректного завершения перед принудительным убийством процесса. Увеличьте для больших миров — сохранение может занять больше времени.

Включите и запустите:

bash
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
sudo systemctl status minecraft

Смотрите лог сервера через journalctl:

bash
sudo journalctl -u minecraft -f

Останавливайте сервер только так:

bash
sudo systemctl stop minecraft
Совет: systemctl stop посылает процессу сигнал SIGTERM, а у сервера Minecraft (и vanilla, и Paper) на этот сигнал есть встроенный обработчик — он сохраняет мир и корректно завершает работу, в логе это видно по строкам вида Saving worlds / Saving chunks. Проверьте это один раз через journalctl -u minecraft сразу после команды stop — дальше можно останавливать сервер так без опасений.
Важно: не убивайте процесс через kill -9 / systemctl kill -s SIGKILL без крайней необходимости — это пропускает сохранение мира и может повредить данные.

Проверьте автозапуск:

bash
systemctl is-enabled minecraft

Должно быть enabled.

Вариант Б: tmux или screen (нужна живая консоль)

Процесс работает в отсоединяемой (detached) сессии терминала — вы получаете прямой доступ к консоли сервера и можете набирать команды вроде save-all, whitelist add, stop напрямую. Обратная сторона — без дополнительной настройки нет ни автозапуска после перезагрузки, ни автоперезапуска при падении.

Установите tmux, если его ещё нет:

bash
sudo apt install -y tmux   # Ubuntu/Debian
sudo dnf install -y tmux   # AlmaLinux/Rocky Linux

Запустите сессию от имени пользователя minecraft:

bash
sudo -iu minecraft
tmux new -s minecraft
./start.sh

Отсоединитесь от сессии, не останавливая сервер: Ctrl+B, затем D. Вернуться в консоль сервера позже:

bash
sudo -iu minecraft
tmux attach -t minecraft

Чтобы остановить сервер корректно — подключитесь к сессии, наберите stop и нажмите Enter.

Совет: вместо tmux подходит screen — команды аналогичны: screen -S minecraft для создания сессии, Ctrl+A затем D для отсоединения, screen -r minecraft для повторного подключения.
Совет: чтобы сессия tmux с сервером поднималась и после перезагрузки VPS, добавьте пользователю minecraft задание cron на @reboot:
bash
sudo crontab -u minecraft -e

Добавьте строку:

@reboot sleep 30 && /usr/bin/tmux new -d -s minecraft /opt/minecraft/start.sh

Но если нужен именно автозапуск и автоперезапуск при падении «из коробки» — это и есть вариант А (systemd).

Шаг 7. Откройте порт 25565 в файрволе

Клиенты подключаются к серверу по TCP-порту 25565 (или другому, если меняли server-port на шаге 4) — откройте его в файрволе.

Ubuntu/Debian (ufw):

bash
sudo ufw allow 25565/tcp

Подробнее о настройке ufw — в статье «Файрвол ufw».

AlmaLinux/Rocky Linux (firewalld):

bash
sudo firewall-cmd --permanent --add-port=25565/tcp
sudo firewall-cmd --reload
Готово: порт открыт — сервер доступен по адресу <VPS_IP>:25565. Если порт стандартный (25565), в клиенте Minecraft достаточно указать один IP-адрес без порта.

Что дальше

  • Главное, что стоит регулярно бэкапить, — папка world/world_nether/, world_the_end/, если они сгенерированы) внутри /opt/minecraft. Настроить регулярные копии проще всего по статье «Резервное копирование с rsync».
  • Управлять доступом и правами игроков, не заводя им отдельные учётные записи на самом VPS, помогают белый список (white-list + /whitelist add, шаг 4) и права оператора (/op <name> из консоли сервера).
  • Если на VPS запущено несколько сервисов и памяти не хватает — проверьте общую нагрузку через htop / free -h и пересчитайте -Xmx (шаг 5) с учётом остальных процессов.