92b9352642 | 2 years ago | |
---|---|---|
.. | ||
readme.md | 2 years ago |
readme.md
Minecraft server in docker
guide-by-example
Purpose & Overview
Open world building and surviving game.
Minecraft is written in Java.
Purpur version of the server
is used in this setup along with few plugings,
which allow to host multiple worlds on the same server.
Files and directory structure
/home/
└── ~/
└── docker/
└── minecraft/
├── minecraft-data/
├── .env
└── docker-compose.yml
minecraft-data/
- a directory where bookstack will store its web app data.env
- a file containing environment variables for docker composedocker-compose.yml
- a docker compose file, telling docker how to run the containers
You only need to provide the files.
The directory is created by docker compose on the first run.
docker-compose
docker-compose.yml
services:
minecraft:
image: itzg/minecraft-server
container_name: minecraft
hostname: minecraft
restart: unless-stopped
env_file: .env
tty: true
stdin_open: true
ports:
- 25565:25565
volumes:
- ./minecraft-data:/data
.env
# GENERAL
MY_DOMAIN=example.com
DOCKER_MY_NETWORK=caddy_net
TZ=Europe/Bratislava
# itzg specific
TYPE=PURPUR
EULA=TRUE
ONLINE_MODE=FALSE
SNOOPER_ENABLED=FALSE
SERVER_NAME=Blablabla
ALLOW_CHEATS=TRUE
MAX_MEMORY=3G
MAX_PLAYERS=50
ENABLE_COMMAND_BLOCK=TRUE
ALLOW_NETHER=TRUE
OVERRIDE_ICON=TRUE
ICON=https://i.imgur.com/cjwKzqi.png
Port forwarding
You must forward port 25565 on your firewall to your docker host
if you want it world accessible.
Usually here is reverse proxy settings but there is no need here,
nothing is trying to get in over port 80 or 443.
Domain
Setup a DNS A-record for you subdomain - minecraft.example.com
Will work fine if using default port 25565
If you would want to use different port, but also would prefer your users
to not need to enter minecraft.example.com:30108
then google
"minecraft srv record" and you should find the correct settings.
Like this one.
Plugins
This setup is written in august 2022
1.19.2 is the latest build
Why the mods?
You want one server but you want people to be able to play creative or surival?
Well you need multiverse core
.
How do the people move between these worlds?
Well you need multiverse portals
.
Should they be able to bring stuff from one world to another? No?
Well you need multiverse inventory
.
Should they spawn in lobby on connecting,
but also remember the position in the worlds when entering portals?
Well you need the rest of that shit, EssentialsX
and EssentialsX Spawn
.
Plugins installation - place the downloaded jar files in to
~/docker/minecraft/minecraft-data/plugins
restart the server
The setup
check if the plugins are loaded using command plugins
creation of the worlds
- check the worlds present -
mv list
these 3 existing worlds [world, nether, end] are grouped and interconnected and will be used as the survival world - create a new world called "creative_world" -
mv create creative_world normal
- teleport to it -
mv tp creative_world
- switch mode to creative -
mvm set mode creative creative_world
- create a new world called "lobby" -
mv create lobby normal -t flat
- teleport to lobby world -
mv tp lobby
- remove monsters -
mvm set difficulty peaceful
- remove animals -
mv modify set animals false
- set adventure -
mvm set mode adventure
- build 2 portals, for survival and creative worlds
- get worldedit axe using command -
mvp wand
- use left click and right click to select portal area
after selecting it create a portal named portal1 with destination creative_world -mvp create portal1 creative_world
- same thing with the axe for survival, with destination to "world" -
mvp create portal2 world
- you can check your portals configuration on server in
> plugins > multiverse-portals > config.yml
- if non OP players cant use portals execute -
mvp conf enforceportalaccess false
ormv conf enforceaccess false
bonus info
if you have seed mv create snow_world normal -s -5343926151482505487
spawning in the worlds
- pick a spawn point in the lobby and set it with multiple commands
setspawn
setworldspawn
mv setspawn
- edit the file in
> plugins > Essentials > config.yml
setspawn-on-join: true
- you would think we are done with spawns, but nope, fuck you, this all lets the game start in spawn location in the lobby world, but when entering creative world you would be starting from its spawn, instead of last position on exit. So... heres how to fix that.
- this command for the inventory plugin makes the world remember last location
mvinv toggle last_location
but with just that change the lobby world position is also remembered and users end up spawning inside of portals instead of specific spawn - to fix that we set in
> plugins > multiverse-inventories > config.yml
optionals_for_ungrouped_worlds: false
- but our lobby world is ungrouped, so we need to add it to a group
using command
mvinv group
and then following the instructions. Writing the answers in to the console without slash, when it asks about shares, givinglast_location
and ending with@
This could be helpful too, but it feels like doing unnecessary steps - now you should have spawn point in lobby that is always the same, while after entering portals you end up at your last location
Extra Plugins
- AntiPopup -
if you dont want that stupid chat popup so thats AntiPopup.
- luckperms - manage permissions of players
- holomobhealth - see mobs health
Update
Manual image update:
docker-compose pull
docker-compose up -d
docker image prune
Backup and restore
Backup
Using borg that makes daily snapshot of the entire directory.
Restore
- down the minecraft container
docker-compose down
- delete the entire minecraft directory
- from the backup copy back the minecraft directory
- start the containers
docker-compose up -d