База знаний

Часто задаваемые вопросы, на которые мы уже ответили

Сервер Minecraft

Бокс с Minecraft можно установить из готового образа в Панели управления, но если вам нужны нестандартные ядра или интересно настроить всё самому — вот инструкция по ручной установке Minecraft-сервера на бокс.

Для успешного размещения своего сервера понадобится несколько вещей:

  1. Бокс с объемом оперативной памяти от 2 Гб (больше — лучше)

    Ядра серверов Minecraft очень требовательны к ресурсам системы. В нашей инструкции мы будем использовать ядро Vanilla, но можно использовать и любое другое ядро: разница будет только в настройке уже самого сервера и имени его jar-файла.

    Для подбора подходящего для ваших целей и задумок ядра рекомендуем обратиться на тематические ресурсы и форумы по игре: годы развития комьюнити породили множество различных решений в области создания серверов.

    Инструкция предназначена для боксов с ОC Ubuntu, но по аналогии можно использовать и другую систему. Логика предлагаемого решения от этого не поменяется.

    При создании новых директорий и размещении файлов вы можете использовать любую удобную вам структуру каталогов, главное, не забудьте изменить пути на свои, используя команды из инструкции.

  2. Опционально: пользователь с правами sudo

    В процессе работы мы будем повышать права до суперпользователя с помощью sudo. В первый раз и некоторые последующие, это зависит от интенсивности вашей работы, нужно будет ввести пароль для успешного выполнения команды. Пароль этот — пароль нового созданного пользователя, но не пароль пользователя root.

    Можно работать и под пользователем root, но это менее безопасно.

  3. Любой текстовый редактор на боксе

    Используемый нами редактор vim в процессе изменения файлов можете заменить любым удобным для вас, например, nano. Это никак не повлияет на работу с инструкцией.

Подготовка среды

Установка пакетов Java

Размещение сервера начинаем с подготовки сопровождающего ПО. Первое на очереди — платформа Java, на которой и работает первое и истинное издание Minecraft.

Обновим системные репозитории, чтобы наша система знала о наличии новых пакетов:

sudo apt update

Установим «безголовую» 16-ю версию java без поддержки графических интерфейсов — она идеально подойдет для запуска сервера:

sudo apt install openjdk-16-jre-headless

Дополнительно установим терминальный мультиплексор tmux, который позволяет создавать автономные сессии. — это пригодится для тестирования сервера или его быстрого запуска:


sudo apt install tmux

Теперь, когда сама среда для запуска сервера появилась на боксе, можем двигаться дальше.


Скачивание и размещение сервера

Создаем еще одного пользователя: от его имени уже будет запускаться и работать сам сервер. Делаем это так:

sudo useradd -r -m -U -d /home/minecraft -s /bin/bash minecraft

Этот пользователь будет системным и без пароля: подключиться к боксу по SSH такой пользователь не сможет, скомпрометировать его не получится — это нам и нужно.

Переключимся на него:

sudo su minecraft

Теперь создаем директории для сервера и утилиты mcrcon, которая позволит вам управлять вашим сервером:

mkdir /home/minecraft/server
mkdir /home/minecraft/mcrcon

Перейдем в директорию сервера:

cd /home/minecraft/server

Теперь откроем сайт игры, скопируйте адрес ссылки с названием «minecraft_server.x.xx.x,jar», где x.xx.x — актуальная версия игры. Используем wget, чтобы скачать ядро сервера. Выглядеть это будет примерно так:

wget https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar

Запуск сервера и управление им

1-й способ: Быстрый

Если перед вами стоит задача просто протестировать какую-либо сборку сервера или его работу в целом с тем количеством аппаратных ресурсов, что есть на данный момент, запустить сервер можно просто в tmux.

Все, что в них запущено, будет работать, пока не будет выключен бокс или завершена сессия. При этом от сессии можно будет отключиться, как и от самого бокса: сервер при этом будет работать.

Убедитесь, что в данный момент вы работаете как созданный в предыдущем пункте пользователь и находитесь в директории с файлами сервера. Проверить себя можно командами whoami и pwd соответственно.

Создаем новую сессию tmux:

tmux new

Теперь мы можем приступить к запуску и настройке сервера. Запускаем его такой командой:

java -Xms1024M -Xmx1024M -jar server.jar nogui

Разберем подробнее аргументы, что мы использовали:

  1. Параметры -Xms и -Xmx отвечают за выделенную изначально и максимально доступную память для работы сервера.

    В основном различные ядра серверов требуют не менее 1Гб памяти для фоновой работы. Дополнительная память разнится от используемого ядра и используемых модов и плагинов.

    Максимально доступную серверу память можно увеличить до ~70-80% от объема памяти бокса, если он используется только для размещения сервера, например:

    java -Xms1024M -Xmx1536M -jar server.jar nogui
    Также стоит настроить swap, чтобы случайные или временные всплески потребления памяти не приводили к остановке сервера. В этом случае серверу можно будет разрешить использовать еще больше памяти в параметре -Xmx, что без swap делать не рекомендуем: система и другие утилиты также потребляют ресурсы машины.

    Настройка swap нужна и для первичной генерации мира: это очень ресурсоёмкий процесс.

    Тем не менее целиком и полностью все же полагаться на swap не нужно: это наш вариант «на черный день». Если сервер будет вынужден большое количество данных хранить в swap, работать он будет медленнее.

  2. Параметр -jar нужен для выбора исполняемого файла, в случае с ванильным ядром — server.jar.

  3. Параметр nogui запускает сервер без графического интерфейса: он нам не понадобится.

Определившись с объемом памяти, запускаем сервер.

Первый запуск сервера займет некоторое время и завершится ошибкой, но это вполне нормально:

[16:48:01] [main/ERROR]: Failed to load properties from file: server.properties
[16:48:01] [main/WARN]: Failed to load eula.txt
[16:48:01] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

Это связано с тем, что серверу для работы необходимы два файла: server.properties и eula.txt, которых на момент запуска в его директории не было.

Но это не проблема: при первом запуске сервер создал их автоматически.

Первым делом откроем для редактирования файл eula.txt:

vim eula.txt

Первая строка файла содержит ссылку на лицензионное соглашение игры: ознакомьтесь с ним. Когда вы будете готовы его подтвердить, измените строку «eula=false» на «eula=true», затем сохраните и закройте этот файл.

Второй файл server.properties содержит различные настройки сервера, например, игровой режим или максимальное количество игроков в момент времени. Подробнее о его содержимом можно прочитать на официальной вики.

Настроив сервер, запускаем его:

java -Xms1024M -Xmx1536M -jar server.jar nogui

В нашем случае мы выделили серверу 1Гб памяти на старте и 1536Мб — максимально доступный объем.

Серверу потребуется некоторое время для запуска и прогрузки мира, после этого он отправит сообщение следующего вида:

[18:33:32] [Server thread/INFO]: Done (18.042s)! For help, type "help"

Если вы столкнулись с сообщением «Убито» или «Killed», или сервер в процессе запуска перестал подавать признаки жизни, настройте swap, для первого запуска и генерации мира этого хватит. Если сервер начнет отваливаться уже в процессе игры, лучше повысить объем оперативной памяти для бокса, поскольку со swap он будет работать медленнее.

Выйдем из сессии tmux, не завершая ее и не выключая таким образом сервер, с помощью комбинации клавиш CTRL+B, затем следом D.

Теперь вернемся к нашему основному пользователю с помощью комбинации клавиш CTRL+D и откроем необходимый для сетевой игры порт:

sudo ufw allow 25565/tcp

Для других систем это можно сделать с помощью аналогичных утилит управления файрволом системы. Если вы меняли порт в server.properties, укажите его вместо 25565.

С этого момента сервер запущен и к нему можно подключиться по стандартному порту 25565 или тому, который вы указали в настройках сервера. Управление сервером можно производить прямо из этой же сессии tmux либо добавить вашего игрока в список администраторов и управлять сервером уже из игры.

Чтобы зайти обратно в сессию tmux используйте такую команду:

tmux a

При этом нужно работать от пользователя, которого мы специально создали для запуска сервера, поскольку сессию мы тоже создавали от его имени (su ваш_юзер).

Если сессий несколько и вы попали не туда, делайте так:

tmux ls
tmux a -t номер_сессии

Первая команда покажет все доступные сессии, вторая позволит подключиться к нужной.

2-й способ: Долгосрочный

Этот способ ориентирован на долгую, надежную работу сервера и удобство взаимодействия с ним.

На этом этапе предположим, что вы выполнили предыдущие шаги, в том числе из способа «Быстрый» и смогли получить работающий сервер на своей машине, а теперь ищете способы сделать все красиво.

Вернитесь к основному пользователю с помощью комбинации клавиш CTRL+D, если сейчас вы непрерывно следуете этой инструкции и только что работали с tmux. Если вы уже под основным пользователем — это отлично. Проверить себя можно командой whoami.

Установка утилиты mcrcon

Эта утилита позволит нам подключаться к серверу с бокса и выполнять различные его команды: менять режим игры, время и всякое.

Сначала установим GCC — набор компиляторов для различных языков программирования. Он нам понадобится, чтобы скомпилировать утилиту:

sudo apt install gcc

Перейдем в директорию, которую мы создали специально для утилиты, загрузим и скомпилируем ее:

cd /home/minecraft/mcrcon/
git clone https://github.com/Tiiffi/mcrcon.git ./
gcc -std=gnu11 -pedantic -Wall -Wextra -O2 -s -o mcrcon mcrcon.c

Проверим, что все хорошо:

./mcrcon -v

Если вы увидели на экране примерно следующее, то все действительно хорошо:

mcrcon 0.7.1 (built: Aug 31 2021 19:28:38) - https://github.com/Tiiffi/mcrcon
Bug reports:
tiiffi+mcrcon at gmail
https://github.com/Tiiffi/mcrcon/issues/

Теперь отредактируем файл настроек сервера, чтобы эта утилита в принципе могла к нему подключаться:

sudo vim /home/minecraft/server/server.properties

Интересуют нас следующие изменения:

rcon.port=25575
rcon.password=ваш_пароль
enable-rcon=true

Параметр rcon.port задает порт для подключения к серверу с помощью этой утилиты. Если подключение извне не планируется, что предпочтительно в вопросе безопасности, лучше изменить этот порт на нестандартный и запретить к нему подключаться с помощью файрвола системы или же нашего файрвола.

Значение rcon.password изменим на пароль, с которым вы будете подключаться к серверу.

К тому, как утилитой пользоваться, мы вернемся чуть позже.

Добавление юнита systemd

Systemd — это система управления службами в Linux. С ее помощью можем настроить автоматический запуск сервера вместе с боксом, перезапуск в случае, если что-то пойдет не так.

В плане автономности это гораздо надежнее, чем использовать какой-нибудь терминальный мультиплексор.

Создадим файл нашего сервиса и перейдем к его редактированию:

sudo vim /etc/systemd/system/minecraft.service

Заполним его следующим содержимым:

[Unit]
Description=Minecraft Server
After=network-online.target

[Service]
User=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/usr/bin/java -Xms1024M -Xmx1536M -jar server.jar nogui
ExecStop=/home/minecraft/mcrcon/mcrcon -H 0.0.0.0 -P 25575 -p ваш_пароль stop
Restart=always

[Install]
WantedBy=multi-user.target

В строке, начинающейся с «ExecStart=», не забываем изменить параметры -Xmx и Xms согласно нашим предпочтениям и возможностям. Здесь все так же, как при запуске сервера «Быстрым» способом.

В строке с «ExecStop» меняем порт после ключа -P, если вы его изменяли в файле настроек сервера в параметре rcon.port, а также указываем пароль, который вы задали в файле настроек сервера в rcon.password.

Сохраним и закроем файл, затем сообщим системе, что мы добавили новый сервис:

sudo systemctl daemon-reload

Запускаем сервер, проверяем его статус и включаем автозапуск:

sudo service minecraft start
sudo service minecraft status
sudo systemctl enable minecraft

После выполнения второй команды вы должны заметить в ее выводе надпись «active (running)». Это значит, что все получилось и сервер запущен.

Управление сервером

Подключиться к серверу для управления им с бокса можно с помощью следующей команды:

sudo /home/minecraft/mcrcon/mcrcon -H 0.0.0.0 -P 25575 -p ваш_пароль

Порт после ключа -P аналогичным образом заменяется на тот, что вы указали в rcon.port.

Если вы видите надпись Logged in — вы уже можете управлять вашим сервером, если «Connection refused» – попробуйте подключиться еще раз, убедитесь, что у бокса есть свободные ресурсы.

В консоли будет возможно использовать все стандартные команды сервера. Выйти из нее можно с помощью комбинации клавиш CTRL+C.

Можно передать и единичную команду, например, так:

sudo /home/minecraft/mcrcon/mcrcon -H 0.0.0.0 -P 25575 -p ваш_пароль "time set 0"

Поскольку это не очень удобно, добавим короткий алиас для взаимодействия с сервером таким образом. Откроем файл ~/.bashrc текущего пользователя:

vim ~/.bashrc

В его конце добавим такую строчку:

alias servcontrol="sudo /home/minecraft/mcrcon/mcrcon -H 0.0.0.0 -P 25575 -p ваш_пароль"

Вместо «servcontrol» можете указать любое слово, которое вам будет удобно использовать при передаче команд серверу.

Сохраним и закроем файл, затем применим внесенные изменения:

source ~/.bashrc

Теперь прошлые длинные команды заменены на следующие:

servcontrol
servconrtol "time set 0"

Резервное копирование

Настроим резервное копирование данных сервера, чтобы не потерять ни единого чанка, если что-то пойдет не так.

Переключимся на пользователя для запуска сервера, в нашем случае minecraft:

sudo su minecraft

И создадим директорию для хранения бекапов:

mkdir /home/minecraft/backup

Теперь создадим сам скрипт:

vim /home/minecraft/backup_script.sh

И заполним его следующим содержимым:

#!/bin/bash

# Добавляем функцию mcrcon, чтобы не дублировать команду и не множить сущности
# Порт 25575 аналогичным образом меняем на используемый нами в rcon.port, а ваш_пароль на пароль из rcon.password
function mcrcon {
/home/minecraft/mcrcon/mcrcon -H 0.0.0.0 -P 25575 -p ваш_пароль "$1"
}
# Выключаем автоматическую запись новых изменений на сервере: они на это время встанут в очередь
mcrcon "save-off"
# Пишем все незаписанное на диск
mcrcon "save-all"
# Архивируем и сжимаем наш сервер в отдельный архив
tar -cvpzf /home/minecraft/backup/server-$(date +%F).tar.gz /home/minecraft/server
# Включаем сохранения
mcrcon "save-on"

# Удаляем старые бекапы, оставляя только копии за последние 7 дней
find /home/minecraft/backup/ -type f -ctime +7 -name '*.gz' -delete

Теперь превратив файл в исполняемый:

chmod +x /home/minecraft/backup_script.sh

Запустим его, пока руками:

/home/minecraft/backup_script.sh

Проверим, что архив с файлами создался:

ls -aFo /home/minecraft/backup

И добавим задание в планировщик cron:

crontab -e

Выбираем удобный текстовый редактор и добавляем в конце файла такую строчку:

0 3 * * * /home/minecraft/backup_script.sh

Сохраняем файл. Теперь скрипт будет запускаться каждый день ровно в 3 часа ночи. Время по желанию можно изменить: лучше всего выбрать то время, когда на сервере меньше всего игроков, а в идеале никого нет.

Поскольку чанки игры требуют достаточно много дискового пространства, для хранения бекапов подключите дополнительно дисковое пространство на HDD, IceStorage, или же выгружайте старые бекапы на свой локальный компьютер либо в удаленные хранилища.

На этом моменте — все.

Что мы имеем:

  1. Автозапускаемый и перезапускаемый работающий сервер
  2. Возможность управления им
  3. Создание резервных копий

Оставшаяся работа уже связана с самим сервером игры и его разнообразной настройкой.

Была ли эта инструкция полезной?