Minecraft (от англ. mine — «шахта; добывать» + craft — «ремесло; создавать») — игра в жанре песочницы, схожая с конструктором LEGO. Самая продаваемая компьютерная игра в мире.
В данной статье мы рассмотрим установку и настройку сервера Minecraft версии 1.21.1 на базе официального ядра на VDS.
Создаем облачный VDS. Мы рекомендуем выбрать тариф Medium или выше. В качестве образа мы будем использовать чистый Debian 12 Bookworm.
1.1. Получаем доступ к терминалу VDS через личный кабинет или по SSH, воспользовавшись любым удобным SSH-клиентом, и обновляем список пакетов:
apt update
2.1. Устанавливаем утилиту screen
ПО из стандартных репозиториев Debian (её назначение будет описываться позже):
apt install -y screen
2.2. Устанавилваем Java. Отметим важный момент, что Minecraft 1.21.1 поддерживает Java 21 и выше, однако в стандартных репозиториях Debian имеется только Java 17, поэтому нам потребуется добавить в систему дополнительный репозиторий, в котором имеется необходимая версия Java. Мы будем добавлять репозторий Adoptium по инструкции на их сайте. Из данной инструкции мы введем следующие команды:
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
2.3. После завершения работы этих команд нам будет доступен пакет temurin-21-jre, то есть Java 21. Устанавливаем его:
apt install -y temurin-21-jre
2.4. Проверяем версию Java:
java --version
Вывод этой команды должен быть примерно следующий:
openjdk 21.0.4 2024-07-16 LTS
OpenJDK Runtime Environment Temurin-21.0.4+7 (build 21.0.4+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.4+7 (build 21.0.4+7-LTS, mixed mode, sharing)
Установка Java в систему завершена.
3.1. Создаем пользователя. В целях безопасности мы будем запускать сервер под отдельным непривилегированным пользователем. Называем его minecraft
и в качестве домашней директории указываем ему /srv/minecraft
:
adduser minecraft --gecos "" --home=/srv/minecraft
Указываем пароль и нажимаем Enter
, после чего создание пользователя завершится.
3.2. Входим в систему как пользователь minecraft
:
su - minecraft
3.3. В домашней директории данного пользователя создаем дополнительную директорию нашего сервера, где будут размещаться его файлы (ядро, игровой мир, конфигурация), называем её, например, server
, затем переходим в нее:
mkdir ~/server
cd ~/server
3.4. По ссылке, взятой на странице официального сайта Minecraft, скачиваем ядро, в нашем случае это ядро для сервера Minecraft версии 1.21.1:
wget https://piston-data.mojang.com/v1/objects/59353fb40c36d304f2035d51e7d6e6baa98dc05c/server.jar
Теперь можно запустить сервер. Это необходимо для генерации структуры сервера: стандартных конфигов и игрового мира, а также некоторых технических файлов.
4.1. Стартуем:
java -Xmx1024M -Xms1024M -jar server.jar nogui
При первом запуске мы можем столкнуться со следующей ошибкой в самом низу вывода команды:
[10:18:24] [ServerMain/WARN]: Failed to load eula.txt
[10:18:24] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
Это нормально. Нас просят принять соглашение EULA. Для нас уже создали файл eula.txt, где нам достаточно изменить значение с eula=false
на eula=true
. Перезаписываем данный файл, отправив в него строку eula=true
:
echo 'eula=true' > eula.txt
Теперь запускаем сервер еще раз. Вывод должен быть примерно следующим:
Starting net.minecraft.server.Main
[10:34:59] [ServerMain/INFO]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[10:35:00] [ServerMain/INFO]: No existing world data, creating new world
[10:35:01] [ServerMain/INFO]: Loaded 1290 recipes
[10:35:02] [ServerMain/INFO]: Loaded 1399 advancements
[10:35:02] [Server thread/INFO]: Starting minecraft server version 1.21.1
[10:35:02] [Server thread/INFO]: Loading properties
[10:35:02] [Server thread/INFO]: Default game type: SURVIVAL
[10:35:02] [Server thread/INFO]: Generating keypair
[10:35:02] [Server thread/INFO]: Starting Minecraft server on *:25565
[10:35:03] [Server thread/INFO]: Using epoll channel type
[10:35:03] [Server thread/INFO]: Preparing level "world"
[10:35:10] [Server thread/INFO]: Preparing start region for dimension minecraft:overworld
[10:35:10] [Worker-Main-1/INFO]: Preparing spawn area: 2%
[10:35:10] [Worker-Main-3/INFO]: Preparing spawn area: 2%
[10:35:11] [Worker-Main-1/INFO]: Preparing spawn area: 2%
[10:35:11] [Worker-Main-1/INFO]: Preparing spawn area: 2%
[10:35:12] [Worker-Main-3/INFO]: Preparing spawn area: 18%
[10:35:12] [Worker-Main-3/INFO]: Preparing spawn area: 18%
[10:35:13] [Worker-Main-2/INFO]: Preparing spawn area: 26%
[10:35:13] [Worker-Main-1/INFO]: Preparing spawn area: 51%
[10:35:14] [Worker-Main-2/INFO]: Preparing spawn area: 51%
[10:35:14] [Worker-Main-1/INFO]: Preparing spawn area: 51%
[10:35:15] [Server thread/INFO]: Time elapsed: 4752 ms
[10:35:15] [Server thread/INFO]: Done (11.882s)! For help, type "help"
Здесь мы загрузились в интерактивную командную оболочку сервера Minecraft, в ней мы можем вводить команды. Посмотреть список доступных команд можно, введя команду help
:
help
[10:37:21] [Server thread/INFO]: /advancement (grant|revoke)
[10:37:21] [Server thread/INFO]: /attribute <target> <attribute> (get|base|modifier)
[10:37:21] [Server thread/INFO]: /execute (run|if|unless|as|at|store|positioned|rotated|facing|align|anchored|in|summon|on)
[10:37:21] [Server thread/INFO]: /bossbar (add|remove|list|set|get)
[10:37:21] [Server thread/INFO]: /clear [<targets>]
[10:37:21] [Server thread/INFO]: /clone (<begin>|from)
[10:37:21] [Server thread/INFO]: /damage <target> <amount> [<damageType>]
[10:37:21] [Server thread/INFO]: /data (merge|get|remove|modify)
[10:37:21] [Server thread/INFO]: /datapack (enable|disable|list)
[10:37:21] [Server thread/INFO]: /debug (start|stop|function)
[10:37:21] [Server thread/INFO]: /defaultgamemode <gamemode>
...
Прямо из этой оболочки мы можем, например, включить дождь в игровом мире командой weather rain
или установить игроку статус оператора командой op <никнейм_игрока>
. Более детальное описание на русском языке всех доступных команд, а также их синтаксис, можно посмотреть на сайте Minecraft.wiki.
Теперь мы можем остановить сервер, введя команду stop
. Вывод ее будет примерно следующий:
stop
[10:42:49] [Server thread/INFO]: Stopping the server
[10:42:49] [Server thread/INFO]: Stopping server
[10:42:49] [Server thread/INFO]: Saving players
[10:42:49] [Server thread/INFO]: Saving worlds
[10:42:50] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:overworld
[10:42:50] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_end
[10:42:50] [Server thread/INFO]: Saving chunks for level 'ServerLevel[world]'/minecraft:the_nether
[10:42:50] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): All chunks are saved
[10:42:50] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): All chunks are saved
[10:42:50] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): All chunks are saved
[10:42:50] [Server thread/INFO]: ThreadedAnvilChunkStorage: All dimensions are saved
После того, как мы убедились, что все работает, нам следует разобраться, как сделать так, чтобы сервер оставался запущенным, даже если мы закроем терминал, то есть оборвем интерактивную сессию с командной оболочкой VDS. Чтобы сервер продолжал работать в фоновом режиме без необходимости держать терминал открытым, но при этом была доступна интрекативная командная оболочка сервера Minecraft, нам потребуется воспользоваться утилитой screen
.
4.2. Создаем сессию screen
и называем её server
:
screen -S server
Эта команда также забросит нас в только что созданную сессию. Теперь запускаем сервер также, как мы делали это ранее.
Как можно заметить, визуально все примерно также. Однако теперь мы можем выйти из интерактивной сессии сервера Minecraft, не выключая его, для этого нужно нажать клавиши CTRL+A
, затем D
.
4.3. Чтобы вернуться в интерактивную сессию сервера Minecraft, потребуется ввести следующую команду:
screen -x server
С запуском сервера Minecraft в фоновом режиме мы разобрались.
Чтобы сервер Minecraft запускался автоматически при запуске VDS, нам потребуется настроить сервис systemd
.
5.1. Сначала удаляем созданную ранее сессию screen
:
screen -X -S server quit
5.2. Теперь выходим из оболочки пользователя minecraft
:
exit
После чего нас должно вернуть в оболочку пользователя root
.
5.3. Создаем файл сервиса systemd
, называем его minecraft@.service
и записываем в нем директивы соответствующим образом. Сделать это можно, введя в терминал следующее:
cat > /etc/systemd/system/minecraft@.service << EOF
[Unit]
Description=A Minecraft server
After=network.target
[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/srv/minecraft/%i
ExecStart=/usr/bin/screen -DmS %i /usr/bin/java -Xmx1024M -Xms1024M -jar /srv/minecraft/%i/server.jar nogui
ExecStop=/usr/bin/screen -S %i -X eval 'stuff "stop\015"'
SuccessExitStatus=143
Restart=always
RestartSec=5
ProtectHome=yes
ProtectSystem=full
PrivateDevices=yes
PrivateTmp=yes
[Install]
WantedBy=multi-user.target
EOF
Эта команда создаст файл и запишет в него содержимое, заключенное между двумя EOF
.
5.4. Включаем автоматический старт данного сервиса и запускаем его:
systemctl enable minecraft@server
systemctl start minecraft@server
В течение нескольких секунд сервер Minecraft должен запуститься.
5.5. Теперь мы можем войти в интерактивную сессию сервера Minecraft, которая была создана сервисом systemd
. Для этого снова заходим в оболочку пользователя minecraft
:
su - minecraft
И входим в сессию screen
:
screen -x server
6.1. Сейчас вы можете попробовать подключиться к серверу Minecraft. Для этого следует зайти в клиент Minecraft, нажать на кнопку Сетевая игра -> Прямое подключение, затем вставить в поле IP-адрес нашей VDS и нажать Подключиться.
6.2. Если при подключении вместо загрузки мира вы видите текст, связанный с аутентификацией или недействительной сессией, то, скорее всего, ваш клиент нелицензионный. Для решения ситуации на сервере следует разрешить вход с нелицензионных клиентов, сделать это можно, заменив в файле /srv/minecraft/server/server.properties
строку online-mode=true
на online-mode=false
. Выходим из сессии screen
и производим замену следующей командой:
sed -i 's/^online-mode=true/online-mode=false/' /srv/minecraft/server/server.properties
6.3. Затем перезапускаем сервер Minecraft, снова войдя в его интерактивную оболочку через screen -x server
и введя в ней команду stop
. Согласно директиве RestartSec=5
в файле описанного выше сервиса, сервер будет автоматически запущен через 5 секунд. После истечения данного времени вы можете попробовать подключиться к серверу снова.
7.1. Чтобы корректно остановить сервер, от пользователя root
потребуется ввести следующую команду:
systemctl stop minecraft@server
7.2. А для отключения автозапуска:
systemctl disable minecraft@server
Готово! Настройка сервера Minecraft на VDS завершена. Приглашайте друзей для совместной игры и приятного времяпрепровождения!