Provozujeme Minecraft server na FreeBSD
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.