All builds

SquirtzCraft

Self-hosted game server and web control panel

A Minecraft server on a Raspberry Pi 5 with a public status page and a full admin dashboard I wrote, published through Cloudflare Tunnel without opening a port.

Role
Builder and admin
When
2026
Status
Live
Built with
Raspberry Pi 5, Python, FastAPI, Jinja2, Bash, systemd, Cloudflare Tunnel, nftables, RCON
SquirtzCraft Server Manager dashboard: server running, Minecraft 26.3, Vanilla loader, world ICEMAN, 0 of 5 players online

What it does

  • A public page shows server status, version, world and who's online.
  • Signed-in admins start, stop and restart the server, watch the live console, switch worlds, loaders (Vanilla, Fabric, Forge) and Minecraft versions, and manage the whitelist and per-world settings.
  • Backups run on systemd timers with per-world retention, and a cleanup job keeps the Pi's disk from filling with old versions and logs.
  • A daily update check, with rollback, and protection against loading a world into an older game version.

Architecture

A single FastAPI app reads server state directly and runs anything that changes the server through one serverctl command in a background job, so the browser and the command line share exactly the same logic. The browser gets a job ID and streams the output.

Uvicorn listens only on localhost. Cloudflare Tunnel publishes it, nftables locks down the rest, and logins use PBKDF2 hashes with a per-IP lockout after five failed attempts.