Minecraft в 2026 году: различия между версиями
Новая страница: «= Установка Minecraft Java Server на Ubuntu 24.04 LTS = == Системные требования == '''Минимальная конфигурация''' * CPU: 2 vCPU * RAM: 4 ГБ * Диск: 20 ГБ SSD '''Рекомендуемая конфигурация''' * CPU: 4 vCPU * RAM: 8 ГБ * Диск: 50 ГБ SSD == Обновление системы == Обновляем пакеты операционной системы: <syntaxhig...» |
Artem (обсуждение | вклад) Нет описания правки |
||
| Строка 1: | Строка 1: | ||
= Установка Minecraft Java Server на Ubuntu 24.04 LTS = | <div class="portal-header"> | ||
<div class="portal-title">Minecraft Java Server</div> | |||
<div class="portal-subtitle"> | |||
Установка и эксплуатация выделенного сервера Minecraft на Ubuntu 24.04 LTS | |||
</div> | |||
</div> | |||
<div class="portal-card"> | |||
'''Minecraft Java Server''' — выделенный сервер для Minecraft Java Edition. | |||
В этой статье рассматривается установка сервера на '''Ubuntu 24.04 LTS''' с отдельным системным пользователем, автоматическим запуском через systemd, RCON-управлением и резервным копированием. | |||
Конфигурация подходит для виртуальной машины, физического сервера или LXC-контейнера. | |||
</div> | |||
__TOC__ | |||
== Архитектура == | |||
Базовая схема сервера: | |||
<syntaxhighlight lang="text"> | |||
Игроки | |||
│ | |||
│ TCP :25565 | |||
▼ | |||
┌───────────────┐ | |||
│ Minecraft │ | |||
│ Java Server │ | |||
└───────┬───────┘ | |||
│ | |||
┌────────┴────────┐ | |||
│ │ | |||
▼ ▼ | |||
systemd RCON | |||
│ | |||
▼ | |||
mcrcon | |||
</syntaxhighlight> | |||
В production-конфигурации Minecraft запускается не вручную, а как системная служба. | |||
== Системные требования == | == Системные требования == | ||
{| class="wikitable" | |||
! Параметр | |||
! Минимально | |||
! Рекомендуется | |||
|- | |||
| CPU | |||
| 2 vCPU | |||
| 4+ производительных ядра | |||
|- | |||
| RAM | |||
| 4 ГБ | |||
| 8 ГБ и более | |||
|- | |||
| Диск | |||
| 20 ГБ | |||
| 50+ ГБ SSD | |||
|- | |||
| ОС | |||
| Ubuntu 24.04 LTS | |||
| Ubuntu 24.04 LTS | |||
|- | |||
| Сеть | |||
| 25565/TCP | |||
| Статический IP или NAT | |||
|} | |||
При большой дальности прорисовки, большом количестве игроков или тяжёлых модификациях требования к CPU и RAM могут значительно возрастать. | |||
== Подготовка системы == | |||
Обновляем систему: | |||
= | <syntaxhighlight lang="bash"> | ||
apt update | |||
apt upgrade -y | |||
</syntaxhighlight> | |||
Устанавливаем необходимые инструменты: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
apt | apt install -y \ | ||
wget \ | |||
curl \ | |||
git \ | |||
nano \ | |||
unzip \ | |||
build-essential | |||
</syntaxhighlight> | </syntaxhighlight> | ||
= | Проверяем время и часовой пояс: | ||
<syntaxhighlight lang="bash"> | |||
timedatectl | |||
</syntaxhighlight> | |||
При необходимости: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
timedatectl set-timezone Europe/Moscow | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Установка Java == | |||
Версия Java зависит от версии Minecraft. | |||
Перед установкой рекомендуется проверить требования конкретной версии сервера. | |||
Для современных версий Minecraft обычно используется Java 21: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
apt install openjdk- | apt install -y openjdk-21-jdk | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Проверяем | Проверяем: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 46: | Строка 122: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Пример | Пример: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
openjdk version " | openjdk version "21" | ||
OpenJDK Runtime Environment | OpenJDK Runtime Environment | ||
OpenJDK 64-Bit Server VM | OpenJDK 64-Bit Server VM | ||
</syntaxhighlight> | |||
=== Проверка установленной Java === | |||
Путь до Java: | |||
<syntaxhighlight lang="bash"> | |||
which java | |||
</syntaxhighlight> | |||
Обычно: | |||
<syntaxhighlight lang="text"> | |||
/usr/bin/java | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Создание пользователя Minecraft == | == Создание пользователя Minecraft == | ||
Minecraft не следует запускать от имени root. | |||
Создаём отдельного системного пользователя: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
useradd - | useradd \ | ||
--system \ | |||
--create-home \ | |||
--user-group \ | |||
--home-dir /opt/minecraft \ | |||
--shell /bin/bash \ | |||
minecraft | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Переходим под | Проверяем: | ||
<syntaxhighlight lang="bash"> | |||
id minecraft | |||
</syntaxhighlight> | |||
Переходим под него: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 70: | Строка 172: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== | Домашним каталогом пользователя будет: | ||
<syntaxhighlight lang="text"> | |||
/opt/minecraft | |||
</syntaxhighlight> | |||
== Структура каталогов == | |||
Создаём: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 80: | Строка 188: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Назначение | Структура: | ||
<syntaxhighlight lang="text"> | |||
/opt/minecraft/ | |||
├── server/ | |||
│ ├── server.jar | |||
│ ├── server.properties | |||
│ ├── eula.txt | |||
│ ├── world/ | |||
│ └── logs/ | |||
│ | |||
├── backups/ | |||
│ | |||
└── tools/ | |||
</syntaxhighlight> | |||
Назначение: | |||
* '''server''' — | * '''server''' — сервер Minecraft; | ||
* '''backups''' — резервные копии | * '''backups''' — резервные копии; | ||
* '''tools''' — вспомогательные утилиты | * '''tools''' — вспомогательные утилиты. | ||
== Установка mcrcon == | == Установка mcrcon == | ||
'''mcrcon''' используется для отправки команд Minecraft через RCON. | |||
Клонируем | Клонируем проект: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 96: | Строка 220: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Компилируем | Компилируем: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 103: | Строка 227: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Проверяем | Проверяем: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 109: | Строка 233: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Установка | == Установка Minecraft Server == | ||
Переходим | Переходим: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
cd | cd /opt/minecraft/server | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Актуальный файл '''server.jar''' необходимо скачивать с официального сайта Minecraft/Mojang. | |||
После получения ссылки: | |||
<syntaxhighlight lang="bash"> | |||
wget -O server.jar \ | |||
'https://piston-data.mojang.com/.../server.jar' | |||
</syntaxhighlight> | |||
Проверяем: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ls -lh server.jar | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Первый запуск: | == Первый запуск == | ||
Первый запуск нужен для генерации конфигурации: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
java - | java -Xms2G -Xmx4G -jar server.jar nogui | ||
</syntaxhighlight> | </syntaxhighlight> | ||
После | Сервер остановится, поскольку EULA ещё не принята. | ||
После запуска появятся: | |||
<syntaxhighlight lang="text"> | |||
eula.txt | |||
server.properties | |||
logs/ | |||
</syntaxhighlight> | |||
== Принятие | == Принятие EULA == | ||
Открываем | Открываем: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 141: | Строка 282: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Меняем: | |||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
| Строка 153: | Строка 294: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Сохраняем | Сохраняем файл. | ||
== | == Базовая настройка server.properties == | ||
Открываем | Открываем: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 163: | Строка 304: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Основные параметры: | |||
<syntaxhighlight lang="properties"> | |||
server-port=25565 | |||
max-players=100 | |||
online-mode=true | |||
enable-command-block=false | |||
view-distance=10 | |||
simulation-distance=10 | |||
motd=RAMBA-ART Minecraft Server | |||
</syntaxhighlight> | |||
Для публичного сервера рекомендуется оставлять: | |||
<syntaxhighlight lang="properties"> | |||
online-mode=true | |||
</syntaxhighlight> | |||
Это включает проверку учётных записей Mojang/Microsoft. | |||
== Настройка RCON == | |||
В `server.properties`: | |||
<syntaxhighlight lang="properties"> | <syntaxhighlight lang="properties"> | ||
enable-rcon=true | enable-rcon=true | ||
rcon.port=25575 | rcon.port=25575 | ||
rcon.password= | rcon.password=CHANGE_THIS_PASSWORD | ||
broadcast-rcon-to-ops=true | |||
</syntaxhighlight> | |||
После изменения сервер необходимо перезапустить. | |||
=== Безопасность RCON === | |||
RCON не рекомендуется публиковать напрямую в Интернет. | |||
Предпочтительная схема: | |||
<syntaxhighlight lang="text"> | |||
mcrcon | |||
│ | |||
│ 127.0.0.1:25575 | |||
▼ | |||
Minecraft Server | |||
</syntaxhighlight> | |||
То есть порт `25575` должен использоваться только локально либо через защищённую административную сеть/VPN. | |||
== Проверка ручного запуска == | |||
Запускаем: | |||
<syntaxhighlight lang="bash"> | |||
cd /opt/minecraft/server | |||
java -Xms4G -Xmx6G \ | |||
-jar server.jar \ | |||
nogui | |||
</syntaxhighlight> | |||
Если сервер успешно загрузился, в консоли появится сообщение примерно: | |||
<syntaxhighlight lang="text"> | |||
Done (...)! For help, type "help" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
После проверки останавливаем: | |||
<syntaxhighlight lang="text"> | |||
stop | |||
</syntaxhighlight> | |||
== Создание службы | == Создание systemd-службы == | ||
Выходим из пользователя | Выходим из пользователя Minecraft: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 181: | Строка 390: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Создаём: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 187: | Строка 396: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Содержимое | Содержимое: | ||
<syntaxhighlight lang="ini"> | <syntaxhighlight lang="ini"> | ||
[Unit] | [Unit] | ||
Description=Minecraft Java Server | Description=Minecraft Java Server | ||
After=network.target | After=network-online.target | ||
Wants=network-online.target | |||
[Service] | [Service] | ||
Type=simple | |||
User=minecraft | User=minecraft | ||
Group=minecraft | Group=minecraft | ||
| Строка 200: | Строка 412: | ||
WorkingDirectory=/opt/minecraft/server | WorkingDirectory=/opt/minecraft/server | ||
ExecStart=/usr/bin/java -Xms4G -Xmx6G -jar | ExecStart=/usr/bin/java \ | ||
-Xms4G \ | |||
-Xmx6G \ | |||
-jar /opt/minecraft/server/server.jar \ | |||
nogui | |||
Restart= | Restart=on-failure | ||
RestartSec=10 | RestartSec=10 | ||
SuccessExitStatus=0 143 | |||
LimitNOFILE=65535 | |||
[Install] | [Install] | ||
WantedBy=multi-user.target </syntaxhighlight> | WantedBy=multi-user.target | ||
</syntaxhighlight> | |||
Применяем: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
systemctl daemon-reload | systemctl daemon-reload | ||
systemctl enable minecraft | systemctl enable --now minecraft | ||
</syntaxhighlight> | |||
Проверяем: | |||
<syntaxhighlight lang="bash"> | |||
systemctl status minecraft | |||
</syntaxhighlight> | |||
== Управление сервером == | |||
Запуск: | |||
<syntaxhighlight lang="bash"> | |||
systemctl start minecraft | systemctl start minecraft | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Остановка: | |||
<syntaxhighlight lang="bash"> | |||
systemctl stop minecraft | |||
</syntaxhighlight> | |||
Перезапуск: | |||
<syntaxhighlight lang="bash"> | |||
systemctl restart minecraft | |||
</syntaxhighlight> | |||
Статус: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 227: | Строка 468: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Логи: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
journalctl -u minecraft -f | journalctl -u minecraft -f | ||
</syntaxhighlight> | |||
Последние 100 строк: | |||
<syntaxhighlight lang="bash"> | |||
journalctl -u minecraft -n 100 | |||
</syntaxhighlight> | |||
== Подключение через RCON == | |||
Под пользователем Minecraft: | |||
<syntaxhighlight lang="bash"> | |||
su - minecraft | |||
</syntaxhighlight> | |||
Подключение: | |||
<syntaxhighlight lang="bash"> | |||
/opt/minecraft/tools/mcrcon/mcrcon \ | |||
-H 127.0.0.1 \ | |||
-P 25575 \ | |||
-p 'CHANGE_THIS_PASSWORD' \ | |||
-t | |||
</syntaxhighlight> | |||
После подключения можно выполнять команды сервера: | |||
<syntaxhighlight lang="text"> | |||
list | |||
say Server restart in 5 minutes | |||
save-all | |||
whitelist list | |||
stop | |||
</syntaxhighlight> | |||
Выход из интерактивного режима mcrcon: | |||
<syntaxhighlight lang="text"> | |||
Q | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Настройка Firewall == | == Настройка Firewall == | ||
Для игроков требуется только: | |||
<syntaxhighlight lang="text"> | |||
25565/TCP | |||
</syntaxhighlight> | |||
При использовании UFW: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 241: | Строка 528: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Для | Проверяем: | ||
<syntaxhighlight lang="bash"> | |||
ufw status | |||
</syntaxhighlight> | |||
'''RCON-порт 25575/TCP не следует открывать для всего Интернета.''' | |||
Если сервер находится в LXC или VM под Proxmox, правила можно централизованно управлять через Proxmox Firewall. | |||
== Проверка порта Minecraft == | |||
Проверяем локально: | |||
<syntaxhighlight lang="bash"> | |||
ss -ltnp | grep 25565 | |||
</syntaxhighlight> | |||
Ожидаемый результат: | |||
<syntaxhighlight lang="text"> | |||
LISTEN ... :25565 | |||
</syntaxhighlight> | |||
Также можно проверить процесс: | |||
<syntaxhighlight lang="bash"> | |||
ps aux | grep '[s]erver.jar' | |||
</syntaxhighlight> | |||
== Резервное копирование == | |||
Для корректного backup мира желательно сначала заставить Minecraft записать данные на диск. | |||
Создаём конфигурационный файл для RCON: | |||
<syntaxhighlight lang="bash"> | |||
nano /opt/minecraft/.rcon.env | |||
</syntaxhighlight> | |||
Содержимое: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
RCON_HOST=127.0.0.1 | |||
RCON_PORT=25575 | |||
RCON_PASSWORD='CHANGE_THIS_PASSWORD' | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Ограничиваем доступ: | |||
= | <syntaxhighlight lang="bash"> | ||
chown minecraft:minecraft /opt/minecraft/.rcon.env | |||
chmod 600 /opt/minecraft/.rcon.env | |||
</syntaxhighlight> | |||
Создаём backup-скрипт: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 261: | Строка 593: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
#!/bin/bash | #!/bin/bash | ||
set -e | |||
source /opt/minecraft/.rcon.env | |||
RCON="/opt/minecraft/tools/mcrcon/mcrcon" | RCON="/opt/minecraft/tools/mcrcon/mcrcon" | ||
$ | BACKUP_DIR="/opt/minecraft/backups" | ||
$RCON -H | SERVER_DIR="/opt/minecraft/server" | ||
TIMESTAMP="$(date +%F-%H-%M-%S)" | |||
BACKUP_FILE="${BACKUP_DIR}/minecraft-${TIMESTAMP}.tar.gz" | |||
$RCON \ | |||
-H "$RCON_HOST" \ | |||
-P "$RCON_PORT" \ | |||
-p "$RCON_PASSWORD" \ | |||
"save-off" | |||
$RCON \ | |||
-H "$RCON_HOST" \ | |||
-P "$RCON_PORT" \ | |||
-p "$RCON_PASSWORD" \ | |||
"save-all flush" | |||
tar - | tar \ | ||
--exclude='./logs' \ | |||
-czf "$BACKUP_FILE" \ | |||
-C "$SERVER_DIR" \ | |||
. | |||
$RCON -H | $RCON \ | ||
-H "$RCON_HOST" \ | |||
-P "$RCON_PORT" \ | |||
-p "$RCON_PASSWORD" \ | |||
"save-on" | |||
find | find "$BACKUP_DIR" \ | ||
-type f \ | |||
-name 'minecraft-*.tar.gz' \ | |||
-mtime +7 \ | |||
-delete | |||
</syntaxhighlight> | |||
Делаем | Делаем исполняемым: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
chmod +x /opt/minecraft/tools/backup.sh | chmod +x /opt/minecraft/tools/backup.sh | ||
chown minecraft:minecraft /opt/minecraft/tools/backup.sh | |||
</syntaxhighlight> | |||
Тестируем: | |||
<syntaxhighlight lang="bash"> | |||
su - minecraft -c '/opt/minecraft/tools/backup.sh' | |||
</syntaxhighlight> | |||
Проверяем: | |||
<syntaxhighlight lang="bash"> | |||
ls -lh /opt/minecraft/backups/ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Автоматическое резервное копирование == | ||
Переходим | Переходим: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 288: | Строка 664: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Открываем | Открываем: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
| Строка 294: | Строка 670: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Например, ежедневный backup в 04:00: | |||
<syntaxhighlight lang="cron"> | |||
0 4 * * * /opt/minecraft/tools/backup.sh >> /opt/minecraft/backups/backup.log 2>&1 | |||
</syntaxhighlight> | |||
Проверяем: | |||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
crontab -l | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Обновление Minecraft Server == | |||
Перед обновлением: | |||
# создаём резервную копию; | |||
# останавливаем сервер; | |||
# сохраняем старый `server.jar`; | |||
# устанавливаем новый; | |||
# запускаем сервер; | |||
# проверяем логи и совместимость мира. | |||
Пример: | |||
<syntaxhighlight lang="bash"> | |||
systemctl stop minecraft | |||
cp /opt/minecraft/server/server.jar \ | |||
/opt/minecraft/server/server.jar.old | |||
</syntaxhighlight> | |||
После загрузки нового файла: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
systemctl start minecraft | |||
- | journalctl -u minecraft -f | ||
- | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Проверка ресурсов == | |||
CPU и память: | |||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
top | |||
</syntaxhighlight> | </syntaxhighlight> | ||
= | или: | ||
<syntaxhighlight lang="bash"> | |||
htop | |||
</syntaxhighlight> | |||
Память: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
free -h | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Диск: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
df -h | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Размер мира: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
du -sh /opt/minecraft/server/world* | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Java и Minecraft == | |||
Требования Java меняются вместе с Minecraft. | |||
Общее правило: | |||
{| class="wikitable" | |||
! Minecraft | |||
! Java | |||
|- | |||
| 1.20.5 и новее | |||
| Java 21 | |||
|- | |||
| Старые версии | |||
| Требования зависят от конкретного релиза | |||
|} | |||
Перед обновлением необходимо проверять требования именно для устанавливаемой версии Minecraft. | |||
Не стоит обновлять Java исключительно потому, что появилась более новая версия JDK. | |||
== Типичные проблемы == | |||
=== Сервер не запускается === | |||
Проверяем: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
systemctl status minecraft | systemctl status minecraft | ||
journalctl -u minecraft -n 100 | |||
</syntaxhighlight> | |||
=== Ошибка памяти === | |||
Проверяем: | |||
<syntaxhighlight lang="bash"> | |||
free -h | |||
</syntaxhighlight> | |||
При необходимости уменьшаем: | |||
<syntaxhighlight lang="text"> | |||
-Xmx | |||
</syntaxhighlight> | |||
=== Клиенты не подключаются === | |||
Проверяем: | |||
<syntaxhighlight lang="bash"> | |||
ss -ltnp | grep 25565 | |||
</syntaxhighlight> | |||
Затем: | |||
* Firewall; | |||
* NAT; | |||
* проброс портов; | |||
* публичный IP; | |||
* `server-port`; | |||
* `server-ip`. | |||
Обычно `server-ip` рекомендуется оставлять пустым. | |||
=== RCON не работает === | |||
Проверяем: | |||
<syntaxhighlight lang="bash"> | |||
grep -E 'enable-rcon|rcon.port' \ | |||
/opt/minecraft/server/server.properties | |||
</syntaxhighlight> | </syntaxhighlight> | ||
И: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ss -ltnp | grep 25575 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == Рекомендации == | ||
Для production-сервера рекомендуется: | |||
* запускать Minecraft от отдельного пользователя; | |||
* использовать systemd; | |||
* не открывать RCON в Интернет; | |||
* выполнять ежедневные backup; | |||
* хранить резервные копии вне основного сервера; | |||
* использовать SSD; | |||
* контролировать свободное место; | |||
* регулярно проверять логи; | |||
* делать backup перед обновлением; | |||
* обновлять сервер только после проверки совместимости Java и Minecraft. | |||
== Полезные команды == | |||
{| class="wikitable" | {| class="wikitable" | ||
! | ! Задача | ||
! Команда | |||
|- | |||
| Запуск | |||
| <code>systemctl start minecraft</code> | |||
|- | |||
| Остановка | |||
| <code>systemctl stop minecraft</code> | |||
|- | |||
| Перезапуск | |||
| <code>systemctl restart minecraft</code> | |||
|- | |||
| Статус | |||
| <code>systemctl status minecraft</code> | |||
|- | |||
| Логи | |||
| <code>journalctl -u minecraft -f</code> | |||
|- | |||
| Проверить порт | |||
| <code>ss -ltnp | grep 25565</code> | |||
|- | |||
| Проверить Java | |||
| <code>java -version</code> | |||
|- | |||
| Проверить память | |||
| <code>free -h</code> | |||
|- | |||
| Проверить диск | |||
| <code>df -h</code> | |||
|} | |||
== Итоговая архитектура == | |||
<syntaxhighlight lang="text"> | |||
Minecraft Client | |||
│ | |||
│ TCP :25565 | |||
▼ | |||
┌──────────────────────────┐ | |||
│ Minecraft Server │ | |||
│ │ | |||
│ server.jar │ | |||
└────────────┬─────────────┘ | |||
│ | |||
┌────────────┼────────────┐ | |||
│ │ │ | |||
▼ ▼ ▼ | |||
systemd mcrcon backups | |||
│ | |||
▼ | |||
localhost RCON | |||
</syntaxhighlight> | |||
Такой вариант удобен для постоянной эксплуатации, обновления, диагностики и восстановления сервера. | |||
== См. также == | |||
* [[Proxmox VE]] | |||
* [[Linux]] | |||
* [[Minecraft]] | |||
* [[Резервное копирование]] | |||
* [[Мониторинг]] | |||
== Внешние ссылки == | |||
* [https://www.minecraft.net/ Официальный сайт Minecraft] | |||
* [https://www.minecraft.net/download/server Minecraft Java Server] | |||
* [https://github.com/Tiiffi/mcrcon mcrcon] | |||
[[Категория:Minecraft]] | |||
[[Категория:Linux]] | |||
[[Категория:Ubuntu]] | |||
[[Категория:Игровые серверы]] | |||
[[Категория:Администрирование]] | |||
[[Категория:RAMBA ART]] | |||
Текущая версия от 13:30, 2 сентября 2026
Установка и эксплуатация выделенного сервера Minecraft на Ubuntu 24.04 LTS
Minecraft Java Server — выделенный сервер для Minecraft Java Edition.
В этой статье рассматривается установка сервера на Ubuntu 24.04 LTS с отдельным системным пользователем, автоматическим запуском через systemd, RCON-управлением и резервным копированием.
Конфигурация подходит для виртуальной машины, физического сервера или LXC-контейнера.
Архитектура
Базовая схема сервера:
Игроки
│
│ TCP :25565
▼
┌───────────────┐
│ Minecraft │
│ Java Server │
└───────┬───────┘
│
┌────────┴────────┐
│ │
▼ ▼
systemd RCON
│
▼
mcrcon
В production-конфигурации Minecraft запускается не вручную, а как системная служба.
Системные требования
| Параметр | Минимально | Рекомендуется |
|---|---|---|
| CPU | 2 vCPU | 4+ производительных ядра |
| RAM | 4 ГБ | 8 ГБ и более |
| Диск | 20 ГБ | 50+ ГБ SSD |
| ОС | Ubuntu 24.04 LTS | Ubuntu 24.04 LTS |
| Сеть | 25565/TCP | Статический IP или NAT |
При большой дальности прорисовки, большом количестве игроков или тяжёлых модификациях требования к CPU и RAM могут значительно возрастать.
Подготовка системы
Обновляем систему:
apt update
apt upgrade -y
Устанавливаем необходимые инструменты:
apt install -y \
wget \
curl \
git \
nano \
unzip \
build-essential
Проверяем время и часовой пояс:
timedatectl
При необходимости:
timedatectl set-timezone Europe/Moscow
Установка Java
Версия Java зависит от версии Minecraft.
Перед установкой рекомендуется проверить требования конкретной версии сервера.
Для современных версий Minecraft обычно используется Java 21:
apt install -y openjdk-21-jdk
Проверяем:
java -version
Пример:
openjdk version "21"
OpenJDK Runtime Environment
OpenJDK 64-Bit Server VM
Проверка установленной Java
Путь до Java:
which java
Обычно:
/usr/bin/java
Создание пользователя Minecraft
Minecraft не следует запускать от имени root.
Создаём отдельного системного пользователя:
useradd \
--system \
--create-home \
--user-group \
--home-dir /opt/minecraft \
--shell /bin/bash \
minecraft
Проверяем:
id minecraft
Переходим под него:
su - minecraft
Домашним каталогом пользователя будет:
/opt/minecraft
Структура каталогов
Создаём:
mkdir -p ~/server
mkdir -p ~/backups
mkdir -p ~/tools
Структура:
/opt/minecraft/
├── server/
│ ├── server.jar
│ ├── server.properties
│ ├── eula.txt
│ ├── world/
│ └── logs/
│
├── backups/
│
└── tools/
Назначение:
- server — сервер Minecraft;
- backups — резервные копии;
- tools — вспомогательные утилиты.
Установка mcrcon
mcrcon используется для отправки команд Minecraft через RCON.
Клонируем проект:
git clone https://github.com/Tiiffi/mcrcon.git ~/tools/mcrcon
Компилируем:
cd ~/tools/mcrcon
make
Проверяем:
./mcrcon -v
Установка Minecraft Server
Переходим:
cd /opt/minecraft/server
Актуальный файл server.jar необходимо скачивать с официального сайта Minecraft/Mojang.
После получения ссылки:
wget -O server.jar \
'https://piston-data.mojang.com/.../server.jar'
Проверяем:
ls -lh server.jar
Первый запуск
Первый запуск нужен для генерации конфигурации:
java -Xms2G -Xmx4G -jar server.jar nogui
Сервер остановится, поскольку EULA ещё не принята.
После запуска появятся:
eula.txt
server.properties
logs/
Принятие EULA
Открываем:
nano eula.txt
Меняем:
eula=false
на:
eula=true
Сохраняем файл.
Базовая настройка server.properties
Открываем:
nano server.properties
Основные параметры:
server-port=25565
max-players=100
online-mode=true
enable-command-block=false
view-distance=10
simulation-distance=10
motd=RAMBA-ART Minecraft Server
Для публичного сервера рекомендуется оставлять:
online-mode=true
Это включает проверку учётных записей Mojang/Microsoft.
Настройка RCON
В `server.properties`:
enable-rcon=true
rcon.port=25575
rcon.password=CHANGE_THIS_PASSWORD
broadcast-rcon-to-ops=true
После изменения сервер необходимо перезапустить.
Безопасность RCON
RCON не рекомендуется публиковать напрямую в Интернет.
Предпочтительная схема:
mcrcon
│
│ 127.0.0.1:25575
▼
Minecraft Server
То есть порт `25575` должен использоваться только локально либо через защищённую административную сеть/VPN.
Проверка ручного запуска
Запускаем:
cd /opt/minecraft/server
java -Xms4G -Xmx6G \
-jar server.jar \
nogui
Если сервер успешно загрузился, в консоли появится сообщение примерно:
Done (...)! For help, type "help"
После проверки останавливаем:
stop
Создание systemd-службы
Выходим из пользователя Minecraft:
exit
Создаём:
nano /etc/systemd/system/minecraft.service
Содержимое:
[Unit]
Description=Minecraft Java Server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java \
-Xms4G \
-Xmx6G \
-jar /opt/minecraft/server/server.jar \
nogui
Restart=on-failure
RestartSec=10
SuccessExitStatus=0 143
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
Применяем:
systemctl daemon-reload
systemctl enable --now minecraft
Проверяем:
systemctl status minecraft
Управление сервером
Запуск:
systemctl start minecraft
Остановка:
systemctl stop minecraft
Перезапуск:
systemctl restart minecraft
Статус:
systemctl status minecraft
Логи:
journalctl -u minecraft -f
Последние 100 строк:
journalctl -u minecraft -n 100
Подключение через RCON
Под пользователем Minecraft:
su - minecraft
Подключение:
/opt/minecraft/tools/mcrcon/mcrcon \
-H 127.0.0.1 \
-P 25575 \
-p 'CHANGE_THIS_PASSWORD' \
-t
После подключения можно выполнять команды сервера:
list
say Server restart in 5 minutes
save-all
whitelist list
stop
Выход из интерактивного режима mcrcon:
Q
Настройка Firewall
Для игроков требуется только:
25565/TCP
При использовании UFW:
ufw allow 25565/tcp
Проверяем:
ufw status
RCON-порт 25575/TCP не следует открывать для всего Интернета.
Если сервер находится в LXC или VM под Proxmox, правила можно централизованно управлять через Proxmox Firewall.
Проверка порта Minecraft
Проверяем локально:
ss -ltnp | grep 25565
Ожидаемый результат:
LISTEN ... :25565
Также можно проверить процесс:
ps aux | grep '[s]erver.jar'
Резервное копирование
Для корректного backup мира желательно сначала заставить Minecraft записать данные на диск.
Создаём конфигурационный файл для RCON:
nano /opt/minecraft/.rcon.env
Содержимое:
RCON_HOST=127.0.0.1
RCON_PORT=25575
RCON_PASSWORD='CHANGE_THIS_PASSWORD'
Ограничиваем доступ:
chown minecraft:minecraft /opt/minecraft/.rcon.env
chmod 600 /opt/minecraft/.rcon.env
Создаём backup-скрипт:
nano /opt/minecraft/tools/backup.sh
Содержимое:
#!/bin/bash
set -e
source /opt/minecraft/.rcon.env
RCON="/opt/minecraft/tools/mcrcon/mcrcon"
BACKUP_DIR="/opt/minecraft/backups"
SERVER_DIR="/opt/minecraft/server"
TIMESTAMP="$(date +%F-%H-%M-%S)"
BACKUP_FILE="${BACKUP_DIR}/minecraft-${TIMESTAMP}.tar.gz"
$RCON \
-H "$RCON_HOST" \
-P "$RCON_PORT" \
-p "$RCON_PASSWORD" \
"save-off"
$RCON \
-H "$RCON_HOST" \
-P "$RCON_PORT" \
-p "$RCON_PASSWORD" \
"save-all flush"
tar \
--exclude='./logs' \
-czf "$BACKUP_FILE" \
-C "$SERVER_DIR" \
.
$RCON \
-H "$RCON_HOST" \
-P "$RCON_PORT" \
-p "$RCON_PASSWORD" \
"save-on"
find "$BACKUP_DIR" \
-type f \
-name 'minecraft-*.tar.gz' \
-mtime +7 \
-delete
Делаем исполняемым:
chmod +x /opt/minecraft/tools/backup.sh
chown minecraft:minecraft /opt/minecraft/tools/backup.sh
Тестируем:
su - minecraft -c '/opt/minecraft/tools/backup.sh'
Проверяем:
ls -lh /opt/minecraft/backups/
Автоматическое резервное копирование
Переходим:
su - minecraft
Открываем:
crontab -e
Например, ежедневный backup в 04:00:
0 4 * * * /opt/minecraft/tools/backup.sh >> /opt/minecraft/backups/backup.log 2>&1Проверяем:
crontab -l
Обновление Minecraft Server
Перед обновлением:
- создаём резервную копию;
- останавливаем сервер;
- сохраняем старый `server.jar`;
- устанавливаем новый;
- запускаем сервер;
- проверяем логи и совместимость мира.
Пример:
systemctl stop minecraft
cp /opt/minecraft/server/server.jar \
/opt/minecraft/server/server.jar.old
После загрузки нового файла:
systemctl start minecraft
journalctl -u minecraft -f
Проверка ресурсов
CPU и память:
top
или:
htop
Память:
free -h
Диск:
df -h
Размер мира:
du -sh /opt/minecraft/server/world*
Java и Minecraft
Требования Java меняются вместе с Minecraft.
Общее правило:
| Minecraft | Java |
|---|---|
| 1.20.5 и новее | Java 21 |
| Старые версии | Требования зависят от конкретного релиза |
Перед обновлением необходимо проверять требования именно для устанавливаемой версии Minecraft.
Не стоит обновлять Java исключительно потому, что появилась более новая версия JDK.
Типичные проблемы
Сервер не запускается
Проверяем:
systemctl status minecraft
journalctl -u minecraft -n 100
Ошибка памяти
Проверяем:
free -h
При необходимости уменьшаем:
-Xmx
Клиенты не подключаются
Проверяем:
ss -ltnp | grep 25565
Затем:
- Firewall;
- NAT;
- проброс портов;
- публичный IP;
- `server-port`;
- `server-ip`.
Обычно `server-ip` рекомендуется оставлять пустым.
RCON не работает
Проверяем:
grep -E 'enable-rcon|rcon.port' \
/opt/minecraft/server/server.properties
И:
ss -ltnp | grep 25575
Рекомендации
Для production-сервера рекомендуется:
- запускать Minecraft от отдельного пользователя;
- использовать systemd;
- не открывать RCON в Интернет;
- выполнять ежедневные backup;
- хранить резервные копии вне основного сервера;
- использовать SSD;
- контролировать свободное место;
- регулярно проверять логи;
- делать backup перед обновлением;
- обновлять сервер только после проверки совместимости Java и Minecraft.
Полезные команды
| Задача | Команда |
|---|---|
| Запуск | systemctl start minecraft
|
| Остановка | systemctl stop minecraft
|
| Перезапуск | systemctl restart minecraft
|
| Статус | systemctl status minecraft
|
| Логи | journalctl -u minecraft -f
|
| Проверить порт | grep 25565 |
| Проверить Java | java -version
|
| Проверить память | free -h
|
| Проверить диск | df -h
|
Итоговая архитектура
Minecraft Client
│
│ TCP :25565
▼
┌──────────────────────────┐
│ Minecraft Server │
│ │
│ server.jar │
└────────────┬─────────────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
systemd mcrcon backups
│
▼
localhost RCON
Такой вариант удобен для постоянной эксплуатации, обновления, диагностики и восстановления сервера.