> Полный список статей есть в [llms.txt](https://docs.f3cloud.com/llms.txt). Markdown-версия есть у каждой страницы, достаточно добавить .md к её адресу. Эта страница в Markdown: [https://docs.f3cloud.com/ru/games/minecraft-server.md](https://docs.f3cloud.com/ru/games/minecraft-server.md).

# Сервер Minecraft на VPS – установка Paper, автозапуск и резервные копии

Как создать сервер Minecraft Java на VPS. Установка Java 25 и ядра Paper на Debian и Ubuntu, принятие EULA, автозапуск через systemd с консолью в screen, открытие порта 25565, белый список, операторы, настройки server.properties и резервные копии мира. Проверено на Debian 12 с Minecraft 26.3.

Свой сервер Minecraft на VPS работает круглосуточно и не зависит от того, включён ли ваш компьютер. Друзья могут заходить в любое время, а вы сами решаете, какие правила, плагины и настройки будут на сервере. В этой статье мы установим сервер для **Minecraft Java Edition** на ядре **Paper**, настроим его автозапуск, откроем порт, добавим игроков в белый список и настроим резервные копии мира. Все шаги мы повторили на тестовом сервере с Debian 12. На момент проверки актуальная версия Minecraft **26.3**, ядро **Paper 26.3**.

***

## Как устроен сервер Minecraft

Сервер Minecraft – это программа на Java. Она хранит мир, обсчитывает всё, что в нём происходит, и рассылает изменения подключённым игрокам. Mojang выпускает официальный сервер, но для собственного сервера обычно берут **Paper**. Это сервер для Java Edition, который создан, чтобы работать заметно быстрее официального, и поддерживает плагины. Игроки заходят на Paper с обычной игрой, никакие моды им ставить не нужно. Чем Paper отличается от других ядер и как ставить плагины, рассказано в статье про [ядра и плагины Minecraft](https://docs.f3cloud.com/ru/games/minecraft-cores-plugins.md).

Главное требование сервера – память. Java заранее выделяет себе объём, который вы указываете при запуске параметром `-Xmx`, и ещё немного сверху для собственных нужд. На нашем сервере с `-Xmx2G` процесс занял 2,4 ГБ. Чем больше игроков, плагинов и прогруженных участков мира, тем больше памяти нужно, поэтому начинать стоит с 2–4 ГБ под игру и при необходимости добавлять.

Второй важный момент – версия Java. Каждая новая версия Minecraft требует всё более новую Java. Для Minecraft 26.1 и новее нужна **Java 25**, а в стандартных репозиториях Debian 12 есть только Java 17. Поэтому Java мы поставим из репозитория Eclipse Adoptium.

> **Только Java Edition.**
>
> Статья про сервер для Minecraft Java Edition, в которую играют на компьютере. Для Bedrock Edition, в которую играют на телефонах и консолях, нужен другой сервер.

***

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

* **Сервер** с Debian 12 или Ubuntu 24.04 и **не меньше 4 ГБ памяти**, например тариф **DE-RZ9-2**. Если сервера ещё нет, закажите его по [инструкции](https://docs.f3cloud.com/ru/client-area/order-vps.md).
* **Подключение по SSH**, например через [Termius](https://docs.f3cloud.com/ru/vps/termius-connection.md). Команды выполняются от имени `root`.
* **Лицензионная Minecraft Java Edition** у вас и у игроков. По умолчанию сервер проверяет аккаунт каждого игрока.

***

## Шаг 1. Установите Java 25

Подключите репозиторий Eclipse Adoptium и установите из него Java 25. Команды одинаковы для Debian и Ubuntu.

```bash
apt install -y wget apt-transport-https gpg
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor | 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" | tee /etc/apt/sources.list.d/adoptium.list
apt update
apt install -y temurin-25-jre
```

Проверьте версию.

```bash
java -version
```

В ответе должна быть строка `openjdk version "25…"`. На нашем сервере установилась версия 25.0.4.1.

***

## Шаг 2. Создайте пользователя и скачайте Paper

Запускать сервер от имени `root` небезопасно. Если через сервер Minecraft или плагин найдут уязвимость, злоумышленник получит полный доступ к VPS. Поэтому создадим для игры отдельного пользователя `minecraft` с папкой `/opt/minecraft`. Подробнее о пользователях рассказано в статье про [пользователей Linux](https://docs.f3cloud.com/ru/linux/linux-users.md).

```bash
useradd -r -m -d /opt/minecraft -s /bin/bash minecraft
apt install -y screen
```

Программа `screen` понадобится, чтобы заходить в консоль сервера, когда он работает в фоне.

Теперь скачайте Paper. Откройте страницу [papermc.io/downloads/paper](https://papermc.io/downloads/paper), скопируйте ссылку на последнюю сборку нужной версии и скачайте файл под именем `paper.jar`. Мы скачивали сборку 209 для Minecraft 26.3.

```bash
cd /opt/minecraft
curl -fsSL -o paper.jar "https://fill-data.papermc.io/v1/objects/0a056c7648cfa0ca8d9b8c833a2bd2e1313ed4f1393a5125dd3444a4ee257e22/paper-26.3-209.jar"
chown minecraft:minecraft paper.jar
```

Последняя команда передаёт файл пользователю `minecraft`, иначе сервер не сможет с ним работать.

***

## Шаг 3. Запустите сервер первый раз

Перейдите в пользователя `minecraft` и запустите сервер вручную.

```bash
su - minecraft
java -Xms2G -Xmx2G -jar paper.jar --nogui
```

При первом запуске Paper скачает файлы игры, создаст настройки и остановится с сообщением **You need to agree to the EULA**. Так сервер просит принять лицензионное соглашение Minecraft.

<figure><img src="https://docs.f3cloud.com/img/minecraft-eula.png" alt="Первый запуск Paper 26.3 на Java 25 и сообщение You need to agree to the EULA"><figcaption><p>Сервер ждёт, пока вы примете лицензию</p></figcaption></figure>

Примите соглашение и запустите сервер снова.

```bash
sed -i 's/eula=false/eula=true/' eula.txt
java -Xms2G -Xmx2G -jar paper.jar --nogui
```

Когда появится строка **Done** и приглашение `>`, сервер готов. На нашем сервере первый запуск вместе с созданием мира занял 12,6 секунды.

<figure><img src="https://docs.f3cloud.com/img/minecraft-server-done.png" alt="Сервер Paper запустился, строка Done (12.586s)! For help, type help"><figcaption><p>Сервер запущен и ждёт команд</p></figcaption></figure>

Остановите сервер командой `stop` в его консоли и вернитесь в `root` командой `exit`. Дальше сервер будет запускаться сам.

***

## Шаг 4. Настройте автозапуск

Чтобы сервер работал в фоне, запускался вместе с VPS и поднимался после сбоя, оформим его как службу systemd. Как устроены службы, подробно рассказано в статье про [systemd](https://docs.f3cloud.com/ru/linux/systemd-services.md).

Сначала создайте скрипт запуска.

```bash
nano /opt/minecraft/start.sh
```

```bash
#!/bin/sh
# Paper с 2 ГБ памяти и параметрами Java, которые рекомендует PaperMC
exec java -Xms2G -Xmx2G -XX:+AlwaysPreTouch -XX:+DisableExplicitGC -XX:+ParallelRefProcEnabled -XX:+PerfDisableSharedMem -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:G1HeapWastePercent=5 -XX:G1MaxNewSizePercent=40 -XX:G1MixedGCCountTarget=4 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1NewSizePercent=30 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:G1ReservePercent=20 -XX:InitiatingHeapOccupancyPercent=15 -XX:MaxGCPauseMillis=200 -XX:MaxTenuringThreshold=1 -XX:SurvivorRatio=32 -jar paper.jar --nogui
```

Значения `-Xms2G -Xmx2G` задают память для игры. Если на сервере больше памяти, увеличьте оба значения, но оставьте системе хотя бы 1–1,5 ГБ.

Затем скрипт остановки. Он отправляет в консоль команду `stop`, чтобы сервер сохранил мир, и ждёт, пока сервер завершится.

```bash
nano /opt/minecraft/stop.sh
```

```bash
#!/bin/sh
# Отправляет команду stop в консоль сервера и ждёт его завершения
screen -p 0 -S minecraft -X stuff "stop$(printf '\r')"
while kill -0 "$MAINPID" 2>/dev/null; do sleep 1; done
```

Сделайте скрипты исполняемыми и создайте службу.

```bash
chmod +x /opt/minecraft/start.sh /opt/minecraft/stop.sh
chown minecraft:minecraft /opt/minecraft/*.sh
nano /etc/systemd/system/minecraft.service
```

```ini
[Unit]
Description=Minecraft server
After=network-online.target
Wants=network-online.target

[Service]
User=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/screen -DmS minecraft /opt/minecraft/start.sh
ExecStop=/opt/minecraft/stop.sh
Restart=always
RestartSec=10
TimeoutStopSec=90

[Install]
WantedBy=multi-user.target
```

Включите автозапуск и запустите сервер.

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

<figure><img src="https://docs.f3cloud.com/img/minecraft-systemd-status.png" alt="systemctl status minecraft, служба active (running), процессы screen и java"><figcaption><p>Служба работает, внутри screen запущена Java</p></figcaption></figure>

Управлять сервером теперь нужно через systemd.

* `systemctl stop minecraft` – сохранить мир и выключить сервер.
* `systemctl restart minecraft` – перезапустить.
* `systemctl start minecraft` – включить.

Мы проверили, что служба поднимает сервер после сбоя. Когда мы принудительно завершили процесс Java, systemd сам запустил сервер заново. Учтите, что из-за этого команда `stop` в консоли игры тоже приводит к перезапуску, а не к выключению. Чтобы выключить сервер, используйте `systemctl stop minecraft`.

***

## Шаг 5. Откройте порт 25565

Игроки подключаются к серверу по порту **25565**. Если на VPS включён брандмауэр UFW, откройте этот порт.

```bash
ufw allow 25565/tcp
```

На нашем сервере до этой команды сервер не был виден снаружи, а после неё сразу появился. Проверить сервер из интернета можно на сайте [mcsrvstat.us](https://mcsrvstat.us), введя IP-адрес VPS. Если сервер в порядке, сайт покажет его версию и число игроков. Подробнее о брандмауэре рассказано в статье про [UFW](https://docs.f3cloud.com/ru/vps/security/firewall.md).

***

## Шаг 6. Добавьте игроков и станьте оператором

В версии 26.3 **белый список включён по умолчанию**. Это значит, что зайти на сервер смогут только те, кого вы в него добавите. Остальные увидят сообщение о том, что их нет в белом списке.

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

```bash
su - minecraft -c "screen -r minecraft"
```

Добавьте себя и друзей в белый список, а себя сделайте оператором, то есть администратором с доступом ко всем командам. Вместо `Steve` укажите ник в игре.

```bash
whitelist add Steve
op Steve
```

<figure><img src="https://docs.f3cloud.com/img/minecraft-console-op.png" alt="Консоль сервера, команды list, op Steve, whitelist on и whitelist add Steve с ответами сервера"><figcaption><p>Игрок добавлен в белый список и стал оператором</p></figcaption></figure>

Чтобы выйти из консоли и оставить сервер работать, нажмите <kbd>Ctrl</kbd> + <kbd>A</kbd>, затем <kbd>D</kbd>. Подробнее о работе с `screen` рассказано в [отдельной статье](https://docs.f3cloud.com/ru/linux/screen-linux-tool.md).

Теперь запустите Minecraft на компьютере, откройте **Сетевая игра** и нажмите **Добавить**. В поле **Адрес сервера** укажите IP-адрес VPS и нажмите **Готово**, затем выберите сервер в списке и нажмите **Подключиться**. Порт можно не писать, если он стандартный. Вместо IP-адреса удобно использовать домен, как это сделать, описано в статье про [привязку домена](https://docs.f3cloud.com/ru/vps/domain-to-vps.md).

***

## Основные настройки server.properties

Настройки сервера хранятся в файле `/opt/minecraft/server.properties`. После изменения перезапустите сервер командой `systemctl restart minecraft`.

| Параметр | По умолчанию | Что означает |
| --- | --- | --- |
| `motd` | A Minecraft Server | Описание сервера в списке серверов игры |
| `max-players` | 20 | Сколько игроков может быть на сервере одновременно |
| `white-list` | true | Пускать только игроков из белого списка |
| `online-mode` | true | Проверять, что у игрока есть лицензионный аккаунт Minecraft |
| `difficulty` | easy | Сложность. Варианты `peaceful`, `easy`, `normal`, `hard` |
| `gamemode` | survival | Режим игры для новых игроков |
| `view-distance` | 10 | На сколько участков мира вокруг игрока сервер отправляет данные |
| `simulation-distance` | 10 | На каком расстоянии от игрока мир живёт, растут растения и двигаются мобы |
| `server-port` | 25565 | Порт сервера |

Если сервер не справляется с нагрузкой, первым делом уменьшите `view-distance` и `simulation-distance`. Тогда сервер держит в памяти и обсчитывает меньшую часть мира вокруг каждого игрока.

> **Не выключайте online-mode без защиты.**
>
> При `online-mode=false` сервер не проверяет аккаунты, и зайти можно под любым ником, в том числе под ником администратора. Не делайте так без плагина авторизации и белого списка.

***

## Резервные копии мира

Мир хранится в папке `/opt/minecraft/world`. Ниже скрипт, который сохраняет мир на диск, упаковывает его в архив в папке `/opt/minecraft/backups` и хранит 7 последних архивов. Игра на время копирования не останавливается.

```bash
nano /opt/minecraft/backup.sh
```

```bash
#!/bin/sh
# Сохраняет мир, архивирует его в /opt/minecraft/backups и хранит 7 последних архивов
cd /opt/minecraft || exit 1
screen -p 0 -S minecraft -X stuff "save-off$(printf "\r")"
screen -p 0 -S minecraft -X stuff "save-all flush$(printf "\r")"
sleep 10
mkdir -p backups
tar -czf "backups/world-$(date +%F-%H%M).tar.gz" world
screen -p 0 -S minecraft -X stuff "save-on$(printf "\r")"
ls -1t backups/world-*.tar.gz | tail -n +8 | xargs -r rm --
```

Сделайте скрипт исполняемым и добавьте его в расписание пользователя `minecraft`, например каждую ночь в 4:00.

```bash
chmod +x /opt/minecraft/backup.sh
chown minecraft:minecraft /opt/minecraft/backup.sh
echo "0 4 * * * /opt/minecraft/backup.sh" | crontab -u minecraft -
```

Мы проверили скрипт и вручную, и по расписанию, оба раза архив появился. Подробнее о расписании рассказано в статье про [cron](https://docs.f3cloud.com/ru/linux/cron-linux.md). Копии на этом же сервере не спасут, если пропадёт сам сервер, поэтому время от времени скачивайте архивы к себе или отправляйте их на другой сервер, например командой [rsync](https://docs.f3cloud.com/ru/linux/rsync-linux.md).

***

## Частые вопросы

<details>

<summary>Minecraft 26.1 and newer requires running the server with Java 25 or above</summary>

Сервер запущен на слишком старой Java. Мы получили это сообщение, когда запустили Paper на Java 17 из стандартного репозитория Debian 12. Установите Java 25, как описано в шаге 1.

<figure><img src="https://docs.f3cloud.com/img/minecraft-java-version-error.png" alt="Ошибка Paper: Minecraft 26.1 and newer requires running the server with Java 25 or above"><figcaption><p>Paper сообщает, какая версия Java нужна</p></figcaption></figure>

</details>

<details>

<summary>You need to agree to the EULA in order to run the server</summary>

Не принято лицензионное соглашение. Откройте файл `eula.txt` в папке сервера и замените `eula=false` на `eula=true`.

</details>

<details>

<summary>Вас нет в белом списке этого сервера!</summary>

Игрока нет в белом списке. Добавьте его командой `whitelist add Ник` в консоли сервера. В английской версии игры сообщение звучит как **You are not white-listed on this server!**

</details>

<details>

<summary>Не удаётся подключиться, время ожидания истекло</summary>

1. Проверьте, что сервер запущен, командой `systemctl status minecraft`.
2. Проверьте, что порт 25565 открыт в брандмауэре, командой `ufw status`.
3. Проверьте сервер на сайте [mcsrvstat.us](https://mcsrvstat.us). Если он там виден, проблема на стороне игрока.

</details>

<details>

<summary>FAILED TO BIND TO PORT</summary>

Порт уже занят. Чаще всего это значит, что сервер уже запущен, например службой systemd, а вы запускаете второй вручную. Мы получили эту ошибку именно так. Остановите лишнюю копию или укажите другой порт в `server-port`.

</details>

<details>

<summary>Клиент несовместим! Используйте 26.3</summary>

Версия игры у игрока не совпадает с версией сервера. Выберите в лаунчере ту же версию, что указана в сообщении.

</details>

***

## Наши ресурсы

**Telegram-канал:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Официальный сайт:** [https://f3cloud.com](https://f3cloud.com/ru)
