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 8-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 root 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 dnf install java-1.8.0-openjdk-headless
mcrcon “függőségek”
$ sudo dnf install git $ sudo dnf 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_272" OpenJDK Runtime Environment (build 1.8.0_272-b10) OpenJDK 64-Bit Server VM (build 25.272-b10, mixed mode) $ git --version git version 2.18.4 $ gcc -v ... gcc version 8.3.1 20191121 (Red Hat 8.3.1-5) (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étre 3 könyvtárat, annak érdekében, hogy átláthatóan és strukturá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-11-21 04:37: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. >