ow to Host a Minecraft Bedrock Edition Server on a VPS
Minecraft Bedrock Edition is the version that runs on mobile, console, and Windows 10/11 — the version your friends on phones and Nintendo Switches play. Unlike Java Edition (which requires a computer), Bedrock players often want to connect from mobile devices to a persistent server that’s always online. A VPS is the perfect host: 24/7 uptime, low latency, and full control over settings, addons, and whitelists.
This guide covers setting up an official Bedrock Dedicated Server (BDS) on Ubuntu VPS, configuring it for optimal performance, managing players and addons, and keeping the server running reliably around the clock.
Java Edition vs Bedrock Edition Servers
| Bedrock Dedicated Server (BDS) | Java Edition (Paper/Spigot) | |
|---|---|---|
| Platforms supported | Mobile, Console, Windows 10/11, VR | PC (Java) only |
| Official server software | ✅ Yes (Mojang BDS) | ✅ Yes + community forks |
| Plugin ecosystem | Addons (limited) | Plugins (extensive) |
| Cross-play | ✅ Xbox, PlayStation, Switch, Mobile | ❌ Java only |
| RAM usage | ~200–500 MB | 1–4 GB |
| Linux server support | ✅ Official | ✅ Native |
💡 VPS.DO Tip: Bedrock servers are lighter than Java servers. A 2 vCPU / 4 GB RAM VPS comfortably hosts 20–30 Bedrock players. View Plans →
Step 1: Prepare Your VPS
sudo apt update && sudo apt upgrade -y
sudo apt install unzip screen curl libcurl4 libssl3 -y
# Create a dedicated minecraft user
sudo useradd -m -s /bin/bash minecraft
sudo su - minecraft
mkdir ~/bedrock-server && cd ~/bedrock-server
Step 2: Download Bedrock Dedicated Server
# Check https://www.minecraft.net/en-us/download/server/bedrock for latest URL
# Replace the URL with the current Linux version
wget "https://minecraft.azureedge.net/bin-linux/bedrock-server-1.21.50.07.zip" \
-O bedrock-server.zip
unzip bedrock-server.zip
rm bedrock-server.zip
chmod +x bedrock_server
Step 3: Configure the Server
nano server.properties
# Server name shown to players
server-name=My VPS Bedrock Server
# Game mode for new players
gamemode=survival
# Difficulty
difficulty=normal
# Allow cheats (op commands)
allow-cheats=false
# Maximum players
max-players=20
# Server port (default: 19132 UDP)
server-port=19132
server-portv6=19133
# Enable online mode (require Xbox account)
online-mode=true
# Whitelist mode (only listed players can join)
allow-list=false
# View distance (higher = more RAM/CPU)
view-distance=10
# Tick distance (affects performance)
tick-distance=4
# Level name (your world folder name)
level-name=Bedrock Level
# Level seed (leave blank for random)
level-seed=
# Enable compression
compression-enabled=true
compression-threshold=1
Step 4: Open Firewall Port
exit # back to sudo user
sudo ufw allow 19132/udp
sudo ufw allow 19133/udp
Step 5: Start the Server
sudo su - minecraft
cd ~/bedrock-server
# Start in a screen session for persistent operation
screen -S bedrock
LD_LIBRARY_PATH=. ./bedrock_server
# The server starts — wait for "Server started" message
# Detach: Ctrl+A then D
Your server is now running. Connect from Minecraft Bedrock using your VPS IP and port 19132. ✅
Step 6: Systemd Service for Auto-Start
exit # back to sudo user
sudo nano /etc/systemd/system/bedrock.service
[Unit]
Description=Minecraft Bedrock Server
After=network.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/bedrock-server
ExecStart=/bin/bash -c 'LD_LIBRARY_PATH=. ./bedrock_server'
ExecStop=/bin/bash -c 'kill -SIGTERM $MAINPID'
Restart=on-failure
RestartSec=10
StandardInput=null
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable bedrock
sudo systemctl start bedrock
sudo systemctl status bedrock
Step 7: Player Management
Operator (admin) commands
# Attach to server console
sudo su - minecraft
screen -r bedrock
# In the server console:
op PlayerName # Give player operator status
deop PlayerName # Remove operator status
kick PlayerName # Kick a player
ban PlayerName # Ban a player
ban-ip 1.2.3.4 # Ban an IP address
pardon PlayerName # Unban a player
list # Show online players
Whitelist management
# In server.properties, set: allow-list=true
# In server console:
allowlist add PlayerName # Add player to whitelist
allowlist remove PlayerName # Remove from whitelist
allowlist list # Show whitelist
Permission levels (permissions.json)
nano ~/bedrock-server/permissions.json
[
{
"permission": "operator",
"xuid": "PLAYER_XUID_HERE"
},
{
"permission": "member",
"xuid": "ANOTHER_PLAYER_XUID"
}
]
Step 8: Installing Behavior and Resource Packs (Addons)
Install a behavior pack
cd ~/bedrock-server
# Create pack directories
mkdir -p behavior_packs resource_packs
# Copy your .mcpack or .mcaddon files into the server
# Then extract them (mcpack files are zip archives)
cp /tmp/myaddon.mcaddon .
unzip myaddon.mcaddon -d addon_temp
# Move extracted content
mv addon_temp/*_BP behavior_packs/MyAddon_BP
mv addon_temp/*_RP resource_packs/MyAddon_RP
Register packs with the world
nano ~/bedrock-server/worlds/Bedrock\ Level/world_behavior_packs.json
[
{
"pack_id": "PACK_UUID_FROM_MANIFEST",
"version": [1, 0, 0]
}
]
Get the pack UUID from the manifest.json file inside the pack folder.
Step 9: Automated Backups
nano ~/backup-bedrock.sh
#!/bin/bash
DATE=$(date +%Y-%m-%d_%H-%M)
BACKUP_DIR="/var/backups/bedrock"
WORLD_DIR="/home/minecraft/bedrock-server/worlds"
SERVER_DIR="/home/minecraft/bedrock-server"
mkdir -p $BACKUP_DIR
# Save the world first (send save command via screen)
# Note: BDS doesn't support automated saves easily via screen
# Use file-level backup when server is briefly stopped
# Backup world files
tar -czf $BACKUP_DIR/bedrock-world-$DATE.tar.gz $WORLD_DIR
tar -czf $BACKUP_DIR/bedrock-config-$DATE.tar.gz \
$SERVER_DIR/server.properties \
$SERVER_DIR/permissions.json \
$SERVER_DIR/allowlist.json
# Clean up backups older than 14 days
find $BACKUP_DIR -name "*.tar.gz" -mtime +14 -delete
echo "Bedrock backup complete: $DATE"
chmod +x ~/backup-bedrock.sh
crontab -e
# 0 4 * * * /bin/bash /home/minecraft/backup-bedrock.sh
Step 10: Updating the Server
sudo su - minecraft
cd ~
# Stop the server
sudo systemctl stop bedrock
# Backup current version
cp -r bedrock-server bedrock-server-backup
# Download new version
wget "NEW_VERSION_URL" -O bedrock-server-new.zip
unzip bedrock-server-new.zip -d bedrock-server-new
# Copy new files (preserve config files)
rsync -av --exclude='server.properties' \
--exclude='permissions.json' \
--exclude='allowlist.json' \
--exclude='worlds/' \
bedrock-server-new/ bedrock-server/
# Restart server
sudo systemctl start bedrock
Performance Optimization
Tune server.properties for performance
# Lower these values to reduce CPU/RAM usage:
view-distance=8 # Default 10 — each chunk radius adds load
tick-distance=2 # Default 4 — minimum for reasonable gameplay
max-threads=4 # Match your vCPU count
# Disable features you don't need:
enable-lan-visibility=false # Don't broadcast on LAN
Monitor resource usage
htop # Look for the bedrock_server process
# Typical idle: 50-100 MB RAM, <5% CPU
# With 10 active players: 200-400 MB RAM, 20-60% CPU (single core)
Final Thoughts
A Bedrock server on a VPS is the best way to host a persistent world that your mobile, console, and Windows friends can all join simultaneously. The official BDS is lightweight, well-maintained, and runs stably on Ubuntu. A VPS.DO 4 GB RAM plan handles 20+ players comfortably with room for other services running alongside.