diff --git a/_posts/2026-08-23-self-hosting-a-minecraft-server-on-a-pi5.md b/_posts/2026-08-23-self-hosting-a-minecraft-server-on-a-pi5.md new file mode 100644 index 0000000..61ec7bb --- /dev/null +++ b/_posts/2026-08-23-self-hosting-a-minecraft-server-on-a-pi5.md @@ -0,0 +1,134 @@ +--- +layout: post +author: Sam Hadow +tags: games sysadmin +--- + +This guide assumes you already have a minimal install of debian 13 on your Pi5. + +# Steps + +## 1. Installing the required packages + +```bash +sudo apt install default-jre openjdk-25-jre +``` + +## 2. Running the server + +### 2.1) Creating a dedicated user: +```bash +sudo useradd -m minecraft +``` + +### 2.2) Enabling autologin for minecraft on TTY2 +```bash +sudo mkdir -p /etc/systemd/system/getty@tty2.service.d +``` +and in this folder I created this file: +```ini +#/etc/systemd/system/getty@tty2.service.d/autologin.conf +[Service] +ExecStart= +ExecStart=-/sbin/agetty --autologin minecraft --noclear %I $TERM +``` + +### 2.3) Enabling lingering for minecraft (which is needed to start user systemd services even without a shell session) +```bash +sudo loginctl enable-linger minecraft +``` + +### 2.4) Downloading the minecraft server: + +Download the latest version of fabric minecraft server from [here](https://fabricmc.net/use/server/) +For example: +```bash +sudo curl -o /home/minecraft/server.jar https://meta.fabricmc.net/v2/versions/loader/26.2/0.19.3/1.1.2/server/jar +``` + +### 2.5) Creating the systemd service +First creating the folder: +```bash +sudo mkdir -p /home/minecraft/.config/systemd/user +``` +And then a service unit file: +```ini +#/home/minecraft/.config/systemd/user/minecraft.service +[Unit] +Description=Minecraft Server +After=network-online.target +Wants=network-online.target + +[Service] +WorkingDirectory=/home/minecraft +ExecStart=/usr/bin/java -Xmx4G -jar /home/minecraft/server.jar nogui + +Restart=on-failure +RestartSec=5 + +[Install] +WantedBy=default.target +``` + +After this make sure the ownership is correct: +```bash +sudo chown -R minecraft:minecraft /home/minecraft +``` + +And then to start the service: +```bash +sudo systemctl --user --machine=minecraft@.host daemon-reload +sudo systemctl --user --machine=minecraft@.host start minecraft +``` + +after the first start you'll need to accept the EULA: +```ini +#/home/minecraft/eula.txt +eula=TRUE +``` + +```bash +sudo systemctl --user --machine=minecraft@.host restart minecraft +``` + + +## 3. Checking logs + +To check the minecraft server related logs, we can use the following command: +```bash +sudo journalctl _UID=$(id -u minecraft) +``` + +## 4. Additional remarks + +### 4.1) Server properties + +You can change the server properties in `/home/minecraft/server.properties`. +I recommend enabling the whitelist if your server is exposed on the internet. + +### 4.2) Executing commands + +In `/home/minecraft/server.properties` enable RCON: +```ini +enable-rcon=true +rcon.port=25575 +rcon.password=CHANGE_ME +``` + +Ideally you now want strict permissions on this file since it contains your RCON password in cleartext: +```bash +sudo chmod 600 /home/minecraft/server.properties +``` + +Then you can administer your server with a RCON client like mcrcon: +```bash +mcrcon -H 127.0.0.1 -P 25575 -p 'YOUR_RCON_PASSWORD' +``` + +### 4.3) Mods + +Put your mods in `/home/minecraft/mods` +I recommend installing these mods: + - [fabric api](https://modrinth.com/mod/fabric-api) + - [carpet](https://modrinth.com/mod/carpet) : For technical minecraft players + - [lithium](https://modrinth.com/mod/lithium) : For optimizations