Having your own **Minecraft server** means playing with whoever you want, with your rules, your plugins and no queues or ads. "Free" Minecraft hosts make a living out of limiting you (they shut down on their own, run slow, inject ads); with a VPS you get a real server, on 24/7, for the price of a few coffees a month.

This guide sets up a **Minecraft Java Edition** server with [Paper](https://papermc.io), the most used server software (vanilla-compatible and much faster).

## How much RAM you need

| Regular players | VPS RAM | vCores |
|---|---|---|
| 1-5 (friends) | 2-4 GB | 2 |
| 5-20 | 4-8 GB | 2-4 |
| 20+ or many plugins | 8 GB or more | 4+ |

Disk barely matters at first (a world takes a few GB), but make it **NVMe**: chunk loading times notice it. Start small: on a [GINERNET VPS](https://ginernet.com/en/vps/) you can add RAM and CPU in minutes when the server fills up.

## Step 1: install Java

With Ubuntu 24.04 on the VPS, connect over SSH and install Java 21 (required for Minecraft 1.20.5+):

```
apt update && apt install -y openjdk-21-jre-headless
```

## Step 2: download Paper

```
mkdir -p /opt/minecraft && cd /opt/minecraft
```

Grab the latest `.jar` from [papermc.io/downloads](https://papermc.io/downloads/paper) (right click → copy link) and download it with `wget`, saving it as `paper.jar`:

```
wget -O paper.jar "JAR_URL"
```

## Step 3: first boot and EULA

```
java -Xms2G -Xmx2G -jar paper.jar --nogui
```

The first boot stops asking you to accept the license. Accept it and you are set:

```
echo "eula=true" > eula.txt
```

Adjust `-Xms`/`-Xmx` to the RAM you want to dedicate (leave ~1 GB free for the system: on a 4 GB VPS, use `-Xmx3G`).

## Step 4: run it as a service (systemd)

So the server starts on its own and survives reboots, create `/etc/systemd/system/minecraft.service`:

```
[Unit]
Description=Minecraft (Paper)
After=network.target

[Service]
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms2G -Xmx2G -jar paper.jar --nogui
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

And enable it:

```
systemctl daemon-reload
systemctl enable --now minecraft
```

## Step 5: open the port and connect

Minecraft Java uses port **25565 TCP**. Open it in the firewall (at GINERNET, from the Firewall section of the Manager) and add the server in the game using the VPS IP. You are in.

## Basic configuration

Edit `server.properties` (and restart with `systemctl restart minecraft`):

- `motd`: the name shown in the server list.
- `max-players`: player limit.
- `white-list=true` + the `whitelist add <player>` command: only people you approve get in. Highly recommended if the port is open to the internet.
- `view-distance`: lower it to 8 if RAM is tight.

## Backups

The whole world lives in `/opt/minecraft/world*`. A nightly cron that `tar`s those folders (ideally copying it off the VPS) saves you from any griefing or corruption:

```
tar czf /root/backups/mc-$(date +%F).tar.gz -C /opt/minecraft world world_nether world_the_end
```

:::tip
Want plugins? With Paper just drop the `.jar` files into the `plugins/` folder and restart. Start with EssentialsX (basic commands) and CoreProtect (griefing rollback).
:::