Minecraft Game Server

Материал из darklurker wiki
Перейти к: навигация, поиск

Подготовка

  • Большинство операций требуют root-права (sudo)
  • В мануале используется Ubuntu 18.04

Установка пакетов, необходимых для сборки mcrcon

sudo apt update
sudo apt install git build-essential

Установка Java

  • Требуется версия не ниже Java 8
sudo apt install openjdk-8-jre-headless
java --version

Создание пользователя minecraft

  • В целях безопасности не рекомендуется для всех операции использовать root пользователя, поэтому мы создадим нового пользователя с домашним каталогом по пути /opt/minecraft
sudo useradd -r -m -U -d /opt/minecraft -s /bin/bash minecraft


Установка и запуск сервера Minecraft

Подготовка

  • Все операции мы будем осуществлять под пользователем Minecraft, поэтому переключаемся на него
sudo su - minecraft
  • Создание каталогов для сервера
mkdir -p ~/{backups,tools,server}

Установка mcrcon

  • RCON - протокол, который используется для подключения ко многим игровым серверам, в т.ч. Minecraft.
  • Клонируем репозиторий
cd ~/tools && git clone https://github.com/Tiiffi/mcrcon.git
cd ~/tools/mcrcon
  • Компилируем пакет
gcc -std=gnu11 -pedantic -Wall -Wextra -02 -s -o mcrcon mcrcon.c
  • Если пакет успешно скомпилировался, то мы увидим справку по команде ./mcrcon -h

Загрузка и установка Minecraft Vanilla сервера

  • Актуальную версию сервера можно получить на сайте mojang по ссылке
  • Используя wget загружаем jar-файл сервера
wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar -P ~/server
  • При первом запуске сервер создаст необходимые файлы (рабочая директория остается по пути /opt/minecraft/server)
cd ~/server
java -Xmx1024M -Xms512M -jar server.jar nogui
  • Когда установка будет завершена, мы увидим сообщение о необходимости принять EULA (лицензионное соглашение)
vim eula.txt
eula=true
  • Конфигурация сервера осуществляется в файле server.properties
vim server.properties
rcon.port=25575
rcon.port=your_password
enable_rcon=true

Загрузка и установка Minecraft Forge сервера (для игры с модами)

  • Актуальную версию сервера можно посмотреть по ссылке
  • Используя wget загружаем jar-файл сервера
wget https://storage.yandexcloud.net/akimrx-trash/forge-1.15.2-31.1.0-installer.jar -P ~/server/server-install.jar
  • Запускаем установку сервера
cd ~/server
java -jar server-install.jar --installServer
  • При первом запуске сервер создаст необходимые файлы (рабочая директория остается по пути /opt/minecraft/server)
cd ~/server
mv forge-1.15.2-31.1.0.jar server.jar
java -Xmx1024M -Xms512M -jar server.jar nogui
  • Когда установка будет завершена, мы увидим сообщение о необходимости принять EULA (лицензионное соглашение)
vim eula.txt
eula=true
  • Конфигурация сервера осуществляется в файле server.properties
vim server.properties
rcon.port=25575
rcon.port=your_password
enable_rcon=true
  • Директория для модов находится по пути /opt/minecraft/server/mods
  • Моды не нужно распаковывать из .jar формата, достаточно просто поместить мод.jar в вышеуказанную папку
  • посмотреть моды можно здесь

Вообще, моды это конечно шлак и лучше использовать правильные vanilla на базе bukkit или spigot с плагинами

Включение и автозапуск сервера при старте ОС

  • Операции требуют наличие root-прав, поэтому возвращаемся к основному пользователю.
exit (или комбинация Ctrl+D)
  • Создаем демона для systemd
sudo vim /etc/systemd/system/minecraft.service
  • Добавляем конфигурацию
[Unit]
Description=Minecraft Server
After=network.target

[Service]
User=minecraft
Nice=1
KillMode=none
SuccessExitStatus=0 1
ProtectHome=true
PrivateDevices=true
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xmx1024M -Xms512M -jar server.jar nogui
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 0.0.0.0 -P 25575 -p your-password stop
[Install]
WantedBy=multi-user.target

Не забудьте заменить your-password на ваш пароль, который был указан в server.properties


Важно:

  • Xmx флаг в Java определяет максимальный пул выделенной оперативной памяти серверу
  • Xms флаг в Java определяет начальный пул выделенной оперативной памяти серверу
  • Порт rcon и порт сервера отличаются. Для rcon используется 25575, для подключения к серверу вы будете использовать 25565.


  • После того, как мы описали конфигурацию демона, включим его и добавим в автозагрузку
sudo systemctl daemon-reload
sudo systemctl start minecraft
sudo systemctl enable minecraft
sudo systemctl status minecraft
  • Логи сервера вы можете посмотреть по пути /opt/minecraft/server/logs/latest.log


Настройка сетевого фильтра

  • Разрешаем трафик на порт 25565 для ufw
sudo ufw allow 25565/tcp
  • Если используется только iptables
sudo iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
sudo iptables-save
  • Если нет необходимости в сетевой фильтрации соединений, можете отключить файрвол командой (НЕ РЕКОМЕНДУЮ)
sudo systemctl stop ufw
sudo systemctl disable ufw
sudo iptables -F
sudo iptables-save


Настройка резервных копий

  • Переключаемся на пользователя minecraft
sudo su - minecraft
  • Создадим скрипт для создания бэкапов
vim /opt/minecraft/tools/backup.sh
#!/bin/bash

function rcon {
  /opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p ВАШ RCON ПАРОЛЬ "$1"
}

rcon "save-off"
rcon "save-all"
tar -cvpzf /opt/minecraft/backups/server-$(date +%F_%R).tar.gz /opt/minecraft/server
rcon "save-on"

## Delete older backups
find /opt/minecraft/backups/ -type f -mtime +7 -name '*.gz' -delete

  • Сделаем скрипт исполняемым
chmod +x /opt/minecraft/tools/backup.sh
  • Добавим его в шедулер Cron (бэкапы каждый день в 4:00 утра)
crontab -e
0 4 * * * /opt/minecraft/tools/backup.sh

Восстановление из резервной копии

  • Останавливаем сервер
sudo systemctl stop minecraft
  • Переключаемся на пользователя minecraft
sudo su - minecraft
  • Удаляем старую папку сервера
cd /opt/minecraft
rm -rf server
  • Переходим в папку с бэкапами
cd backups
  • Распаковываем архив
tar -xfvz <archive-name>
  • Перемещаем папку сервера на её родное место
cd opt/minecraft/backups/opt/minecraft/
mv server /opt/minecraft

Доступ к консоли сервера

  • Для удобства можно добавить alias
vim ~/.bash_aliases
alias minecraft-cli="/opt/minecraft/tools/mcrcon/mcrcon -H 0.0.0.0 -p Your-Password -t"


Обновление версии сервера

  • Останавливаем сервер
sudo systemctl stop minecraft
  • Перед обновлением сервера рекомендуется сделать бэкап старой версии, путем переименовывания директории server
cd /opt/minecraft/
mv server server-old
  • Копируем ссылку актуальной версии сервера здесь
  • Используя wget загружаем jar-файл сервера
wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar -P ~/server
  • При первом запуске сервер создаст необходимые файлы (напоминаю, что мы сделали бэкап старой версии)
cd ~/server
java -Xmx1024M -Xms512M -jar server.jar nogui
  • Принимаем EULA
vim eula.txt
eula=true
  • Копируем конфигурацию server.properties из старого бэкапа
rm /opt/minecraft/server/server.properties
cp /opt/minecraft/server-old/server.properties /opt/minecraft/server/server.properties
  • Копируем другие файлы по такому же принципу, если необходимо
  • Запускаем сервер
sudo systemctl start minecraft


Дополнительно

Команды терминала и OP

   /advancement (grant|revoke)
   /ban <targets> [<reason>]
   /ban-ip <target> [<reason>]
   /banlist [ips|players]
   /bossbar (add|get|list|remove|set)
   /clear [<targets>]
   /clone <begin> <end> <destination> [filtered|masked|replace]
   /data (get|merge|modify|remove)
   /datapack (disable|enable|list)
   /debug (report|start|stop)
   /defaultgamemode (adventure|creative|spectator|survival)
   /deop <targets>
   /difficulty [easy|hard|normal|peaceful]
   /effect (clear|give)
   /enchant <targets> <enchantment> [<level>]
   /execute (align|anchored|as|at|facing|if|in|positioned|rotated|run|store|unless)
   /experience (add|query|set)
   /fill <from> <to> <block> [destroy|hollow|keep|outline|replace]
   /forceload (add|query|remove)
   /function <name>
   /gamemode (adventure|creative|spectator|survival)
   /gamerule (announceAdvancements|commandBlockOutput|disableElytraMovementCheck|disableRaids|doDaylightCycle|doEntityDrops|doFireTick|doImmediateRespawn|doInsomnia|doLimitedCrafting|doMobLoot|doMobSpawning|doPatrolSpawning|doTileDrops|doTraderSpawning|doWeatherCycle|drowningDamage|fallDamage|fireDamage|keepInventory|logAdminCommands|maxCommandChainLength|maxEntityCramming|mobGriefing|naturalRegeneration|randomTickSpeed|reducedDebugInfo|sendCommandFeedback|showDeathMessages|spawnRadius|spectatorsGenerateChunks)
   /give <targets> <item> [<count>]
   /help [<command>]
   /kick <targets> [<reason>]
   /kill [<targets>]
   /list [uuids]
   /locate (Buried_Treasure|Desert_Pyramid|EndCity|Fortress|Igloo|Jungle_Pyramid|Mansion|Mineshaft|Monument|Ocean_Ruin|Pillager_Outpost|Shipwreck|Stronghold|Swamp_Hut|Village)
   /loot (give|insert|replace|spawn)
   /me <action>
   /msg <targets> <message>
   /op <targets>
   /pardon <targets>/pardon-ip <target>
   /particle <name> [<pos>]
   /playsound <sound> (ambient|block|hostile|master|music|neutral|player|record|voice|weather)
   /recipe (give|take)
   /reload
   /replaceitem (block|entity)
   /save-all [flush]
   /save-off
   /save-on
   /say <message>
   /schedule (clear|function)
   /scoreboard (objectives|players)
   /seed
   /setblock <pos> <block> [destroy|keep|replace]
   /setidletimeout <minutes>
   /setworldspawn [<pos>]
   /spawnpoint [<targets>]
   /spectate [<target>]
   /stop
   /stopsound <targets> [*|ambient|block|hostile|master|music|neutral|player|record|voice|weather]
   /summon <entity> [<pos>]
   /tag <targets> (add|list|remove)
   /team (add|empty|join|leave|list|modify|remove)
   /teammsg <message>
   /teleport (<destination>|<location>|<targets>)
   /tell -> msg
   /tellraw <targets> <message>
   /time (add|query|set)
   /title <targets> (actionbar|clear|reset|subtitle|times|title)
   /tm -> teammsg
   /tp -> teleport
   /trigger <objective> [add|set]
   /w -> msg
   /weather (clear|rain|thunder)
   /whitelist (add|list|off|on|reload|remove)
   /worldborder (add|center|damage|get|set|warning)
   /xp -> experience