Найти в Дзене
Alladyn

Minecraft сервер на Мини-ПК со статическим адресом

Если вы хотите превратить ваш мини-ПК в постоянный сервер для Minecraft, но не знаете, с чего начать, эта статья для вас. В ней описан процесс настройки Minecraft сервера на мини-ПК с использованием статического IP-адреса. Вы узнаете, как установить необходимые программные пакеты и настроить сервер, чтобы он всегда был доступен для вас и ваших друзей.

В статье рассматривается настройка Minecraft сервера на Мини-ПК ZX01, Intel N5105, 2,9 ГГц, DDR4, 8 ГБ, 512 ГБ, шаг за шагом.

Мини-ПК ZX01
Мини-ПК ZX01

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

Установка Debian 12

Примечание к командам: знак $ - от имени пользователя # - под root

Скачивается минимальный образ, сетевая установка debian 12

Устанавливается минимальная конфигурация, задается пароль root (в этом случае sudo установлен не будет и все последующие настройки производятся в системе без использования sudo), пользователь minecraft, из опций выбираем только ssh

После установки добавляем проприетарные репозитории contrib non-free

$ su -

# sed -i -e '/^deb /{ /contrib non-free/!s/$/ contrib non-free/; }' -e '/^deb-src /{ /contrib non-free/!s/$/ contrib non-free/; }' /etc/apt/sources.list

# apt update && apt upgrade

Поднимаем беспроводную сеть по необходимости одним из двух способов:

1 способ. Используем NetworkManager предварительно установив его:

# apr install cnetworkmanager

# nmtui

Дальше все интуитивно понятно...

-3

2 способ. Прописываем параметры в /etc/network/interfaces:

# nano /etc/network/interfaces

Дописываем данные для беспроводного интерфейса вместе с SSID и PSK. Например:

auto wlan0 #поднимать интерфейс автоматически при старте системы

allow-hotplug wlan0 #автоматически выполнять перезапуск интерфейса при его падении

iface wlan0 inet dhcp #получить адрес по DHCP

wpa-ssid "имя сети"

wpa-psk "пароль"

"auto" подключит интерфейс wlp1s0 при запуске системы. Если этого не требуется, удалить или закомментируйте эту строку.

Сохранить Ctrl+O (либо F3), <Enter>, Закрыть Ctrl+X (либо F2)

Dynamuic DNS

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

Для возможности подключения к серверу с любого хоста, не прибегая к сторонним приложениям, применяется динамический DNS назначающий постоянное доменное имя устройству серверу с динамическим IP-адресом

Используется ресурс FreeDNS если отсутствует поддержка создания DDNS средствами роутера. После регистрации задаем доменное имя третьего уровня тип А

-4

На роутере настраиваем перенаправление портов (пункт Port Forwarding или NAT)

Start Port - 25565, End Port - 25565, IP adress - локальный IP-адрес компьютера (опционально), Protocol - все.

Пример
Пример

Добавляем сервер в DMZ если этого окажется недостаточно.

Проверяем доступность сервера из внешней сети, командой telnet "заданный_адрес" 25565. Если строка стала пустой, все работает.

Настраиваем обновление записи DNS типа A, для чего переходим в меню Dynamic DNS

и открываем quick cron example

-6

Из результирующего файла нам нужны конечные 4-5 строк, которые будут выглядеть примерно так:

# You might need to include this path line in crontab, (or specify full paths) PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin 3,8,13,18,23,28,33,38,43,48,53,58 * * * * sleep 39 ; wget -O - http://freedns.afraid.org/dynamic/update.php?xxx >> /tmp/xxx_mooo_com.log 2>&1 &

Открываем crontab

# crontab -e

и вставляем в конец строчки из quick cron example что позволит обновлять IP-адрес с периодичностью в 5 минут.

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

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

Установка сервера minecraft

Примечание к командам: знак $ - от имени пользователя # - под root

Устанавливаем java 17, wget

# apt update

# apt install default-jre

# apt install wget

Переключаемся на пользователя minecraft и создаем скрытый каталог

# su - minecraft

$ mkdir .server

$ cd ~/.server

Далее переходим к установке сервера в текущий каталог

Необходимую версию можно найти на https://files.minecraftforge.net/net/minecraftforge/forge/

Внимание! Forge для Minecraft версий 1.20.6 и выше требует использования Java 21

Скачиваем нужную версию.

$ wget https://maven.minecraftforge.net/net/minecraftforge/forge/1.20.4-49.1.0/forge-1.20.4-49.1.0-installer.jar

Изменяем права доступа к файлу, делая файл исполняемым.

$ chmod +x forge-1.20.4-49.1.0-installer.jar

Запускаем установщик Forge для Minecraft с опцией --installServer. В результате будет установлен сервер Minecraft

$ java -jar forge-1.20.4-49.1.0-installer.jar --installServer

Если ошибка, пробуем снова и снова.

Вывод "The server installed successfully
You can delete this installer file now if you wish" говорит нам что все установлено и можно удалить инсталляционный файл

Запускаем сервер Minecraft с указанными параметрами памяти, используя Forge, и делаем это без графического интерфейса.

$ java -Xms1024M -Xmx4096M -jar forge-1.20.4-49.1.0-installer.jar nogui

Дописываем nogui в скрипте run.sh

$ sed -i '$ s/$/ nogui/' ~/.server/run.sh

Изменяем параметр в eula.txt

$ bash -c "echo eula=true > eula.txt"

Снова запускаем

$ bash run.sh

После запуска и создания мира останавливаем сервер (stop либо Ctrl+C) и правим server.properties отключая тем самым проверку подлинности через серверы Mojang.

nano server.properties

online-mode: false

Удаляем установочный файл forge-1.20.4-49.1.0-installer.jar

$ rm forge-1.20.4-49.1.0-installer.jar

Автозапуск сервера и работа в screen

Для запуска/остановки сервера создаем скрипт systemd предварительно установив screen.

$ su -

# apt update

# apt install screen

# nano /etc/systemd/system/minecraft.service

Примерная конфигурация:

[Unit]

Description=Minecraft Server

After=network.target

[Service]

WorkingDirectory=/home/minecraft/.server

User=minecraft

Group=minecraft

Restart=on-failure

ExecStart=/usr/bin/screen -DmS minecraft /bin/bash /home/minecraft/.server/run.sh

ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say §c§lПЕРЕЗАГРУЗКА ЧЕРЕЗ 30 СЕКУНД. СОХРАНЕНИЕ ВСЕХ КАРТ..."\015'

ExecStop=/bin/sleep 25

ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say §c§lВНИМАНИЕ! ПЕРЕЗАГРУЗКА ЧЕРЕЗ 5 СЕКУНД."\015'

ExecStop=/bin/sleep 1

ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say §c§l4........"\015'

ExecStop=/bin/sleep 1

ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say §c§l3......"\015'

ExecStop=/bin/sleep 1

ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say §c§l2...."\015'

ExecStop=/bin/sleep 1

ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "say §c§l1.."\015'

ExecStop=/bin/sleep 1

ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff "stop"\015'

[Install]

WantedBy=multi-user.target

Сохранить Ctrl+O (F3), <Enter>, Закрыть Ctrl+X (F2)

Включаем службу Minecraft, чтобы она запускалась при загрузке:

# systemctl daemon-reload

# systemctl enable minecraft

# reboot

Теперь сервер будет автоматически запускаться при загрузке системы и завершать работу при ее выключении. Также можно управлять им (из под root) с помощью команд systemd, таких как systemctl start minecraft, systemctl stop minecraft и systemctl restart minecraft.

Для подключения уже запущенной сессии minecraft используйте screen -x

$ screen -x

Команда screen -x используется для повторного подключения к уже запущенной сессии screen. Это позволяет взаимодействовать с текущей сессией. Чтобы увидеть список всех запущенных сессий screen, используем команду screen -ls, либо who, так мы увидим активные сессии

Что бы отсоединиться от сессии нажимаем Ctrl + A, затем D

Настройка автосохранения backup карты мира

Примечание к командам: знак $ - от имени пользователя # - под root

Для начала подготовим флеш накопитель/microSD отформатировав его в exFAT

Далее создаем каталог для монтирования

$ mkdir /mdia/usb

$ su -

Смотрим список подключенных дисков

# fdisk -l

Смотрим UUID и типы файловой системы устройств

# blkid

Находим из полученного UUID и usb

/dev/sdb1: LABEL="usb" UUID="7FD7-FAC7" BLOCK_SIZE="512" TYPE="exfat" PTTYPE="dos" PARTUUID="f8917405-01"

Создаем запись о накопителе в fstab (переход к очередному параметру через tab, пробелы не используем)

# nano /etc/fstab

Сохранить Ctrl+O (F3), <Enter>, Закрыть Ctrl+X (F2)
Сохранить Ctrl+O (F3), <Enter>, Закрыть Ctrl+X (F2)

Для автоматического выполнения, удаления устаревших версии и остановки/запуска сервера Minecraft, создаем Bash-скрипт и добавляем его в расписание задач cron.

$ nano /home/minecraft/.server/backup.sh

Вставляем строки:

#!/bin/bash

# Путь к каталогу мира сервера Minecraft

WORLD_DIR=/home/minecraft/.server/world

# Путь к флешке (подключенной к серверу)

USB_DIR=/media/usb

# Остановка сервера

systemctl stop minecraft.service

# пауза для завершения работы сервера

sleep 15

# Текущая дата и время для имени архива

current_date=$(date +%Y%m%d_%H%M%S)

# Создание архива резервной копии с доступом для всех

backup_file="$USB_DIR/world_backup_$current_date.tar.gz"

tar -czf $backup_file -C $WORLD_DIR .

# Установка прав доступа для всех на созданный архив

chown minecraft:minecraft $backup_file

chmod 644 $backup_file

# Удаление старых резервных копий (оставить только последние 3)

cd $USB_DIR

ls -t world_backup_*.tar.gz | tail -n +4 | xargs rm -f

# Запуск сервера после создания резервной копии

systemctl start minecraft.service

Сохранить Ctrl+O (F3), <Enter>, Закрыть Ctrl+X (F2)

Делаем скрипт исполняемым

$ chmod +x backup.sh

И задаем задачу в cron для ежедневного запуска в 3:00:

# crontab -e

В открывшемся редакторе добавляем задания в формате:

* * * * * команда
│ │ │ │ │
│ │ │ │ └──── День недели (0 - 7) (где 0 и 7 — это воскресенье)
│ │ │ └────── Месяц (1 - 12)
│ │ └──────── День месяца (1 - 31)
│ └────────── Час (0 - 23)
└──────────── Минута (0 - 59)
Например:

0 3 * * * /home/minecraft/.server/backup.sh

-------------------------------------------------------------

Теперь каждые сутки в 3 часа ночи будет создаваться backup с удалением предыдущих сохранений оставляя только последние 3 копии. В этом момент сервер отправит сообщение в игру что будет перезагружен.