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

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.