EnderDash Team7 min read

How to self-host a Minecraft server on Linux with Paper

A practical step-by-step guide to running a Minecraft Java server on Linux with Paper, including setup, updates, backups, and the operational work that starts after launch.

GuidesSelf-HostingPaperOperations

If you want full control over your hardware, plugins, backups, and update timing, self-hosting a Minecraft server still makes a lot of sense.

This guide walks through a clean Linux setup for one Minecraft Java server using Paper. It assumes a recent Debian or Ubuntu-style system and a basic comfort level with the terminal.

Quick answer

If you want the shortest path, do four things first: match Java to the Paper build, run the server as a dedicated Linux user, manage it with systemd, and open 25565/TCP in the right place. Most first-day setup failures come from the wrong Java version, missing EULA acceptance, or firewall mistakes.

Pick your environment first

Choose this path if the server runs on a machine behind your own router.

You will usually need:

  • a stable LAN IP for the server
  • a router port forward for 25565/TCP
  • a host firewall rule if one is enabled

What a good first install looks like

Java matches Paper

You checked the exact Java version against the Paper build you chose.

The service restarts cleanly

You can start, stop, and restart the server with one predictable command.

Players can connect

The game port is reachable from the right network path for your setup.

Backups exist before updates

You can roll back world and plugin data before changing the server.

Why use Paper instead of the vanilla server

For most self-hosted Minecraft servers, Paper is the sensible default.

It is widely used, performs better than the vanilla server in most real-world cases, and gives you access to the plugin ecosystem used by a lot of admins. Paper also publishes clear getting-started docs and a version-to-Java compatibility matrix, which matters because Java requirements have changed recently.

As of April 27, 2026, Paper's own docs say:

  • Minecraft 1.20 through 1.21.11 use Java 21
  • newer 26.1+ Paper builds use Java 25

That means the first thing to verify is not RAM. It is the exact Java version your chosen Paper build needs.

What this guide covers

This guide is for one self-hosted Java server on Linux.

It covers:

  • installing the correct Java runtime
  • creating a dedicated Linux user
  • downloading and starting Paper
  • running the server with systemd
  • opening the game port
  • handling basic updates and backups

It does not cover:

  • setting up a proxy network with Velocity
  • running multiple nodes or multiple game types
  • hosting a public control panel like Pterodactyl

Before you start

You need:

  • a Linux machine or VPS with sudo access
  • enough RAM and CPU for the player count you expect
  • a reachable network path for players
  • a Paper download URL for the exact Minecraft version you want

If this server will be public, also decide now whether it will live:

  • on a home connection behind a router
  • on a VPS with a cloud firewall or security group

That difference matters when you get to networking.

Set the server up

Install the right Java version

First, check whether Java is already installed:

java -version

If you do not have the required version yet, install it with your package manager. For example, on a recent Debian or Ubuntu system:

sudo apt update
sudo apt install openjdk-21-jre-headless

That package name is an example for servers running a Paper build that still uses Java 21. If you are following Paper's newest branch, install the Java version Paper currently documents for that branch instead.

Verify again:

java -version

Create a dedicated server user

Do not run your Minecraft server as your normal login user or as root.

Create a dedicated system user and a home directory for server files:

sudo useradd \
  --system \
  --home /srv/minecraft \
  --create-home \
  --shell /usr/sbin/nologin \
  minecraft

Create a place for the live server and backups:

sudo mkdir -p /srv/minecraft/server
sudo mkdir -p /srv/minecraft/backups
sudo chown -R minecraft:minecraft /srv/minecraft

Download Paper

Paper publishes runnable JARs from its downloads page. Copy the exact download URL for your target version, then switch to the server user and place the file in the server directory. Naming it paper.jar keeps later commands simple:

sudo -u minecraft -H bash
cd /srv/minecraft/server
curl -Lo paper.jar "<paper-download-url>"

You now have the server binary, but the rest of the server files do not exist yet. The first start creates them.

Run the server once and accept the EULA

Start the server once so Paper can generate the working directory:

cd /srv/minecraft/server
java -Xms2G -Xmx4G -jar paper.jar --nogui

The first run stops because the EULA has not been accepted yet. Edit eula.txt and change eula=false to eula=true:

sed -i 's/^eula=false$/eula=true/' /srv/minecraft/server/eula.txt

At this point you also have server.properties, logs/, plugins/, and the world folders on disk.

paper.jar
eula.txt
server.properties

Create a start script

You can start the server with a long Java command every time, but it is cleaner to put that command in a script.

Create /srv/minecraft/server/start.sh with content like this:

#!/usr/bin/env bash
cd /srv/minecraft/server
exec java -Xms2G -Xmx4G -jar paper.jar --nogui

Then make it executable:

chmod +x /srv/minecraft/server/start.sh

Two quick notes here:

  • Xmx is the maximum heap the JVM can use
  • more RAM is not always the answer to lag, especially if your single-core CPU performance is weak

If you are hosting a small friends-only server, start conservatively and increase memory only when you have evidence that you need it.

Run the server with systemd

systemd is a better long-term setup than manually keeping the process alive in a shell window.

Create /etc/systemd/system/minecraft.service:

[Unit]
Description=Minecraft Paper Server
After=network.target

[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/srv/minecraft/server
ExecStart=/srv/minecraft/server/start.sh
Restart=on-failure
RestartSec=10
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

Reload systemd, enable the service, and start it:

sudo systemctl daemon-reload
sudo systemctl enable --now minecraft

Useful commands from here on:

sudo systemctl status minecraft
sudo journalctl -u minecraft -f
sudo systemctl restart minecraft
sudo systemctl stop minecraft

Open the game port

For Minecraft Java, the default server port is 25565/TCP unless you changed it in server.properties.

If you use ufw, open that port:

sudo ufw allow 25565/tcp

If this server lives behind a home router, you also need to forward 25565/TCP from the router to the machine's local LAN IP.

If this server lives on a VPS, you usually do not need "port forwarding" at all. You need an inbound firewall or security-group rule that allows 25565/TCP.

Set the basics in server.properties

Before inviting people, open server.properties and set the obvious items:

  • motd
  • difficulty
  • gamemode
  • max-players
  • view-distance
  • simulation-distance
  • white-list

Two defaults matter more than people think:

  • Keep online-mode=true unless you fully understand the security tradeoff.
  • Turn the allow list on if this is meant to be a private server.

Install plugins carefully

Paper becomes much more useful once you add plugins, but plugin quality varies a lot.

A few practical rules:

  • add one plugin at a time when the server is new
  • keep a copy of the plugin JAR and its config before large changes
  • restart only after you know what changed
  • track your plugin versions alongside your Minecraft version

The messy part of Minecraft administration often starts here, not at the Java install step.

Back up the right things

At minimum, back up:

  • the world folders
  • plugins/
  • server.properties
  • any plugin-specific config that matters to your economy, permissions, or moderation flow

For a small server, a simple first pass is enough:

  1. stop the server cleanly
  2. archive /srv/minecraft/server
  3. copy the archive to another disk or object store

Do not treat "the disk is still there" as a backup strategy.

Update without making a mess

Paper updates are usually straightforward, but major Minecraft upgrades still deserve caution.

A safe update flow looks like this:

  1. Take a backup.
  2. Read the Paper and plugin changelogs for your target version.
  3. Replace paper.jar with the new build.
  4. Start the server and watch the console closely.
  5. Check that plugins, permissions, and world loading all behave normally.

If you jump across major Minecraft versions, expect at least some plugin churn.

Common first-day mistakes

Where self-hosting gets harder

Most guides stop once the server is reachable. That is the easy part.

The ongoing work is what consumes time:

  • reading logs when a plugin breaks after an update
  • editing configs without losing context
  • keeping track of who changed what
  • updating plugins safely
  • inspecting player issues without bouncing between SSH, FTP, and chat
  • handing the server off to teammates without giving everyone raw shell access

That is the gap between "I can run a Minecraft server" and "I can operate this cleanly every week."

Where EnderDash fits

If you like self-hosting the game server but do not want to babysit a second public panel, that is where EnderDash is meant to fit.

The server stays on your infrastructure. You keep your host, your Linux box, your plugin stack, and your world data. EnderDash is the admin layer for the day-to-day work after launch: console, files, plugins, permissions, players, and shared operational context.

If you want to see that flow, start with:

Related articles