Intro Image

Build a Vanilla Minecraft Server on Linux
The Nether Update 1.16.5

Now on PaperMC

Building a full Linux modded server? See the Modded Linux server install documentation.
Building on Raspberry Pi 4? See the Raspberry Pi 4 install documentation.

Minecraft Server Version: PaperMC 1.16.5
Java Version: openjdk version "11.0.9.1"

Approximate time to complete: 15 to 30 minutes depending on your server. This also depends on your comfort level working from the Linux command line. Give yourself plenty of time.

Youtube Channel - Swifties
Please support this youtube channel highlighting Hypixel Skywars play.
Swifties

Get a $100 60 day credit towards a dedicated server with DigitalOcean by using this link.

Step 1 - Install Java
Step 2 - Setup Your Environment
Step 3 - Install Minecraft
Step 4 - Configure your new PaperMC Minecraft Server
Step 5 - Optional-- Configure Minecraft to start on bootup
Step 6 - Connect to Your Server
Step 7 - Hardening Your Minecraft Server if Visible on the Internet
Step 8 - Backup Your Server Frequently
Step 9 - Upgrading Your Minecraft Server
Step 10 - Recovering a Corrupted World
Step 11 - Creating Automatic Backups
Step 12 - Plugins and Datapacks

Donate Your donations keep this site ad free -- Thank You

Report errors in this guide. Your feedback is appreciated.

Why Linux and Not a Fully Managed Solution?

This is a valid question. A fully managed solution with a Minecraft hosting service can offer many benefits. There is no need to secure the underlying Linux OS, this is all done for you. You get a nice graphical front end to manage your server, automated backups, DNS management to access your server, SFTP access. Also, Minecraft Server version 1.16.x is getting very cpu intense. It's just no longer cost effective to rent a dedicated server or VPS that will run Minecraft Server 1.16.x smoothly. There are many good Minecraft Server hosting companies that provide servers that are optimized for Minecraft. I will not list them here but feel free to reach out to me for suggestions.

That being said, if you are determined to roll your own you can get a credit towards your server with DigitalOcean if you sign up through this referral link. Sizing of your server will really depend on how you intend to use it.

Here are some of the reasons you may want to build your own;

1 - Maximum control right down to the OS level.
2 - Prefer working from the command line than from a Web browser to manage your server.
3 - Have a server available which isn't costing you anything and a good internet link.
4 - Want to learn how to do it yourself from start to finish.
5 - Want to setup a private testing server for mods, datapacks, plugins or redstone.
6 - Finally, the most important reason of all.....Because You Can!

Which Linux Distribution?

Recommending a specific Linux distribution as "the best option" is like recommending a religion as the "best one to follow". You will either be preaching to the converted or alienating the person you are having the discussion with.

For my purposes I like using Debian and its derivitaves. I have used other distributions and have liked them as well. This guide uses Ubuntu Server 18.04 LTS using the apt package manager. When a package manager is called for, just substitute the relevant commands for your favorite distro. They are all good.

Root Access to Your Server

The instructions assume that you have root (Administrator) access to your server. For simplicity I assume you are logging in as the root user. All of these commands will also work with sudo. If running sudo from your user account then make sure to add it when necessary. I will not be using sudo in front of these command line arguments throughout the document.

Step 1 - Install Java

Minecraft Server requires Java to run. You can install it on Ubuntu as follows;

a) Login to your server via ssh or open a console window if this is a Linux Desktop system.

via Linux:   ssh username@your_domain
via Windows: Connect using a SSH client such as Putty

b) Run the following command

    apt install default-jre
c) Finally check your version to make sure all went well during install.
    i) java -version

You should see the following;

    openjdk version "11.0.9.1" 2020-11-04
    OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04)
    OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)

Step 2 - Setup Your Environment

a) This is a good time to do a full upgrade of your system. If using a Debian based system you can use apt, otherwise use your distributions package manager.
    apt update && apt -y upgrade
b) Install screen (This will be needed to run your minecraft server console while logged out of your Linux server).
    apt install screen

Step 3 - Install Minecraft

We are going to install the PaperMC Minecraft Server build. This build is an excellent choice for running an efficient and optimized server.

a) create the folder

    cd /opt
    mkdir minecraft
    cd minecraft
b) download the latest jar file from PaperMC's website. There is a new version released every day, download it as follows but pick the latest one.
    wget https://papermc.io/api/v2/projects/paper/versions/1.16.5/builds/445/downloads/paper-1.16.5-445.jar

Step 4 - Configure your new PaperMC Minecraft Server

a) run the server for the first time. Make sure you are in the /opt/minecraft directory. The following command assumes a server with 4GB of RAM.
    java -Xms128M -Xmx3500M -jar /opt/minecraft/paper-1.16.5-445.jar nogui
*Note 1: I am using standard java startup parameters. For further optimization consider using the Aikar Flags instead.

*Note 2: -Xms128M and -Xmx3500M are parameters telling java to start with 128MB of ram as a minimum for the jar file and let it grow to 3500MB max as needed. If your server has more ram to dedicate then you can adjust these numbers. More players mean you need more. These are not constructs unique to Minecraft. Do a google search on (xms xmx jvm) and you will get some good information on how to manage a JVM's heap. From there you can make a better determination on what you should set this to for your servers resources and how you will be using your server.

b) accept the EULA. The first time you try to run your minecraft server you will be required to accept the EULA.

    nano eula.txt
c) Change the following line to true and save the file
    eula=true
d) Run the server a second time to generate your world. World generation will take a while the first time. Subsequent server starts will be much quicker.
Before doing this, you can download the following server.properties file and replace the one that was created automatically. (or copy/paste directly to your existing server.properties file from the console).
This server.properties file will give you a standard survival world on normal difficulty.

Edit the file with your preferred seed if you have one and it will generate the world that you specify.
Minecraft Atlas is great site to find new interesting seeds. Although the site says Minecraft 1.8, the seeds are compatible with 1.16.5
View the Wiki for all server.properties configuration options.
    nano server.properties
    
    change the following line with your preferred seed directly after the = sign
    level-seed=
    
    If you leave it blank Minecraft will generate a random world on first launch
On a low power system you can lower the view distance. Start with 10 and adjust it downward if you get some lag. If you have plenty of CPU and RAM you can increase it as well.
    java -Xms128M -Xmx3500M -jar /opt/minecraft/paper-1.16.5-445.jar nogui   
e) make things a little easier on yourself by using a script to start minecraft
Download
    cd /opt && mkdir scripts
    cd scripts
    nano minecraft.sh
f) Copy and paste the following in your minecraft.sh file
   
    #!/bin/bash
    cd /opt/minecraft/ && java -Xms128M -Xmx3500M -jar /opt/minecraft/paper-1.16.5-445.jar nogui
g) Save the file and make it executable
    chmod +x minecraft.sh
h) Start your server
    screen <---hit enter at the informational message
    /opt/scripts/minecraft.sh
    
    To exit the screen session hit 'CTRL AD'
Download

Step 5 - Optional-- Configure Minecraft to start on bootup.

a) Add a command to /etc/rc.local to start your Minecraft server everytime the server boots up.
    nano /etc/rc.local
Right before the last line 'exit 0' add the following command, save and exit the file. This will allow the minecraft server to start in a detached screen session when the server boots up.
    screen -dm -S minecraft /opt/scripts/minecraft.sh 


Note: rc.local still works on some Debian derivitaves such as Ubuntu 16.04LTS. On Debian proper and Ubuntu 18.04 LTS, rc.local has been deprecated. To re-enable rc.local you can simply re-create /etc/rc.local file as follows;
cd /etc
nano rc.local
in the rc.local file copy and paste the following
#!/bin/sh
screen -dm -S minecraft /opt/scripts/minecraft.sh
exit 0
Save the file and make it executable
chmod +x rc.local

If that doesn't work you may have to re-enable the rc.local service. Use the following set of instructions. However this should not be necessary.

Also note that I have not tested this on Ubuntu 20.04LTS but you should be able to re-enable rc.local there as well.


b) To access your console after bootup use the following command;
    screen -r minecraft
    
    To exit the screen session use the following command
    CTRL AD

Note: Some people may question why I am using rc.local instead of an init script to start the minecraft server. I don't want to run the server in the background, I want a full screen session accessible to view and interact with the minecraft server console. If I want to stop the server I want to issue a stop command there, not from a script in init.d. Also rc.local is one line and is super easy. It just works well for this situation. I use init scripts for other things and they are great, but this is just a preference I have for a minecraft server. Do what works for you.

Step 6 - Connect to Your Server

a) In Minecraft select the Multiplayer button

b) Click the Add Server button
c) Edit the Server Info as follows (insert the IP address of your Linux server)

Add Server Image

d) Enter your world for the first time and have fun!!!

New Server Image

Step 7 - Hardening Your Minecraft Server if Visible on the Internet

If you want friends to access the server from outside your home network you will have to forward external requests to port 25565 on your router to your server. Check the documentation for your router.

a) If you are installing this on a VPS or dedicated server you will most likely want to enable the firewall with netfilter/iptables. You should be blocking ports that are not used or that you do not want to expose to the internet. An example rule for a minecraft server would be as follows;

    /sbin/iptables -A INPUT -p tcp --dport 25565 -m state --state NEW -j ACCEPT
This rule says to accept all new tcp packet requests to the minecraft server listening on port 25565.

To help you get started please refer to my article on setting up The Linux Five Minute Firewall.

Note:If you are not comfortable doing this then a VPS or dedicated server solution may not be a good one for you. If you manage a full Linux server connected directly to the internet with a public IP address, it is your responsibility to ensure you are hardening and securing it properly. If this is not something you want to do then a managed solution with one of the many Minecraft hosting companies may be a better option for you. They take care of all the dirty work like this.

b) Activate whitelisting. It is extremely important to activate whitelisting if your server is visible on the internet. Port 25565 is a popular port and is actively scanned by all kinds of people using automated scripts. They are looking for open servers so they can login and cause havoc on your world. Whitelisting will stop unauthorized users from joining your world.
In your server.properties set the following value to true;

    white-list=true
    
Restart your minecraft server and run the following command at the console for each user you would like to allow.
    
    whitelist add minecraft_user1
    whitelist add minecraft_user2

To remove a user

    whitelist remove minecraft_user2   
When an unauthorized user tries to connect to your server they will simply get a message that they are not whitelisted and will be turned away.

Step 8 - Backup Your Server Frequently

To backup your server do the following;
    login to your server
    cd /opt
    tar -zcvf minecraft_backup.tar.gz minecraft
Copy the minecraft_backup.tar.gz to a safe location, preferably another computer. This file can be used to restore your world if needed. Get into the habit of doing this regularly. You can even use the cron scheduler to automate the process at a specified time each day as explained in Step 11.

Step 9 - Upgrading Your Minecraft Server

You've done it. You have successfully built your Minecraft Server. PaperMC releases new versions all the time to fix bugs. No problem, upgrading your server to the latest version couldn't be easier.

a) download the latest PaperMC file like you did in Step 3

    cd /opt/minecraft
    wget https://papermc.io/api/v2/projects/paper/versions/1.16.5/builds/446/downloads/paper-1.16.5-446.jar (or whatever the latest version is)
c) Update your minecraft.sh startup script to use the latest jar file
    cd /opt/scripts
    nano minecraft.sh
    
    Update the command to start the new jar file
    cd /opt/minecraft/ && java -Xms128M -Xmx3500M -jar /opt/minecraft/paper-1.16.5-446.jar nogui
    Save the file
e) Restart your server by either running your startup script or reboot your Linux server if you configured it to start on boot.

Step 10 - Recovering a Corrupted World

The importance of regular backups cannot be overstated. It happens, you try to log into your awesome minecraft world and you see exception errors only. Or you enter the world and all kinds of things have disappeared, your sweet enchanted sword is gone, your diamonds chest is empty. Hours of work and play are now destroyed. Your world may have corrupted for any number of issues such as software problems or disk errors.

If you did your backups like we discussed in Step 8 then you are laughing. To restore your previous backup do the following;

Delete your existing minecraft folder

    cd /opt
    rm -r -f minecraft  
    
copy your previously saved minecraft.tar.gz file to your /opt folder.

restore your world

    tar -zxvf minecraft.tar.gz

That's it, restart your server and you have successfully restored from your last good backup. Any changes you made since that backup are gone, so it is important to do your backups regularly.

Step 11 - Creating Automatic Backups

These instructions will help you create automatic backups of your minecraft world, so that you don't have to worry about remembering. These instructions will do the following;

1) Provide a ready to use script to initiate the backup
2) Configure the cron scheduler to start the backup at 2:02am everyday
3) Name the backup day_of_week-minecraft-.tar.gz

This will create a 7 day rotation of backups with the oldest being overwritten with a new one.

NOTE: The DriveBackupV2 plugin is another solid option, especially if you are using a Minecraft hosting provider and don't have access to the command line. This is mentioned in Step12 later on.

a) Create your script.

    cd /opt/scripts
    nano mcbackup.sh
b) copy and paste this script into your mcbackup.sh file you have open in the nano editor. Change the dest= line to point to the folder you want your backups to reside in.

#!/bin/sh
####################################
#
# Backup minecraft world to a
# specified folder.
#
####################################

# What to backup.  Name of minecraft folder in /opt
backup_files="minecraft"

# Specify which directory to backup to.
# Make sure you have enough space to hold 7 days of backups. This
# can be on the server itself, to an external hard drive or mounted network share.
# Warning: minecraft worlds can get fairly large so choose your backup destination accordingly.
dest="/home/username/minecraftbackups"

# Create backup archive filename.
day=$(date +%A)
archive_file="$day-$backup_files-.tar.gz"

# Backup the files using tar.
cd /opt && tar zcvf $dest/$archive_file $backup_files

c) Save the file by pressing CTRL-X and entering Y

d) Make the file executable

    chmod +x mcbackup.sh
e) Test your script. Before creating the scheduled task ensure your script worksminecraft/index.html

    /opt/scripts/mcbackup.sh

You should see the backup happening. Once completed open the file it created which should be in the location that you specified. Once you have confirmed that your backup works, create a scheduled task to automate the backups.

f) Create a scheduled task with the cron scheduler
Make sure you are logged in as root so that it writes to your root user crontab.

    crontab -e
Enter this line at the end of your root crontab and then save it.
    02 2 * * * /opt/scripts/mcbackup.sh &> /dev/null
This will create your backup every day at 2:02 am. That's it, in your folder where you specified your backups to be created you will have the following after one week;

Monday-mcbackup-.tar.gz
Tuesday-mcbackup-.tar.gz
Wednesday-mcbackup-.tar.gz
Thursday-mcbackup-.tar.gz
Friday-mcbackup-.tar.gz
Saturday-mcbackup-.tar.gz
Sunday-mcbackup-.tar.gz
Every day your oldest file will be replaced with the new backup giving you a seven day rotation of backups.

Step 12 - Plugins and Datapacks

One of the advantages of running a PaperMC server is that all the plugins that are available for Spigot are compatible. Plugins and datapacks are a great way to extend some cool functionality in-game and to make your server easier to manage.

Plugins are usually files that end with the .jar extension and can be uploaded to your plugins folder. After uploading a plugin restart the server which will start the plugin. Often (but not always) the plugin will create a folder called plugins/plugin_name where you will find a file called config.yml. This is where you can configure the plugin as desired.

Datapacks are like plugins but are inserted, usually as .zip files in the world/datapacks folder. Same idea as plugins, simply restart the server after installing the datapack.

Keep in mind that the more plugins and datapacks you install, the more resources your server will use or the more conflicts can happen. If you start seeing strange things happening on your server you may have a plugin causing you some grief. Remove plugins one by one to find the offending one. I personally like to go light on plugins and datapacks but I have ones that I deem either essential or that just make the game better.

You can download plugins directly from Bukkit. Just make sure they are compatible with your version of Minecraft.
Some of my favorite datapacks are available from Vanilla Tweaks.

My favorite Plugins and Datapacks

Plugins
  • Fast Leaf Decay - Why wait for leaves to despawn?
  • One Player Sleep - Only need one player to sleep to end the night.
  • Graves - fun plugin that creates a grave when a player dies and spawns a zombie with the players head which can drop.
  • DriveBackupV2 - backup your world automatically at specified intervals
  • CoreProtect - If you run a server this one is essential in my opinion. Allows you to roll back damage and find out who did it. Also lets you see who opened and removed items from chests. This is the perfect grief control plugin.

    Datapacks

  • afk display (Vanilla Tweaks) - greys the name of an afk player when hitting tab.
  • More Mob Heads (Vanilla Tweaks) - Mobs have a chance of dropping their head.

    That's it! Now have fun! I hope these instructions were helpful and that you learned a bit of how a Minecraft server functions.

    Donate

    If you found these instructions helpful a small donation is appreciated. I will be keeping these instructions up to date with the latest versions of Minecraft and Java.

    PayPal


    Copyright © 2021 Al Audet