How to Make Minecraft Server on Ubuntu 20.04

Posted 

7 min read

Minecraft is one of the most popular games of all time. It is a sandbox video game where players explore infinite worlds and build different structures from simple houses to towering skyscrapers.

This tutorial explains how to make a Minecraft Server on Ubuntu 20.04. We’ll use Systemd to run the Minecraft server and the mcrcon utility for connecting to the running instance. We’ll also show you how to create a cronjob that performs regular server backups.

Prerequisites

According to the official Minecraft site, 4GB of RAM is recommended as a minimum configuration for a typical setup.

Install the packages required to build the mcrcon tool:

sudo apt updatesudo apt install git build-essential

Installing Java Runtime Environment

Minecraft requires Java 8 or higher. The Minecraft Server doesn’t need a graphical user interface, so we’ll install the headless version of Java. This version is more suitable for server applications since it has fewer dependencies and uses less system resources.

Run the following command to install the headless OpenJRE 11 package:

sudo apt install openjdk-11-jre-headless

Verify the installation by printing the java version:

java -version
openjdk version "11.0.7" 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)

Creating Minecraft User

For security reasons, Minecraft should not be run under the root user. We will create a new system user and group with home directory /opt/minecraft. The user will have the minimum necessary permissions to run the Minecraft server:

sudo useradd -r -m -U -d /opt/minecraft -s /bin/bash minecraft

We’ll not set a password for this user. This way, the user will not be able to login via SSHand cannot be compromised. To change to the minecraft user, you’ll need to log in to the server as root or user with sudo privileges.

Installing Minecraft on Ubuntu

Before starting with the installation process, switch to the minecraft user:

sudo su - minecraft

Run the following command to create three new directories inside the user home directory:

mkdir -p ~/{backups,tools,server}
  • The backups directory will store your Minecraft server backups. You can synchronize this directory to your remote backup server.
  • The tools directory will hold the mcrcon client and the backup script.
  • The server directory will contain the actual Minecraft server and its data.

Downloading and Compiling mcrcon

RCON is a protocol that allows you to connect to the Minecraft servers and execute commands. mcron is RCON client written in C.

We’ll download the source code from GitHub and build the mcrcon binary.

Clone the Tiiffi/mcrcon repository from GitHub to the ~/tools/mcron directory:

git clone https://github.com/Tiiffi/mcrcon.git ~/tools/mcrcon

When finished, switch to the mcron directory and build the utility:

cd ~/tools/mcrcongcc -std=gnu11 -pedantic -Wall -Wextra -O2 -s -o mcrcon mcrcon.c

Once completed, verify that mcrcon has been successfully compiled by printing its version:

./mcrcon -v

The output will look something like this:

mcrcon 0.7.1 (built: Jun 23 2020 15:49:44) - https://github.com/Tiiffi/mcrcon
Bug reports:
	tiiffi+mcrcon at gmail
	https://github.com/Tiiffi/mcrcon/issues/

Downloading Minecraft Server

There are several Minecraft server mods such as Craftbukkit or Spigot that allows you to add features (plugins) on your server and further customize and tweak the server settings.

In this guide, we will install the latest Mojang’s official vanilla Minecraft server. The same instructions apply for installing other server mods.

Head over to the Minecraft download page to get the download link of the latest Minecraft server’s Java archive file (JAR). At the time of writing, the latest version is 1.16.

Download the jar file in the ~/server directory with wget:

wget https://launcher.mojang.com/v1/objects/a0d03225615ba897619220e256a266cb33a44b6b/server.jar -P ~/server

Configuring Minecraft Server

Once the download is completed, switch to the ~/server directory and start the Minecraft server:

cd ~/serverjava -Xmx1024M -Xms1024M -jar server.jar nogui

When started for the first time, the server executes some operations, creates the server.properties and eula.txt files and stops.

[17:35:14] [main/ERROR]: Failed to load properties from file: server.properties
[17:35:15] [main/WARN]: Failed to load eula.txt
[17:35:15] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

To run the server, you need to agree to the Minecraft EULA, as indicated by the output above. Open the eula.txt file and change eula=false to eula=true:

nano ~/server/eula.txt
~/server/eula.txt
eula=true

Close and save the file.

Next, open the server.properties file and enable the rcon protocol and set the rcon password:

nano ~/server/server.properties

Locate the following lines and update their values, as shown below:

~/server/server.properties
rcon.port=25575
rcon.password=strong-password
enable-rcon=true
Do not forget to change the strong-password to something more secure. If you don’t want to connect to the Minecraft server from remote locations, make sure the rcon port is blocked by your firewall.

While here, you can also adjust the server’s default properties. For more information about the server settings, visit the server.properties page.

Creating Systemd Unit File

Instead of manually starting the Minecraft server, we will create a Systemd unit file and run Minecraft as a service.

Switch back to your sudo user by typing exit.

Open your text editor and create a file named minecraft.service in the /etc/systemd/system/ directory:

sudo nano /etc/systemd/system/minecraft.service

Paste the following configuration:

/etc/systemd/system/minecraft.service
[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 -Xmx1024M -Xms1024M -jar server.jar nogui
ExecStop=/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password stop

[Install]
WantedBy=multi-user.target

Modify the Xmx and Xms flags according to your server resources. The Xmx flag defines the maximum memory allocation pool for a Java virtual machine (JVM), while Xms defines the initial memory allocation pool. Also, make sure that you are using the correct rcon port and password.

Save the file and reload the systemd manager configuration:

sudo systemctl daemon-reload

You can now start the Minecraft server by typing:

sudo systemctl start minecraft

The first time you start the service, it will generate several configuration files and directories, including the Minecraft world.

Check the service status with the following command:

sudo systemctl status minecraft
● minecraft.service - Minecraft Server
     Loaded: loaded (/etc/systemd/system/minecraft.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-06-23 17:48:44 UTC; 8s ago
   Main PID: 1338035 (java)
      Tasks: 15 (limit: 1074)
     Memory: 465.3M
     CGroup: /system.slice/minecraft.service
             └─1338035 /usr/bin/java -Xmx1024M -Xms1024M -jar server.jar nogui

Finally, enable the Minecraft service to be automatically started at boot time:

sudo systemctl enable minecraft

Adjusting Firewall

Ubuntu ships with a firewall configuration tool called UFW. If the firewall is enabled on your system, and you want to access Minecraft server from the outside of your local network, you need to open port 25565:

sudo ufw allow 25565/tcp

Configuring Backups

In this section, we’ll create a backup shell script and cronjob to automatically backup the Minecraft server.

Switch to the minecraft:

sudo su - minecraft

Open your text editor and create the following file:

nano /opt/minecraft/tools/backup.sh

Paste the following configuration:

/opt/minecraft/tools/backup.sh
#!/bin/bash

function rcon {
  /opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password "$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

Save the file and make the script executable:

chmod +x /opt/minecraft/tools/backup.sh

Next, create a cron job that will run once in a day automatically at a fixed time.

Open the crontab file by typing:

crontab -e

To run the backup script every day at 23:00 paste the following line:

0 23 * * * /opt/minecraft/tools/backup.sh

Accessing Minecraft Console

To access the Minecraft Console, use the mcrcon utility. You need to specify the host, rcon port, rcon password and use the -t switch which enables the mcrcon terminal mode:

/opt/minecraft/tools/mcrcon/mcrcon -H 127.0.0.1 -P 25575 -p strong-password -t
Logged in. Type "Q" to quit!
> 

When accessing the Minecraft Console from a remote location, make sure the rcon port is not blocked.

If you are regularly connecting to the Minecraft console, instead of typing this long command, you create create a bash alias.

Conclusion

We have shown you how to make a Minecraft server on Ubuntu 20.04 and set up a daily backup.

You can now launch your Minecraft client, connect to the server, and start your Minecraft adventure.

If you hit a problem or have feedback, leave a comment below.