Minecraft-сервер на VPS: Paper, Java 25, systemd, память под игроков

Как поднять свой сервер Minecraft на арендованном VPS по документации Paper и Adoptium: Java 25 пакетом Ubuntu или из репозитория Adoptium, стабильная сборка Paper через официальный сервис загрузок, eula и белый список, сколько памяти отдать игре и сколько оставить системе, служба systemd с автозапуском, бэкап и обновление. Ubuntu 24.04, сентябрь 2026.

Что получится и что понадобится

Сервер Paper будет стартовать вместе с VPS, подниматься сам после падения, писать лог в системный журнал и пускать только игроков из белого списка. Paper это ускоренная версия серверной части Minecraft: тот же мир и те же правила, что у ванильного сервера от разработчиков игры, но быстрее и с плагинами, то есть с расширениями, которые добавляют на сервер отдельными файлами. Друзья подключаются к адресу вашего сервера с обычным лицензионным клиентом.

Понадобятся: VPS с Ubuntu 24.04 и хотя бы 4 ГБ памяти, где сделаны первые шаги из инструкции про настройку VPS (пользователь с sudo, ключи, файрвол ufw); ники игроков; полчаса времени. Команды я сверял в сентябре 2026 с документацией Paper (запуск, флаги, обновление, server.properties, сервис загрузок), Adoptium (установка Temurin на Ubuntu) и systemd. На живом сервере пример не прогонялся, поэтому после каждого шага проверяйте вывод, как написано. Адреса и ники в примерах условные.

Про версии. По документации Paper (страница требований обновлена 18 сентября 2026) сборкам 26.1 и новее нужна Java 25, мирам с 1.20 по 1.21.11 хватает Java 21. Если у вас уже есть мир на 1.21.x и вы не хотите переезжать, ставьте Java 21 и Paper 1.21.11, в командах ниже показано, где поменять число. Свежая стабильная сборка на конец сентября это Paper 26.2, у 26.3 пока только тестовые.

Шаг 1. Java 25

Paper 26.x работает на Java 25, и поставить её можно двумя путями. Короткий: в Ubuntu 24.04 нужная версия уже лежит в репозитории обновлений, пакет openjdk-25-jre-headless (headless значит без графических библиотек, серверу они не нужны). Одна команда, а обновления Java потом приходят вместе с остальной системой.

sudo apt update
sudo apt install -y openjdk-25-jre-headless
java -version

Универсальный путь на случай, если в вашей системе такого пакета нет (Debian, другой выпуск Ubuntu) или нужна другая версия: репозиторий Adoptium, где лежат сборки Temurin всех версий Java. Команды из документации Adoptium, блок вставляется целиком.

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-25-jre
java -version

Пакета с окончанием jre хватает: он только запускает программы на Java, а jdk из примера Adoptium ещё и компилирует, серверу это не нужно. В обоих случаях первая строка вывода java -version должна начинаться с openjdk version "25. Для мира на 1.21.x ставьте вместо этого openjdk-21-jre-headless или temurin-21-jre.

Шаг 2. Пользователь, папка и сама сборка Paper

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

sudo adduser --system --group --home /opt/minecraft minecraft
sudo apt install -y curl jq

Сборку берём с официального сервиса загрузок Paper. У него два правила: запрос должен идти с заголовком User-Agent, в котором названа ваша программа и контакт (заголовки по умолчанию у curl и wget под это правило не подходят), и брать надо сборку канала STABLE, тестовые не поддерживаются. Команда ниже находит адрес последней стабильной сборки Paper 26.2, это переписанный пример из документации сервиса.

UA="my-minecraft-server/1.0 (you@example.com)"
URL=$(curl -s -H "User-Agent: $UA" https://fill.papermc.io/v3/projects/paper/versions/26.2/builds | jq -r 'first(.[] | select(.channel == "STABLE") | .downloads."server:default".url)')
echo "$URL"
sudo -u minecraft curl -s -H "User-Agent: $UA" -o /opt/minecraft/paper.jar "$URL"
sudo sha256sum /opt/minecraft/paper.jar

Подставьте свою почту в UA. Команда echo печатает адрес вида fill-data.papermc.io/v1/objects/<длинная строка>/paper-26.2-129.jar. Длинная строка это контрольная сумма sha256 файла, и вывод последней команды должен с ней совпасть. Не совпало или echo напечатал null: файл битый или у версии нет стабильных сборок, качать дальше нельзя. Для 1.21.x замените 26.2 в адресе на 1.21.11. Можно и без консоли: открыть страницу загрузок papermc.io в браузере, скопировать ссылку со сборки и скачать её тем же curl.

Шаг 3. Первый запуск: eula, белый список, оператор

Первый запуск делаем руками, не через службу автозапуска, которую заведём в шаге 5: сервер создаст файлы настроек и сразу выключится, потому что не принято лицензионное соглашение Minecraft. Так задумано.

sudo -u minecraft sh -c 'cd /opt/minecraft && java -Xms1G -Xmx1G -jar paper.jar --nogui'

Через полминуты в папке появятся eula.txt и server.properties. В первом меняем false на true, это и есть согласие с соглашением (его текст лежит на minecraft.net). Во втором включаем белый список: без него на сервер зайдёт любой, кто узнает адрес.

sudo -u minecraft sed -i 's/^eula=false/eula=true/' /opt/minecraft/eula.txt
sudo -u minecraft sed -i 's/^white-list=false/white-list=true/; s/^enforce-whitelist=false/enforce-whitelist=true/' /opt/minecraft/server.properties

Второй запуск снова руками: сервер сгенерирует мир и покажет консоль. Это единственный раз, когда консоль нужна, дальше все команды даёт оператор, игрок с правами администратора, прямо в игре. Дождитесь строки Done и введите по очереди, подставив ники:

sudo -u minecraft sh -c 'cd /opt/minecraft && java -Xms1G -Xmx1G -jar paper.jar --nogui'
whitelist add Ваш_ник
whitelist add Ник_друга
op Ваш_ник
stop

Команда op делает вас оператором: потом добавлять друзей, менять режим и погоду можно будет из чата командой с косой чертой, а не с сервера. По stop сервер сохраняет мир и выходит. Порт по умолчанию 25565, TCP, его надо открыть в файрволе; у некоторых хостеров есть второй файрвол в панели, там тоже.

sudo ufw allow 25565/tcp
sudo ufw status

Строка online-mode=true в server.properties означает проверку аккаунтов через серверы Minecraft: заходят только владельцы лицензии. Не выключайте её ради пиратских клиентов, тогда любой сможет зайти под вашим ником.

Шаг 4. Память: сколько игре, сколько системе

Сервер Minecraft это программа на Java, а Java берёт под игру столько памяти, сколько ей разрешили двумя числами: Xms (сколько занять сразу) и Xmx (потолок). Документация Paper советует ставить их одинаковыми и не отдавать игре всю память машины. Xmx ограничивает кучу, то есть область, где Java держит данные программы, а помимо кучи память нужна самой Java, операционной системе и файловому кэшу. Paper называет запас от 1000 до 1500 МБ и приводит пример: у машины 8 ГБ, ставьте 6500M. Правило нашего пресета то же самое, только грубее: системе около гигабайта, остальное игре. На VPS с 4 ГБ это Xmx3G, с 8 ГБ те самые 6500M.

Сам Paper при этом рекомендует от 6 до 10 ГБ под сервер независимо от числа игроков: сборщик мусора G1, который убирает за игрой, с большой кучей работает ровнее. Для четверых друзей на ванильном мире 3 ГБ кучи живут, и я бы начал с них, но при первых зависаниях на пару секунд подозревать надо память, а не процессор. Нехватка памяти у Java-сервера выглядит не как тормоза, а как внезапный выход процесса, про него есть пункт в разделе с ошибками.

Кроме размера кучи Paper даёт набор флагов Java, известный как флаги Айкара: они настраивают тот же G1 под манеру Minecraft плодить и выбрасывать короткоживущие объекты. Список ниже взят со страницы Aikar's flags без изменений, только память под 4 ГБ. Кладём его в скрипт запуска, чтобы не тащить длинную строку в файл службы.

sudo -u minecraft tee /opt/minecraft/start.sh > /dev/null <<'EOF'
#!/bin/sh
cd /opt/minecraft
exec java -Xms3G -Xmx3G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar paper.jar --nogui
EOF
sudo chmod +x /opt/minecraft/start.sh

Слово exec в начале нужно, чтобы Java заняла место скрипта и systemd видел именно её, а не оболочку-посредника. Сколько памяти на машине вообще, показывает free -m; число в Xmx считайте от него, а не от цифры в тарифе.

Шаг 5. Служба systemd

systemd это управляющий процессами в Ubuntu: он запускает программы при загрузке, следит за ними и перезапускает упавшие. Служба описывается одним файлом. Раздел [Unit] говорит, когда стартовать (после появления сети), [Service] кем и как запускать, [Install] отвечает за автозагрузку.

sudo tee /etc/systemd/system/minecraft.service > /dev/null <<'EOF'
[Unit]
Description=Minecraft server (Paper)
After=network-online.target
Wants=network-online.target

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

[Install]
WantedBy=multi-user.target
EOF

Restart=on-failure, а не always, как у бота из прошлой инструкции: сервер, остановленный командой stop оператора, завершается штатно, и перезапускать его не надо (после первой такой остановки загляните в status: там должно стоять code=exited, status=0). Вылет с ошибкой, убийство по нехватке памяти и встроенный сторожок Minecraft, который прибивает сервер после тика длиннее 60 секунд, дают ненулевой код, после них systemd подождёт 10 секунд и запустит сервер снова. TimeoutStopSec=90 даёт полторы минуты на сохранение мира при остановке: по умолчанию systemd шлёт процессу сигнал завершения, и Java передаёт его серверу, а если тот не уложится в срок, его убьют без сохранения. Две последние строки раздела запрещают процессу повышать права и дают ему отдельный /tmp.

sudo systemctl daemon-reload
sudo systemctl enable --now minecraft
systemctl status minecraft
journalctl -u minecraft -f

В status должно быть active (running), в журнале та же строка Done, что и при ручном запуске. Выход из journalctl по Ctrl+C. Теперь проверьте с клиента: адрес сервера это IP вашего VPS, порт стандартный. Потом остановите службу командой sudo systemctl stop minecraft и посмотрите журнал: перед выходом сервер должен написать про сохранение, а status показать inactive, а не failed. Если так, перезагрузите VPS командой sudo reboot; после загрузки сервер должен ответить клиенту сам, без вашего участия.

Плагины кладутся в папку /opt/minecraft/plugins файлом .jar, после перезапуска службы команда plugins в игре покажет их зелёным. Красный цвет по документации Paper означает, что плагин не загрузился, причина в начале logs/latest.log. Полный лог Paper пишет туда же, в logs/, а в журнал systemd попадает то, что сервер печатает в консоль.

Бэкап, обновление и типичные ошибки

Мир это единственное, что не восстановить, если VPS пропадёт. Документация Paper просит копировать папки миров, файлы настроек сервера, конфиги и jar плагинов и держать копии за несколько дат. Проще всего забирать всю папку сервера при остановленной службе: пауза на минуту ночью игрокам незаметна, а копия гарантированно цельная.

sudo systemctl stop minecraft
sudo tar czf /var/backups/minecraft-$(date +%F).tgz -C /opt minecraft
sudo systemctl start minecraft
ls -lh /var/backups/

Эти четыре строки можно положить в cron, планировщик задач Ubuntu, на ночное время. Архив на том же диске защищает от своей ошибки, но не от потери сервера: скачивайте его к себе командой scp (копирование файлов по SSH) или отправляйте в облачное объектное хранилище вроде S3 хотя бы раз в неделю.

Обновление Paper по документации: сначала бэкап, потом остановить сервер, скачать новую сборку под тем же именем, запустить и смотреть лог. Менять jar у работающего сервера нельзя. Paper просит обновляться хотя бы раз в неделю и отговаривает от автообновления: плагины могут не подружиться с новой сборкой, и лучше быть рядом.

sudo systemctl stop minecraft
UA="my-minecraft-server/1.0 (you@example.com)"
URL=$(curl -s -H "User-Agent: $UA" https://fill.papermc.io/v3/projects/paper/versions/26.2/builds | jq -r 'first(.[] | select(.channel == "STABLE") | .downloads."server:default".url)')
sudo -u minecraft curl -s -H "User-Agent: $UA" -o /opt/minecraft/paper.jar "$URL"
sudo sha256sum /opt/minecraft/paper.jar
sudo systemctl start minecraft
journalctl -u minecraft -f

Строки UA и URL здесь повторены нарочно: переменная URL из шага 2 помнит старую сборку, и без нового запроса вы скачаете тот же файл. При переходе на новую версию Minecraft замените 26.2 в адресе, а перед этим прочитайте, что пишут о совместимости ваши плагины.

UnsupportedClassVersionError и рядом два числа class file version. Старая Java: сборка собрана под 25-ю, а запущена 21-й. Проверьте java -version, для Paper 26.x нужна Temurin 25. Похожее сообщение «Unsupported Java detected» значит то же.

Сервер выключился сразу после старта, в логе предложение прочитать eula.txt. Файл остался с eula=false, вернитесь к шагу 3.

Клиент не подключается, а status показывает running. Порт 25565 закрыт: проверьте sudo ufw status и файрвол в панели хостера. Если клиент пишет про белый список, ника нет в whitelist, добавьте его в игре командой оператора.

Сервер пропадает без ошибок в логе. Смотрите журнал ядра, там остаются записи о процессах, убитых системой: sudo dmesg -T | grep -i killed. Если процесс убит по нехватке памяти, снизьте Xmx на гигабайт или два, как советует Paper, или берите тариф с памятью больше.

status показывает activating (auto-restart) по кругу. Сервер падает сразу после старта, причина в первых строках journalctl -u minecraft -n 100: чаще всего это одна из ошибок выше или опечатка в start.sh.

Лаги при трёх игроках. Прежде чем менять тариф, уменьшите в server.properties view-distance и simulation-distance с 10 по умолчанию, например до 8 и 6: первое задаёт, сколько чанков (столбиков мира 16 на 16 блоков) вокруг игрока сервер отправляет клиенту, второе, в каком радиусе живут и двигаются мобы. Меньше чанков, меньше работы на каждый тик, то есть шаг игрового времени. После правки файла службу надо перезапустить.

Какой сервер под это нужен

Для схемы из этой инструкции хватит 4 ГБ памяти и двух ядер, это минимум нашего пресета для Minecraft; рекомендованная планка там 4 ядра и 8 ГБ, и с ней куча в 6500M совпадает с примером из документации Paper. В нашем каталоге на 28 сентября 2026 в России продаётся 188 Linux-тарифов без видеокарты и без условия о предоплате у 11 провайдеров. С двумя ядрами и 4 ГБ и больше их 126; если оставить только провайдеров, заявляющих защиту от DDoS (публичный игровой сервер её рано или поздно ловит), остаётся 79 у восьми провайдеров, и лишь у 40 из них известна частота ядра, а для Minecraft это главная характеристика процессора. С 8 ГБ и защитой таких 58, цены от 1100 ₽ в месяц. Подборка с фильтром пресета (Россия, от 2 ядер и 4 ГБ, защита от DDoS) собрана в пресете «Аренда сервера Minecraft» в каталоге; тарифов там больше 79, потому что пресет не отсекает конфигурации с видеокартой и цены с условием предоплаты. Карточки ниже показывают самые дешёвые варианты каталога под минимальные требования, защиту от DDoS они не фильтруют, смотрите её на странице провайдера.

инструкцииminecraftjava

Серверы под Minecraft

Linux в России, от 2 vCPU и 4 ГБ памяти: игре достанется около 3 ГБ, системе гигабайт. Защиту от DDoS карточки не фильтруют, смотрите её на странице провайдера.

Коды площадок

RU
— Россия

Цены из каталога, обновляются вместе с ним. Остальные варианты — в каталоге.

Сравнить тарифы VPS

Весь каталог с фильтрами и честной сортировкой — цены обновляются автоматически.

Открыть каталог →