Introduction#
Minecraft is a great game and better with friends. A dedicated server allows you to do that1.
A Minecraft server does not require a ton of resources to run, but from my experience the more resources you can throw at it the better when you start to introduce mods and more players.
I run our server on my main PC. This allows me to leverage the system resources in my PC π¦Ύ leaving the Pi Cluster system resources to handle the rest of the stuff in my lab.
Prerequisites#
- Docker
- Docker Compose
Requirements2#
Minimum (1-5 Players)#
- Intel Pentium 4 or AMD Athlon based CPU
- 512 MB RAM
- 2 GB Storage space
Recommended (10-15 Players)#
- Intel Core or AMD K8 based CPU
- 3 GB RAM
- 16 GB Storage Space
Optimal (20+ Players)#
- Intel i5/i7 or AMD Ryzen 5/7 Based CPU
- 6 GB RAM
- 35 GB Storage Space
Building the Container#
- Create a directory in which you will keep the Minecraft server files
# Make the folder
mkdir minecraft-server
# Ender the folder
cd minecraft-server
- Create an environment file to be used by the Docker Container
- The .env file allows us to specify variables used in the build process.
# Create a .env file
touch .env
# Open in a text editor
vim .env
# Enter the following variables
CONTAINER_NAME=minecraft-server
SERVER_MEM=4096 #change this to your desired value (in MB)
SERVER_JAR=minecraft_server.<version>.jar # change the version
- Create the docker-compose.yml file
- The docker-compose.yml file specifies the container that we want to build 3
# Create the file
touch docker-compose.yml`
# Open in a text editor
vim docker-compose.yml
version: "3"
services:
minecraft-server:
build:
context: .
args:
SERVER_MEM: ${SERVER_MEM}
SERVER_JAR: ${SERVER_JAR}
volumes:
- .server-data:/server
ports:
- 25565:25565
- 25575:25575
container_name: ${CONTAINER_NAME}
restart: unless-stopped
volumes:
server-data:
Create the Dockerfile file
- The Dockerfile builds the container image.
# Create the file
touch Dockerfile`
# Open the file in a text editor
vim Dockerfile
FROM eclipse-temurin:17-jre
ARG SERVER_MEM
ARG SERVER_JAR
ENV SERVER_MEM=${SERVER_MEM}
ENV SERVER_JAR=${SERVER_JAR}
WORKDIR /server
CMD echo "Minecraft Server is starting\n" && java -Xms128M -Xmx${SERVER_MEM}M -jar ${SERVER_JAR} nogui
Setup the Server files#
Weβre almost there, just a few steps left !!
The curious among you may have realised when trying to start the container that it fails with the error below:
Minecraft Server is starting
Error: Unable to access jarfile server.jar
This is because we have not downloaded the server jar file yet, that is our next step.
- Navigate to one of the following sites:4
- Vanilla Minecraft Server - instructions found here5
- Fabric Mod loader server - instructions found here 6
- Create a folder in the Minecraft-server folder called .server-data
mkdir .server-data
cd .server-data
- Download the jar file - This will depend on the option above so read the instructions
- Go back to the root minecraft-server folder
cd ..
- Run the container This will create our eula.txt as well as other files needed.
docker compose up # use CTRL+C to exit
minecraft-server | Starting net.minecraft.server.Main
minecraft-server | [18:05:50] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.
minecraft-server exited with code 0
- Accept the EULA
# enter the .server-data folder
cd .server-data
# edit eula.txt in a text editor
vim eula.txt
# change `eula=false` to `eula=true`
eula=true
While in the .server-data folder make any changes you want
- Notable files:
- server.properties - properties like server name, game mode, world type etcβ¦
- ops.json - list of server operators (easier to set ingame)
- whitelist.json - list of players allowed to join the server everyone else rejected access.
- Notable files:
Run the container
# -d flag allows the container to run in detached mode i.e in the background
docker compose up -d
# monitor the logs as the server starts. CTRL+C to exit
docker logs minecraft-server --follow
# If you see the bottom line then your server is up and running
[18:17:01] [Server thread/INFO]: Time elapsed: 25529 ms
[18:17:01] [Server thread/INFO]: Done (34.571s)! For help, type "help"
Conclusion#
Well done you have setup a Minecraft server, now go play !!
There is a lot of cool stuff you can do from this point, for example installing mods or creating scripts to manage the server.
Hosting your own dedicated server allows you to modify every aspect of the server as you see fit. I.E you can modify the server-properties, you can implement a whitelist not to mention being able to add any mods you want ↩︎
Requirements Gathered from here https://minecraft.fandom.com/wiki/Server/Requirements/Dedicated#Unix_.28Linux.2C_BSD.2C_macOS.29 ↩︎
Yaml is very picky π when it comes to formatting so if you encounter any errors double check your formatting !! ↩︎
I have left Forge out as it is a more involved process plus Fabric is better π ↩︎
Right click the green link that says something like minecraft_server.x.xx.x.jar and copy the link address
curl -o server.jar \<link you copied here\>
↩︎Select the Minecraft version, Fabric Loader Version and the Installer Version of your choice. I tend to go with the latest.
Copy the curl command under CLI download
↩︎