Hru Minecraft asi netřeba představovat, v tomto článku se podíváme na to, jak provozovat Minecraft server Spigot na FreeBSD.

Jail

Pro každou minecraft mapu používám vlastní jail.

Pokud je v plánu více MC serverů, je výhodné si dopředu připravit template se vším potřebným (java, screen, případně nginx pro dynmapu) a pomocí zfs clone tento template clonovat na datasety pro jednotlivé jaily.

Instalace Javy

Používám OpenJDK ve verzi 8. Instalace Javy z portů je jednoduchá, nejsou tam žádné konfigurační volby.

portmaster -D java/openjdk8-jre

Kompilace Spigotu

Viz starší článek Kompilace Minecraft serveru Spigot

Novější Spigot 1.12.1 na Java 8 již pro spuštění nevyžadují žádné další volby, takže spuštění serveru se provede jen spuštěním jaru:

/usr/local/openjdk8-jre/bin/java -jar spigot.jar

A to je vlastně vše. V tuto chvíli nám MC server běží, můžeme se připojit klientem na hostname jailu a hrát. :-)

Dynamická mapa na portu 80

Pokud používáte dynmap, možná vás štve, že je dostupná na portu 8123. Je několik možností, jak ji dostat na port 80, čímž opadne nutnost pro prohlížeče zadávat url včetně portu.

První možnost, kterou důrazně nedoporučuji dělat, je nastavit dynmapu na port 80 a provozovat mc server pod rootem (jedině root má právo obsadit porty menší než 1024). Opravdu to nedělejte, to, že je něco ve virtuálce nebo v kontejnerech typu jail (nspawn, lxc) vůbec neznamá, že je možné zahodit všechna bezpečnostní pravidla. Stále platí, že program by měl mít nejmenší možná práva, která stačí k jeho běhu.

Další možností, která se hodí pro více zatížený server s mnoha uživateli, je použít nginx. A to buď jako reverzní proxy nebo přímo jako webserver nad soubory s mapou.

Přesměrování portů

Pokud nepotřebujeme velký výkonný webserver, stačí nám interní dynmap webserver, ale stále jej chceme provozovat na portu 80, můžeme port 80 přesměrovat na 8123 ve firewallu.

To nelze nastavit v jailu, musí se to dělat na hostitelském systému.

Používám firewall PF (dokumentace na stránkách OpenBSD) původem z OpenBSD.

Konfigurace celého PF na FreeBSD jde už hodně nad rámec tohoto článku, ale pokud chceme jen přesměrovat porty, stačí nám PF aktivovat:

Do /etc/rc.conf přidat:

pf_enable="YES"

a do konfigurace /etc/pf.conf přidáme samotné pravidlo pro přesměrování:

rdr pass proto tcp from any to 192.168.x.y port 80 -> 192.168.x.y port 8123

a spustíme:

service pf start

A dynmapa je dostupná na portu 80.

NGINX jako webserver pro dynmapu

Neprovozuji na dynmapě chat, nepotřebuji podporu php, stačí mi velmi základní webserver. Během kompilace z portů tedy zvolím velmi minimální konfiguraci:

portmaster -D www/nginx

Konfigurace /usr/local/etc/nginx/nginx.conf:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /home/mc/server/plugins/dynmap/web;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }
}

V konfiguraci dynmapy (soubor dynmap/configuration.txt) provedeme změny:

  • Zakomentujeme / odstraníme celou sekci:
- class: org.dynmap.InternalClientUpdateComponent
  • Odkomentujeme celou sekci (tohle způsobí pravidelné updatování souborů json v adresáři web/standalone)
- class: org.dynmap.JsonFileClientUpdateComponent
  • Vypneme interní webserver:
    disable-webserver: true

Po spuštění mc serveru a spuštění nginxu můžeme v prohlížeči zadat hostname našeho jailu a kochat se mapou.