Если вы хотите превратить ваш мини-ПК в постоянный сервер для Minecraft, но не знаете, с чего начать, эта статья для вас. В ней описан процесс настройки Minecraft сервера на мини-ПК с использованием статического IP-адреса. Вы узнаете, как установить необходимые программные пакеты и настроить сервер, чтобы он всегда был доступен для вас и ваших друзей.
В статье рассматривается настройка Minecraft сервера на Мини-ПК ZX01, Intel N5105, 2,9 ГГц, DDR4, 8 ГБ, 512 ГБ, шаг за шагом.
Эта статья будет полезна как новичкам, так и опытным пользователям, стремящимся настроить надежный 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
Дальше все интуитивно понятно...
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 средствами роутера. После регистрации задаем доменное имя третьего уровня тип А
На роутере настраиваем перенаправление портов (пункт Port Forwarding или NAT)
Start Port - 25565, End Port - 25565, IP adress - локальный IP-адрес компьютера (опционально), Protocol - все.
Добавляем сервер в DMZ если этого окажется недостаточно.
Проверяем доступность сервера из внешней сети, командой telnet "заданный_адрес" 25565. Если строка стала пустой, все работает.
Настраиваем обновление записи DNS типа A, для чего переходим в меню Dynamic DNS
и открываем quick cron example
Из результирующего файла нам нужны конечные 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
Скачиваем нужную версию.
Изменяем права доступа к файлу, делая файл исполняемым.
$ 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
Для автоматического выполнения, удаления устаревших версии и остановки/запуска сервера 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 копии. В этом момент сервер отправит сообщение в игру что будет перезагружен.