Raspberry Pi 4 Minecraft server s Dockerem a ngrok - Bez potřeby veřejné IP adresy

V tomto článku se dozvíte, jak vytvořit Minecraft server na Raspberry Pi 4 bez potřeby nastavovat port forwarding na vašem routeru a vlastnit veřejnou ip adresu. Místo toho použijeme ngrok k vytvoření bezpečného tunelu pro připojení z internetu.

Na rozdíl od jiných možností, jak hostovat váš Minecraft server ať už pomocí AWS nebo klasického server hostingu se může jednat o tu z dlouhodobého hlediska nejlevnější metodu. To platí především pokud již doma máte nevyužívané Raspberry Pi nebo plánujete provozovat menší server dlouhodobě. Pojďme se podívat jak na to.

Co budeme potřebovat:

  • Počítač se systémem Windows, Mac nebo Linux.
  • Raspberry pi 4 (doporučuje se alespoň model s 2GB, záleží však na tom, kolik lidí bude na serveru hrát).
  • 16GB nebo větší micro sd kartu.
  • Ethernetový kabel.
  • Napájecí adaptér pro Pi

Nejprve nainstalujte operační systém na Vaše Raspberry Pi. K tomu budeme potřebovat stáhnout oficiální Raspberry Pi Imager.

Připojte k počítači SD kartu. Zvolte operační systém, který chcete nainstalovat, vyberte správnou SD kartu, kterou jste připojili (ujistěte se, že je to ta správná!), a poté stiskněte tlačítko pro zápis. Nechte proces zápisu dokončit a ignorujte všechna okna Průzkumníka souborů, která se mohou objevit.

Pro tento tutoriál zvolím verzi Raspberry Pi OS lite 32-bit. Verze lite neobsahuje desktopové prostředí, což pro účely tohoto návodu není potřeba, ale pokud chcete, můžete si nainstalovat verzi s desktopovým prostředím. Pokud máte model Raspberry Pi s kapacitou 8GB, vyberte 64-bitovou verzi OS, abyste mohli plně využít potenciálu RAM vašeho Raspberry Pi.

Jakmile máte obraz systému hotový, ignorujte případné varování systému Windows, které se může objevit a tvrdit, že je potřeba disk s novým systémem naformátovat. Vytáhněte a znovu připojte SD kartu k počítači, otevřete disk označený jako "boot" a vytvořte na kartě soubor nazvaný "ssh" (bez přípony). U Windows to lze udělat vytvořením textového souboru a odstraněním přípony .txt. Pokud používáte Mac nebo Linux stačí ve složce boot otevřít terminál a použít příkaz: touch ssh

Vložte kartu SD do Raspberry Pi, připojte Ethernetový a napájecí kabel. Počkejte minutu na spuštění a nalezení IP adresy. Můžete zjistit IP adresu tím, že navštívíte webové rozhraní vašeho routeru. Pokud nevíte, jak najít IP adresu vašeho routeru, doporučuji tento vynikající článek. Jakmile se úspěšně přihlásíte ke svému routeru, zkontrolujte připojená zařízení.

Jakmile získáte IP adresu Raspberry Pi, připojte se k němu pomocí protokolu SSH. Pokud používáte operační systém Mac nebo Linux, můžete použít následující příkaz z terminálu: ssh pi@<ip-adresa>, kde je IP adresa Raspberry Pi. Pokud používáte systém Windows, můžete použít software jako Putty, vložit IP adresu Raspberry Pi do pole "Adresa" a kliknout na tlačítko "Připojit".

Výchozí heslo je "raspberry". Okamžitě po přihlášení změňte výchozí heslo zadáním příkazu passwd a následováním pokynů.

Nyní aktualizujte Raspberry Pi příkazy sudo apt update && sudo apt upgrade. Toto může trvat několik minut. Po dokončení aktualizace restartujte Raspberry Pi pomocí příkazu sudo reboot now a počkejte minutu na jeho opětovné spuštění. Po opětovném připojení se můžete přesunout na další krok.

Instalace potřebných balíčků

Nyní když již máme nakonfigurované Raspberry Pi můžeme pokračovat dál a nainstalovat samotná Minecraft server. K tomu použijeme tento Docker image k sestavení našeho serveru. Stejný Docker image můžete použít i pokud byste instalovali Váš server například na AWS.

Budeme potřeba nainstalovat pár věcí. Celkově to bude trvat přibližně 15 minut v závislosti na vašem internetovém připojení.

Nainstalujte javu příkazem: sudo apt install default-jdk

Stáhněte a nainstalujte libseccomp2:

wget http://ftp.de.debian.org/debian/pool/main/libs/libseccomp/libseccomp2_2.4.4-1~bpo10+1_armhf.deb

Poté nainstalujte stažený soubor: sudo dpkg -i libseccomp2_2.5.1-1~bpo10+1_armhf.deb

Toto je nejaktuálnější verze v době psaní tohoto tutoriálu. Můžete ověřit nejnovější verzi a odkazy na zrcadla pomocí tohoto odkazu: https://packages.debian.org/buster-backports/libseccomp2

Nakonec potřebujeme samotný Docker a pro to spusťte následující příkazy postupně jeden po druhém:

  • curl -fsSL https://get.docker.com -o get-docker.sh
  • sh ./get-docker.sh
  • sudo apt-get install -y libffi-dev libssl-dev python3 python3-pip
  • sudo apt-get remove python-configparser
  • sudo pip3 -v install docker-compose

Přiřaďte oprávnění uživateli pi ke spuštění příkazů dockeru:

sudo usermod -aG docker pi

Poté restartujte Raspberry Pi (sudo reboot now) a přihlaste se znovu. Nyní bychom měli být připraveni nastavit server.

Spuštění serveru

Nejprve vytvořte adresář pro Minecraft server a pomocí příkazu cd do něj přejděte:

mkdir minecraft-server && cd minecraft-server

Vytvořte soubor docker-compose.yml: sudo nano docker-compose.yml

Do souboru zkopírujte následující obsah:

    minecraft-server:
    image: itzg/minecraft-server
    container_name: minecraft-server

    ports:
        - "25565:25565"

    environment:
        MEMORY: 1G
        EULA: "TRUE"
    tty: true
    stdin_open: true
    restart: always

    volumes:
        # attach a directory relative to the directory containing this compose file
        - ./minecraft-data:/data
    

Mějte na paměti, že tímto souhlasíte s licenčními podmínkami Minecraftu. Pro ukončení souboru stiskněte ctrl+x, poté y a enter.

Pokud chcete vidět, jaké další možnosti a parametry můžete použít, podívejte se na repozitář na Githubu. Jsou tam možnosti, jak spustit i jiný druh Minecraft serveru (Bukkit/Spigot, Paper a mnoho dalších).

Docker-compose.yml soubor, který jsme právě vytvořili, říká Dockeru, jak a jaký obraz postavit. První řádek udává název kontejneru, který může být cokoliv, ale my jsme zvolili minecraft-server, aby byl snadno identifikovatelný. Tento název je také znovu specifikován na řádku 3. Další důležité parametry jsou MEMORY pod environment a sekce volumes.

Paměť je nastavena na 1 gigabyte, ale můžete ji změnit, například tím, že namísto 1G napíšete 2G. Ujistěte se však, že je nižší než celková paměť vašeho Raspberry.

Pro spuštění serveru stačí zadat příkaz docker-compose up -d. Docker poté stáhne soubory obrazu a spustí kontejner. Jakmile se dokončí stahování, můžete zkontrolovat stav svého Docker kontejneru pomocí příkazu docker logs -f minecraft-server. Pokud vidíte startovací protokol minecraft serveru, funguje to! Pro ukončení zobrazení protokolu použijte klávesovou zkratku ctrl+c.

Také zjistíte, že byla vytvořena složka s názvem minecraft-data. Toto je umístění vašich konfiguračních souborů serveru.

Pro ověření, zda se k serveru můžete připojit, otevřete aplikaci minecraft a do pole pro přidání nového serveru zadejte IP adresu vašeho raspberry pi. Pokud se server objeví v seznamu, funguje to jak má!

Zpřístupnění Vašeho serveru mimo lokální síť
Nejprve budete potřebovat účet pro použití ngrok. Zaregistrujte se zde.

Jakmile máte účet, vraťte se zpět na obrazovku Raspberry Pi, a přejděte se zpět do domovského adresáře pomocí příkazu cd ~ a poté stáhněte a rozbalte ngrok pomocí následujících příkazů:

wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-arm.tgz
tar -xvzf ngrok-stable-linux-arm.tgz

Ověřte, zda je nainstalován, zadáním příkazu ./ngrok help. Pokud dostanete seznam příkazů, které můžete použít s ngrok, pak byl nainstalován správně.

Nastavte ngrok k použití autentifikačního tokenu, který jste získali při registraci, pomocí následujícího příkazu:
./ngrok authtoken TOKEN

Token naleznete v ngrok dashboardu po přihlášení do účtu. Najdete ho na kartě "Auth" nebo přejdete na tuto stránku: https://dashboard.ngrok.com/get-started/your-authtoken.

Jakmile spustíte příkaz, bude vytvořen soubor ngrok.yml obsahující váš token. Pro nastavení tunelu budete muset upravit konfigurační soubor ngrok.yml, který byl právě vytvořen. Měl by se nacházet někde jako /home/pi/.ngrok2/ngrok.yml.

Otevřete soubor pomocí příkazu nano:
sudo nano /home/pi/.ngrok2/ngrok.yml

A přidejte následující kód ZA Váš authtoken:

tunnels:
  minecraft-server:
    proto: tcp
    addr: 25565
    bind-tls: true
    console_ui: false

Pro opuštění souboru stiskněte Ctrl + X, poté Y a nakonec Enter.

Tímto jste nastavili tunel na použití protokolu TCP, otevřený na portu 25565, což je port Minecraftu. Také jste tunelu pojmenovali minecraft-server.

Teď už jen vytvoříte soubor, který povolí ngrok jako službu, takže bude spuštěn při spuštění Raspberry Pi a nebude se zobrazovat v popředí, když ngrok běží.

sudo nano /etc/systemd/system/ngrok-client.service

Vložtě následující obsah:

[Unit]
Description=ngrok client
After=network.target

[Service]
ExecStart=/home/pi/ngrok start --all -config /home/pi/.ngrok2/ngrok.yml
Restart=on-abort

[Install]
WantedBy=multi-user.target

Jako vždy stiskněte ctrl+x, následováno y a poté enter pro uložení a ukončení.

Následující příkazy slouží k povolení ngrok jako služby:

sudo systemctl daemon-reload
sudo systemctl enable ngrok-client
sudo systemctl start ngrok-client

Pro ověření, zda ngrok funguje, spusťte následující příkaz: systemctl status ngrok-client.service. Pokud vidíte, že je služba povolena (enabled), tak funguje správně!

Pro získání odkazu, který můžete sdílet s přáteli, aby se připojili k serveru, navštivte stránku stavu ngrok.

Zde uvidíte všechny své tunely https://dashboard.ngrok.com/cloud-edge/endpoints

Odkaz pro tunel má předponu tcp://. Při vkládání do adresního řádku serveru v Minecraftu je třeba tuto předponu odstranit.

Hotovo! Server běží a ngrok je nakonfigurován. Můžete se odpojit od ssh relace a užívat si Minecraft! Pro aktualizaci serveru na nejnovější verzi Minecraftu stačí restartovat Raspberry Pi (pokud jste server nakonfigurovali podle tohoto návodu). Mějte na paměti, že názvy ngrok tunelů se někdy mění, takže po každém restartu systému zkontrolujte stránku stavu ngrok, abyste získali aktualizovanou adresu serveru. Pokud vlastníte doménu, můžete si jí nastavit jako adresu serveru pomocí tohoto návodu.