Hello everyone. I hope you are all doing well. I am writing this blog entry because I created a Minecraft server for my kids some time ago, but I had a hardware failure in the system and never replaced it. At the time, it was no big deal since the boys decided that they were done with Minecraft. But lately, with this new version of Minecraft, they have gotten back into it, and they wanted to have a shared sandbox that they can play with their friends on.
So, I rebuilt their Minecraft server, but this time, I did it from 16.04 to 20.04. It was pretty straight forward and not much has changed in the way of doing this, but this is here for those of you that want to deploy your own Minecraft server.
NOTE: This will only work for the Java version of Minecraft. If you are using the Windows 10 version or the one on Xbox or Switch, you will not be able to connect to this server.
So, the first thing you need is a clean installation of Ubuntu 20.04.2 Server. The system specs should be at least 4GB of RAM and 2 CPU Cores and 80GB of Storage. After you install Ubuntu, do the normal first boot practices, update, upgrade, reboot if required, etc.
sudo apt update && sudo apt upgrade -y
Once that is completed, you need to install a couple things on top.
One thing I like is the MCRcon tool from Tiiffi. I use this to do backups and statistics of my server, and it is really easy to use, and it’s super small. So I install the Build-Essential package as well as git. Minecraft also leverages Java, so I install the Open Java Development Kit packages with headless mode:
sudo apt install git build-essential
openjdk-11-jre-headless
Once that is completed, I then create a minecraft user so that when I run this as a service, it is a lot more secure, and I have a location where to keep all the dedicated Minecraft files.
sudo useradd -m -r -U -d /opt/minecraft -s /bin/bash minecraft
This creates the Minecraft user with the home directory in /opt/minecraft. This also doesn’t create a password for this account so we don’t have to worry about someone gaining access to our system with this account. You can only access this account via sudo su - minecraft
with your local admin account.
Now, we need to switch to the minecraft user and run the following:
sudo su - minecraft mkdir -p {server,tools,backups} git clone https://github.com/Tiiffi/mcrcon.git ~/tools/mcrcon cd ~/tools/mcrcon make
This will create the required directories for Minecraft, and download and build the MCRcon tool. You can verify that the MCRcon tools built successfully by running the command:
~/tools/mcrcon/mcrcon -v
You will get the following output:
mcrcon 0.7.1 (built: Mar 26 2021 22:34:02) - https://github.com/Tiiffi/mcrcon Bug reports: tiiffi+mcrcon at gmail https://github.com/Tiiffi/mcrcon/issues/
Now, we get to installing the Minecraft Server Java file.
First, we need to download the server.jar file from Minecraft. You can go here to download the file, or what I did, is I go to the link, and from there, I right click the link and select ‘Copy Link Address’ so I can paste it into my terminal on the server and use wget
to install it.
wget https://launcher.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar -P ~/server
Now, we need to run the Minecraft server. It will fail on the first run because we need to accept the EULA. We also need to modify the server.properties file since the first run creates these files:
cd ~/server
java -Xmx1024M -Xms1024M -jar server.jar nogui
After the program fails to start, we need to modify the eula.txt file and change the eula=false
at the end of the file to eula=true
. Save this file and exit.
Next, we need to enable RCON in Minecraft. Open the server.properties file and search for the following variables, and change them accordingly:
rcon.port=25575
rcon.password=PassW0rd
enable-rcon=true
Also, while you are in this file, you can make any other changes that you want to the server, such as the server name, listening port for the server, the MOTD, etc. Also, choose a complex password so that not just anyone can remote control your server.
Now, I like to have this run as a service using SystemD. To do this, create a service script. First you have to exit as the Minecraft user by typing exit
and getting back to your local admin shell. Then run the following:
sudo vi /etc/systemd/system/minecraft.service
Paste the following in the file:
[Unit] Description=Minecraft Server After=network.target [Service] User=minecraft Nice=1 KillMode=none SuccessExitStatus=0 1 ProtectHome=true ProtectSystem=full PrivateDevices=true NoNewPrivileges=true WorkingDirectory=/opt/minecraft/server ExecStart=/usr/bin/java -Xmx2G -Xms2G -jar server.jar nogui ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p PassW0rd stop [Install] WantedBy=multi-user.target
Save the document. Next, run
sudo systemctl daemon-reload
This will refresh systemd with the new minecraft.service.
Now, you can start the minecraft service:
sudo systemctl start minecraft
To get it to start on reboots, execute the following:
sudo sytemctl enable minecraft
The last thing we have to do is create the backup job for your server. This uses the MCRcon tool and crontab to clean up the server as well.
Switch back to the Minecraft user and perform the following:
sudo su - minecraft vi ~/tools/backup.sh
Paste the following script into the new file you are creating:
!/bin/bash function rcon { /opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p PassW0rd "$1" } rcon "save-off" rcon "save-all" tar -cvpzf /opt/minecraft/backups/server-$(date +%F-%H-%M).tar.gz /opt/minecraft/server rcon "save-on" # Delete older backups find /opt/minecraft/backups/ -type f -mtime +7 -name '*.gz' -delete
Now, create a crontab to run the backup:
crontab -e 0 0 * * * /opt/minecraft/tools/backup.sh
Now exit as the Minecraft user and return as the local admin. Lastly, because I leverage UFW for my firewall, I need to open the port to the world so that people can connect to it. I do that with the following commands:
sudo ufw allow from 10.1.10.0/24 to any 25575 sudo ufw allow 25565/tcp
This allows the Remote console to be accessed only by my internal network, and allows the Minecraft game to be accessed by the outside world.
Now, you are ready to connect your Minecraft clients to your server and have some fun!
Let me know if this guide worked for you or if you have any questions or comments, please leave them below.