How to Install a Minecraft Server on Debian 11
Introduction
By setting up a Minecraft server, you get the power to create and control your own Minecraft worlds. This article explains how to install Minecraft Java Edition server 1.18.2, the latest version of Minecraft Java Edition server for now, on a Debian 11 Bullseye cloud server at Vultr from scratch.
Prerequisites
Before diving in, you need to:
- Deploy a Debian 11 server instance at Vultr near your location with at least 2 GB of memory, which is suitable for hosting up to 10 players with some basic plugins or mods. This article uses 203.0.113.100 as an example IP address.
1. Harden the System
Open your favorite SSH client on your desktop machine, such as PuTTY on Windows, and then log in to your server instance as root with the initial password you found on the Server Details page.
After logging in, execute the following tasks to harden the system.
Find out if any swap file or swap partition is in use:
# swapon -s
If so, feel free to go to the next task. Otherwise, set up a swap file of 2GB to smooth system operations:
# fallocate -l 2g /swap
# chmod 0600 /swap
# mkswap /swap
# swapon /swap
# echo '/swap none swap defaults 0 0' | tee -a /etc/fstab
# free -m
Change the initial root password to a private and strong one, such as r00tyHvM%2ka$8E3:
# echo 'root:r00tyHvM%2ka$8E3' | chpasswd && history -d -1
Create a non-root user account with sudo privileges, such as mcninja, and then also set up a strong password for it, such as sud04QeXbcx#6&Cw:
# useradd -ms /bin/bash mcninja
# echo 'mcninja:sud04QeXbcx#6&Cw' | chpasswd && history -d -1
# echo 'mcninja ALL=(ALL) NOPASSWD: ALL' | tee -a /etc/sudoers.d/designated
# chmod 0440 /etc/sudoers.d/designated
Setup UFW firewall rules to allow only traffic on SSH (22) and the default Minecraft (25565) ports:
# ufw default deny
# ufw allow 22
# ufw allow 25565
# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y:key_enter:
# ufw status verbose
Update the system, and then reboot:
# apt update
# apt upgrade -y
# apt autoremove -y
# shutdown -r now
After the server instance gets up and running again, log in as the newly created sudo user mcninja for the following tasks.
2. Install the Temurin 17 OpenJDK Distribution
Minecraft Java Edition server 1.18.2 requires Java 17. Among various Java 17 distributions, this article chooses to install Temurin (the continuation of AdoptOpenJDK) 17 OpenJDK binaries from Eclipse Adoptium.
Make sure required packages are in place:
$ sudo apt install wget apt-transport-https -y
Download the Eclipse Adoptium GPG key for package verification:
$ wget -O - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /usr/share/keyrings/adoptium.asc
Setup the Eclipse Adoptium Advanced Packaging Tool (APT) repository:
$ echo "deb [signed-by=/usr/share/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | sudo tee /etc/apt/sources.list.d/adoptium.list
Install Temurin 17 OpenJDK:
$ sudo apt update
$ sudo apt install temurin-17-jdk -y
Setup the JAVA_HOME environment variable, and then add Temurin 17 OpenJDK to the PATH environment variable:
$ echo "export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:bin/java::")" | sudo tee -a /etc/profile && source /etc/profile
$ echo "export PATH=$PATH:$JAVA_HOME/bin" | sudo tee -a /etc/profile && source /etc/profile
$ echo $JAVA_HOME
$ echo $PATH
Confirm the installation of Temurin 17 OpenJDK:
$ java --version
openjdk 17.0.2 2022-01-18
OpenJDK Runtime Environment Temurin-17.0.2+8 (build 17.0.2+8)
OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode, sharing)
3. Install Minecraft Java Edition Server 1.18.2
Create a directory for Minecraft Java Edition server:
$ sudo mkdir /opt/minecraft
$ sudo chown mcninja:mcninja /opt/minecraft
Download Minecraft Java Edition server 1.18.2 using the download link found from the official Minecraft Java Edition Server Download Page.
$ cd /opt/minecraft
$ wget https://launcher.mojang.com/v1/objects/c8f83c5655308435b3dcf03c06d9fe8740a77469/server.jar -O minecraft_server.1.18.2.jar
Create a text file to confirm that you agree to the Minecraft end-user license agreement:
$ echo "eula=true" > /opt/minecraft/eula.txt
Test drive Minecraft Java Edition server 1.18.2:
$ cd /opt/minecraft
$ java -Xms1024M -Xmx1024M -jar /opt/minecraft/minecraft_server.1.18.2.jar nogui
...
[06:59:58] [Server thread/INFO]: Done (62.240s)! For help, type "help"
Note: In the previous command, the -Xms1024M and -Xmx1024M flags define initial and maximum memory allocation values for the Minecraft Java Edition server. Both are 1024M in this case. The two values are suitable for a Debian 11 server instance with 2GB of memory. Consider increasing the values if your server instance has more memory.
When you see the server prompts Done!, which means it is up and running:
- Launch your Minecraft client.
- Add a server name and the server's IPv4 address, such as 203.0.113.100 for example.
- Join the server to explore the newly created world.
After the test drive, press Ctrl+C in the SSH terminal to stop Minecraft Java Edition server 1.18.2.
To customize your Minecraft Java Edition server, you need to edit a newly generated file named server.properties within the Minecraft Java Edition server directory.
For example, if you want to allow non-premium players to log in to your Minecraft server:
$ nano /opt/minecraft/server.properties
Find the line:
online-mode=true
Change it to:
online-mode=false
Press Ctrl+O, Enter, and Ctrl+X to save your changes and quit. And then restart the Minecraft Java Edition server to load the new settings.
To learn more about configuring Minecraft server properties, visit the Minecraft Wiki page.
4. Install Supervisor
To keep the Minecraft Java Edition server running, it's recommended to use the Supervisor program to start and restart the Minecraft Java Edition server processes automatically.
Install the Supervisor program:
$ sudo apt install supervisor -y
$ supervisord -v
Start the Supervisor service:
sudo systemctl daemon-reload
sudo systemctl start supervisor.service
sudo systemctl enable supervisor.service
Create a Supervisor configuration file for the Minecraft Java Edition server:
$ sudo nano /etc/supervisor/conf.d/minecraft.conf
Populate the file with:
[program:minecraft]
directory=/opt/minecraft/
command=java -Xms1024M -Xmx1024M -jar /opt/minecraft/minecraft_server.1.18.2.jar nogui
user=mcninja
autostart=true
autorestart=true
stderr_logfile=/var/log/supervisor/error_minecraft.log
stderr_logfile_maxbytes=100MB
stdout_logfile=/var/log/supervisor/out_minecraft.log
stdout_logfile_maxbytes=100MB
Press Ctrl+O, Enter, and Ctrl+X to save the configuration file and quit.
Load the Minecraft Java Edition server configuration file:
$ sudo supervisorctl reread
$ sudo supervisorctl update
Determine if the Minecraft Java Edition server is up and running:
$ tail -f /var/log/supervisor/out_minecraft.log
...
[08:15:49] [Server thread/INFO]: Done (123.024s)! For help, type "help"
Press Ctrl+C to quit the tail program at any time.