Saját (modolt) Minecraft Szerver üzemeltetés [alapok]

A napokban merült fel az ötlet, hogy újra nekikezdünk egy szervernek. Mivel a kinézett modpacknek nincs hivatalos szerver oldali csomagja, így azt is el kellett készíteni, erre majd egy későbbi cikkben térek ki.

Valamint, mivel egyes MC szerver hostingok igencsak sok megkötéssel járnak, arra jutottam, hogy ahogyan régen is, most is saját infrastruktúrán fog futni.

Előfeltételek

  • (esetünkben) CentOS 7-et futtató (akár fizikai, akár virtuális) szerver, publikus (hogy fix legyen, nem feltétel) IP címmel
  • egy user sudo jogokkal
  • egy user aminek a nevében futni fog a szerver (sose használjuk kifejezetten a rott usert, biztonsági okokból nem ajánlott)
  • mcrcon aminek a segítségével eléljük a Minecraft szerver konzolját
  • git
  • “Development Tools” csomag
  • Java
  • valamint maga a modpack

Szükséges csomagok telepítése

Java

Minecraft futtatásához Java 8 vagy frissebb verzióra van szükségünk. Valamint mivel a szerveren nekünk nincs szükségünk grafikus felületre így a headless verziót telepítjük méghozzá az openjdk-ból. Már csak azért is jó megoldás ez, hisz ebben a verzióban kevesebb a függőség így kevesebb erőforrást fog nekünk elpazarolni. Ennek telepítése igen csak egyszerű:

$ sudo yum install java-1.8.0-openjdk-headless

mcrcon “függőségek”

$ sudo yum install git
$ sudo yum install "Development Tools"

Ellenörzések

Ellenőrizzük le, hogy valóban feltelepültek a szükséges csomagok:

$ java -version
openjdk version "1.8.0_221"
...
$ git --version
git version 1.8.3.1
$ gcc -v
...
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)

Környezet kialakítás

Minecraft felhasználó létrehozása

A service ennek a nevében fog futni, ezért létrehozunk egy rendszerfelhasználót és egy csoportot minecraft néven. A home könyvtára pedig a /opt/minecraft könyvtár lesz.

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

Ennek a felhasználónak nem kel jelszót megadnunk, hisz nem fogunk belépni vele SSH-n keresztül, így arra nem is adunk neki jogot. Amennyiben átszeretnénk váltani erre a felhasználóra, akkor szükségünk lesz vagy a root felhasználóra (ezt inkább kerüljük), vagy egy sudo joggal rendelkező felhasználóra.

Most váltsunk is át rá, ugyanis a következő lépéseket a nevében fogjuk végrehajtani.

$ sudo su - minecraft

Könyvtárszerkezet kialakítása

A felhasználó home könyvtárában hozzunk létra 3 könyvtárat, annak érdekében, hogy átláthatóan és struktúráltan tudjuk a szükséges fájlokat és csomagokat elhelyezni. A későbbiekben majd létrehozunk még párat, de az alapokhoz ennyi elegendő lesz.

$ mkdir -p ~/{backups,tools,server}
  • A backup könyvtárba fognak kerülni a szerverről készült biztonsági mentések. Ezt a későbbiekben tudjuk majd szinkronizálni egy távoli backup szerverrel.
  • A tools könyvtárba kerülnek a minden féle script-jeink (jelenleg még csak az mcrcon és a backup.sh).
  • A server könyvtárba pedig maga a Minecraft szerver foglal majd helyet.

mcrcon letöltése és fordítása

RCON egy protocol mely segítségével kapcsolódhatunk a Minecraft szerverünkhöz és parancsokat futtathatunk rajta. mcrcon egy C-ben írt RCON kliens.

Lépjünk be a tools könyvtárba majd klónozzuk le a Tiiffi/mcrcon GitHub repository-t:

$ cd ~/tools && git clone https://github.com/Tiiffi/mcrcon.git

Ezt követően lépjünk be az így létrejött könyvtárba:

$ cd ~/tools/mcrcon

és fordítsuk le GCC segítségével:

$ gcc -std=gnu11 -pedantic -Wall -Wextra -O2 -s -o mcrcon mcrcon.c

Minecraft szerver letöltés és konfigurálás

Letöltés vagy saját készítés

A saját modpack készítését majd egy későbbi cikkben fejtem ki. Amennyiben elérhető az általad kiválasztott modpack szerver oldali változata, akkor azt töltsük el és csomagoljuk ki.

Ha viszont a vanilla verzióból szeretnél szervert csinálni akkor azt egyszerűen wget segítségével töltsd le a mojang szervereiről:

$ wget https://launcher.mojang.com/v1/objects/a412fd69db1f81db3f511c1463fd304675244077/server.jar -P ~/server

Konfigurálás

Hozzunk létre egy eula.txt nevű fájlt a server könyvtár alatt

$ nano ~/server/eula.txt

és írjuk bele a következő sort

eula=true

Ezt követően mentsük el és zárjuk be. Majd hozzunk létre egy server.properties fájlt a server könyvtár alatt:

$ nano ~/server/server.properties

és töltsük fel az alábbi paraméterekkel:

#Minecraft server properties
generator-settings=
op-permission-level=4
allow-nether=true
level-name=world
enable-query=false
allow-flight=false
announce-player-achievements=true
rcon.password=jelszo
server-port=25565
level-type=DEFAULT
max_minion_spawn=-1
enable-rcon=true
force-gamemode=false
level-seed=
server-ip=
max-build-height=256
spawn-npcs=true
white-list=false
spawn-animals=true
hardcore=false
snooper-enabled=true
online-mode=true
resource-pack=
pvp=true
difficulty=1
enable-command-block=false
gamemode=0
player-idle-timeout=0
max-players=20
rcon.port=25575
spawn-monsters=true
generate-structures=true
view-distance=10
motd=Saját Minecraft Szerver

Ne felejtsük el kicserélni a jelszo értéket valami erős jelszóra!

Ezen paraméterekről a Minecraft Wiki-n olvashatsz részletesebben.

Systemd Unit File

Innentől vissza kel váltanunk a cikk elején használt sudo felhasználónkra, ehhez csak gépeljük be, hogy exit.

Ezt követően hozzunk létre egy minecraft.service nevű fájlt a /etc/systemd/system/ könyvtárban:

$ sudo nano /etc/systemd/system/minecraft.service

Illesszük be a következő sorokat:

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

[Service]
User=minecraft
Nice=1
KillMode=none
SuccessExitStatus=0 1
ProtectHome=true
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xmx4096M -Xms2048M -jar server.jar nogui
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p jelszo stop

[Install]
WantedBy=multi-user.target

A saját környezetünknek megfelelően írjuk át az rcon port-ot és jelszót. Valamint a környezetünkből adódó mértékben és a modpack-ünknek megfelelően írjuk át az Xmx és az Xms értékeket. Az Xmx megadja, hogy mennyi memóriát allokálhat összesen, az Xms pedig megadja, mennyi legyen a kezdő allokáció.

Mentsük el és zárjuk be a fájlt, valamint értesítsük a systemd-t arról, hogy létrehoztunk egy új unit fájlt:

$ sudo systemctl daemon-reload

Ezt követően már indíthatjuk is a szerverünket:

$sudo systemctl start minecraft

Az első indulásnál létrehoz pár konfigurációs fájlt valamint a könyvtárat amely tartalmazza a Minecraft világot.

Ellenőrizzük le, hogy sikeresen elindult-e a szerver:

$ sudo systemctl status minecraft
● minecraft.service - Minecraft Server
   Loaded: loaded (/etc/systemd/system/minecraft.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-06-24 15:46:16 CEST; 4s ago
 Main PID: 28883 (java)
   CGroup: /system.slice/minecraft.service
           └─28883 /usr/bin/java -Xmx4096M -Xms2048M -jar server.jar nogui

Engedélyezzük, hogy a Minecraft service automatikusan elinduljon bootoláskor:

$ sudo systemctl enable minecraft

Tűzfal beállítás

Amennyiben a szerver tűzfallal van védve, akkor annak érdekében, hogy csatlakozni tudjunk a Minecraft szerverünkhöz kívülről, kikel nyitnunk a 25565 portot (természetesen, ha más portot adtunk meg a server.properties fájlban, akkor azt):

$ sudo firewall-cmd --permanent --zone=public --add-port=25565/tcp
$ sudo firewall-cmd --reload

Biztonsági mentés

Ebben a részben egy cronjob által automatizált scriptet készítünk, mely segítségével elvégezzük majd a szerver mentését. Ehhez most újra a minecraft userünkre lesz szükségünk:

$ sudo su - minecraft

Hozzunk létre egy backup.sh fájlt a /opt/minecraft/tools/ könyvtárban:

$ nano /opt/minecraft/tools/backup.sh

És másoljuk bele a következő sorokat:

#!/bin/bash

function rcon {
  /opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password "$1"
}

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

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

chmod segítségével állítsuk futtathavá a scriptünket:

$ chmod +x /opt/minecraft/tools/backup.sh

Nyissuk meg a crontab fájlt és hozzunk létre egy cronjob-ot, ami naponta egyszer lefut egy fix időben (ez tetszés szerint állítható, forgalmas szerveren akár többször is futhat naponta):

$ crontab -e

A példánkban fusson mondjuk minden nap 23:00-kor:

0 23 * * * /opt/minecraft/tools/backup.sh

Hozzáférés a Minecraft konzolhoz

A Minecraft konzoljához hozzáférni az mcrcon segítségével történik.

A szintaxis a következő, meg kel adni a host-ot, a portot, a jelszót és használni kel a -t kapcsolót, hogy az mcrcon-t átkapcsoljuk terminál módba:

$ /opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p jelszo -t
Logged in. Type 'quit' or 'exit' to quit.
>

Amennyiben sokszor használjuk majd a konzolt, akkor érdemes lehet a fenti sorra egy aliast létrehozni. Nyissuk meg a .bashrc fájlt a home könyvtárunkban:

$ nano ~/.bashrc

Majd adjuk hozzá a következő sort:

alias mcrcon='/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p jelszo -t'

Mentsük el, és zárjuk be a fájlt, majd tegyük elérhetővé a létrehozott aliast ebben a session-ünkben is:

$ source ~/.bashrc

Ezt követően már elegendő a konzol eléréséhez annyit kiadnunk, hogy mcrcon:

$ mcrcon
Logged in. Type 'quit' or 'exit' to quit.
>

Közösségi megosztás:

Vélemény, hozzászólás?

%d bloggers like this: