SameOS ~/tools/minecraft-bedrock-linux-server.md

Installing Minecraft Bedrock Dedicated Server Safely on Ubuntu Linux

Published and official references checked 2026-08-29 · SameOS operator

A Java server guide cannot be reused for Bedrock. Bedrock Dedicated Server is a separate native binary with its own configuration and a default gameplay port of UDP 19132. This guide follows the supported Ubuntu 22.04-or-newer path: unpack the official Linux build, run it as a dedicated account, then add service supervision, backups, and an update routine.

Separate It From Java Edition First

The Java Edition server.jar, a Java runtime, and TCP 25565 are not part of this server. Bedrock Dedicated Server is the official program for Bedrock clients on Windows, mobile, and console families, and its Linux build supports 64-bit Ubuntu. The official page currently requires Ubuntu 22.04 LTS or later, broadband, and at least roughly 1 GB of free memory for a small server; real worlds and player counts need more headroom.

Download the Linux package from the official Minecraft Bedrock server page after accepting its terms. Hard-coding an old third-party mirror URL into an installer invites stale builds and supply-chain risk, so this procedure deliberately starts with a ZIP obtained from the current official page.

Create a Dedicated Account and Directory

Do not run a game server as root. Create a system account with a working directory under /srv and unpack only the official ZIP there. Replace the sample filename below with the name of the file you actually downloaded.

After extraction, bedrock_server, server.properties, allowlist.json, permissions.json, and the worlds directory live together. Because configuration and world data are relative to this location, the systemd WorkingDirectory is not optional decoration.

sudo apt update
sudo apt install -y unzip
sudo useradd --system --create-home --home-dir /srv/minecraft-bedrock \
  --shell /usr/sbin/nologin bedrock

# Put the official Linux ZIP in /tmp, then adjust its actual name here
sudo -u bedrock unzip /tmp/bedrock-server-LINUX.zip -d /srv/minecraft-bedrock
sudo chmod 750 /srv/minecraft-bedrock/bedrock_server
sudo chown -R bedrock:bedrock /srv/minecraft-bedrock

A Minimal server.properties for Operation

Start with an allowlist instead of a public free-for-all. Disabling online-mode removes player identity verification, so do not turn it off on an Internet-facing server. Enable allow-list and add the real Xbox gamertags to allowlist.json before inviting players.

level-name maps to a directory under worlds. Changing it after a server is established can look like the old world vanished because the process creates or opens a different directory. The router and host firewall must also use the same UDP port selected here.

# Key entries in /srv/minecraft-bedrock/server.properties
server-name=SameOS Bedrock
gamemode=survival
difficulty=normal
allow-cheats=false
max-players=8
online-mode=true
allow-list=true
server-port=19132
server-portv6=19133
level-name=Bedrock level

# Minimal /srv/minecraft-bedrock/allowlist.json example
[
  {"name":"PLAYER_GAMERTAG","ignoresPlayerLimit":false}
]

Register systemd and Check the UDP Socket

BDS needs to find shared libraries in its working directory. Declaring both WorkingDirectory and LD_LIBRARY_PATH prevents the common “works in my shell, fails as a service” split. Give the process a SIGINT and time to close, and restart only after failures.

Test with the private LAN address before opening Internet access. On Ubuntu and the router, forward the default IPv4 gameplay port as UDP 19132. Adding only a TCP rule is a common reason for an apparently healthy server that nobody can join.

# /etc/systemd/system/minecraft-bedrock.service
[Unit]
Description=Minecraft Bedrock Dedicated Server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=bedrock
Group=bedrock
WorkingDirectory=/srv/minecraft-bedrock
Environment=LD_LIBRARY_PATH=.
ExecStart=/srv/minecraft-bedrock/bedrock_server
KillSignal=SIGINT
TimeoutStopSec=60
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

# Apply and inspect
sudo systemctl daemon-reload
sudo systemctl enable --now minecraft-bedrock
sudo journalctl -u minecraft-bedrock -n 80 --no-pager
sudo ss -lunp | grep ':19132'
sudo ufw allow 19132/udp

World Backups and Safe Updates

The easiest backup to reason about stops the service cleanly, then archives worlds together with the properties, allowlist, and permission files. It costs a short outage but avoids mixing world files captured at different points in a write. Keep at least one copy on another device; a backup beside the world does not survive a failed disk.

Do not unzip an update directly over the live directory because package defaults can replace operational settings. Extract the new build into a staging directory, inspect it, copy the existing worlds and three configuration files, then switch. Retain the old directory and archive until a real client has joined and verified the expected world.

sudo systemctl stop minecraft-bedrock
sudo -u bedrock tar -C /srv/minecraft-bedrock -czf \
  /srv/minecraft-bedrock/bedrock-backup-$(date +%F-%H%M).tar.gz \
  worlds server.properties allowlist.json permissions.json
sudo systemctl start minecraft-bedrock

# Drill the restore in an empty location, never over the live world first
mkdir /tmp/bedrock-restore-check
tar -xzf /srv/minecraft-bedrock/bedrock-backup-YYYY-MM-DD-HHMM.tar.gz \
  -C /tmp/bedrock-restore-check
find /tmp/bedrock-restore-check -maxdepth 2 -type f | head

Replace the sample archive name with the file actually produced. Remove only the disposable restore-check directory after inspection; do not overwrite the live worlds directory before validation.

Narrowing Down a Failed Connection

Changing port-forwarding rules before the server is listening only creates more variables. Walk the chain in order: process, local socket, LAN join, external join. Redact the public IP, player gamertags, and XUID values from permissions.json before posting logs or screenshots.

Verification scope and official references

The 2026 Linux requirements and installation flow were checked against the official Minecraft Bedrock download page. The direct ZIP URL is intentionally not pinned because releases change; accepting the terms and obtaining the package stays on the official page. No restore was performed against a production world.

Read the SameOS writing, translation, and review policy

Compare with the Java Edition Linux server Java Server Management Protocol World backup restore drill