Operations guide

Keep the world
safe and playable.

The practical runbook for operating, updating and recovering the WPH Bedrock server. Commands assume an SSH session with administrative access.

GameBedrock 1.26.44.3
Addressminecraft.candilo.ro:19132
Snapshot28 August 2026
Security note

This page is deliberately public-safe: it contains no passwords, private keys or API tokens. Keep credentials out of the web root and use temporary SSH keys for outside assistance.

01 · Routine checks

Prove the server is healthy

A green systemd status alone is not enough. A healthy server starts cleanly, listens on the Bedrock UDP ports and does not spin at high CPU.

systemctl status bedrock --no-pager ss -ulnp | grep -E '19132|19133' journalctl -u bedrock -n 100 --no-pager ps -C bedrock_server -o pid,etime,%cpu,%mem,cmd

Look for Server started in the journal and listeners on UDP 19132 and 19133. If systemd says active but neither is true, treat the service as unhealthy.

Service controls

systemctl start bedrock systemctl stop bedrock systemctl restart bedrock systemctl is-active bedrock

02 · Player access

Manage the allowlist carefully

The server uses allow-list=true. Player records live in /opt/bedrock/allowlist.json; permissions are in /opt/bedrock/permissions.json.

/opt/bedrock/addplayer.sh "Exact Gamertag" "PLAYER-XUID" false
  • Use the exact Gamertag from the player’s signed-in Microsoft account.
  • Only grant operator access when it is genuinely needed.
  • Back up JSON files before manual edits and validate the JSON afterward.
  • Restart the service after an offline edit so the new state is loaded.

03 · Backups

Protect the live world before change

The live world is /opt/bedrock/worlds/world. Daily backups are run by /etc/cron.daily/mc-backup and written beneath /opt/backups.

/etc/cron.daily/mc-backup ls -lh /opt/backups tar -tzf /opt/backups/NAME.tar.gz | grep 'level.dat'

The backup job briefly stops the service for a consistent snapshot, verifies that the archive contains level.dat, and starts the service again. A tiny archive is a warning sign; the validated post-repair archive was approximately 18.4 MB.

Before restoring

Stop the service and make one more copy of the current world—even when it looks broken. Restore into a staging directory, verify level.dat and the database files, then swap directories.

04 · Updates

Deploy complete releases

The updater runs each Sunday at 04:00. Its script is /opt/bedrock/auto_update_bds.sh; output is recorded in /var/log/bds-update.log.

tail -n 150 /var/log/bds-update.log systemctl list-timers --all | grep -i bedrock /opt/bedrock/auto_update_bds.sh

The safe update pattern is: download the complete official release, stage and validate it, stop the service, preserve the world and local configuration, atomically swap releases, start, and run real health checks. Roll back automatically when health checks fail.

Never update only the binary

Bedrock releases include registries and supporting files that must match the executable. A binary-only update previously caused missing VoxelShape registries, high CPU and a server that appeared active but was not playable.

05 · Website & TLS

Serve the guide over HTTPS

The static site is in /var/www/mcsite. NGINX configuration is enabled from /etc/nginx/sites-enabled/mc. Both the host firewall and the attached Vultr firewall must allow inbound TCP 80 and 443.

nginx -t systemctl reload nginx curl -I http://127.0.0.1/ curl -kI https://127.0.0.1/ -H 'Host: minecraft.candilo.ro' certbot renew

Port 80 is required for normal Let’s Encrypt HTTP validation even when visitors are redirected to HTTPS. After renewal, verify the certificate dates and test from a device outside the VPS network.

06 · Troubleshooting

Follow the signal

Service active, game unreachable

Check the journal, UDP listeners and CPU. No listener or sustained high CPU points to a failed or mismatched release, not a firewall alone.

Website times out externally

If local curl works and UFW’s 80/443 counters stay at zero during an external test, packets are being dropped before reaching the VPS. Check the Vultr firewall attachment and rules.

Certificate warning

Inspect the certificate expiry, confirm public ports 80/443 are reachable, run Certbot, reload NGINX and test again externally.

Backup is suspiciously small

List its contents and find level.dat. Do not overwrite the current world with an empty or incomplete archive.

07 · Recovery

Preserve evidence, then roll back

  1. Stop writes. Stop bedrock before moving or restoring world data.
  2. Snapshot first. Archive the current configuration and world even if they appear damaged.
  3. Stage separately. Never extract a release or backup directly over the live directory.
  4. Validate. Confirm required release files, level.dat, database contents, ownership and permissions.
  5. Swap atomically. Rename directories on the same filesystem, start the service, and check logs plus UDP listeners.
  6. Keep rollback material. Remove old artifacts only after players have confirmed the world is correct.

Current recovery artifacts

The 2026-08-27 repair retained the failed installation at /opt/bedrock.broken-20260827-170203 and a pre-repair persistent-state archive at /opt/backups/pre-repair-persistent-20260827-170203.tar.gz. Do not delete them until the restored world has had a suitable confidence period.

Quick checklist

Before you close the terminal

  • Service is active, CPU is normal and the log says Server started.
  • UDP 19132 and 19133 are listening.
  • A recent backup exists, is plausibly sized and contains level.dat.
  • NGINX configuration passes and local HTTP/HTTPS requests succeed.
  • A real player or external network test confirms the result.
  • Temporary SSH access has been removed.