Introducing Render Sandboxes: a computer for every agent.
Why deploy Beszel on Render?
Beszel is a lightweight server monitoring tool that collects historical metrics, Docker container stats, and triggers alerts. It uses a hub-and-agent architecture: the hub provides the dashboard and stores metrics in a PocketBase (SQLite) database, while agents run on monitored servers and report data over WebSocket. This lets you track resource usage across multiple servers from a single self-hosted dashboard without heavyweight infrastructure.
This template deploys the Beszel hub from the pinned official Docker image with a 1 GB persistent disk already mounted at /beszel_data, so PocketBase's SQLite database survives restarts and redeploys without you configuring volumes or wiring storage paths. Render auto-generates the admin USER_PASSWORD and injects it alongside your USER_EMAIL, so the admin account is created on first boot—no manual secrets management or post-deploy setup. The /api/health check is already defined and agents connect over outbound WebSocket to your onrender.com HTTPS endpoint, meaning you skip TLS certs, reverse proxy config, and firewall rules entirely and get a monitored dashboard live in minutes.
Architecture
What you can build
You'll have a running Beszel hub with a dashboard at your Render URL, backed by a persistent disk that stores metrics history across deploys. From there, you add systems in the UI and run the agent command it gives you on each server you want to watch—agents connect outbound over HTTPS, so they work behind NAT without opening inbound ports. Once connected, you can view CPU, memory, disk, and Docker container stats over time and configure alerts via email, Slack, or Discord.
Key features
- Pinned Docker image: Deploys the official henrygd/beszel hub image at a pinned version (0.21.1) via render.yaml, so upgrades are done by changing the tag and pushing.
- Persistent SQLite storage: Includes a 1 GB persistent disk mounted at /beszel_data for the PocketBase (SQLite) database, so metrics survive deploys and restarts.
- Outbound WebSocket agents: Agents connect to the hub via outbound WebSocket over HTTPS, requiring no inbound ports so monitoring works behind NAT and firewalls.
- Auto-provisioned admin: On first boot it creates the admin account from USER_EMAIL and a generated USER_PASSWORD, with no manual database setup required.
- Health check endpoint: Exposes /api/health for Render's health checks and single-instance deploy verification.
Use cases
- Indie developer monitors multiple VPS servers from one unified dashboard
- DevOps engineer sets Slack alerts for CPU spikes across production
- Freelancer tracks Docker container stats on client's remote server behind NAT
- Startup team watches historical memory trends to right-size infrastructure costs
What's included
Service | Type | Purpose |
|---|---|---|
beszel | Web Service | Hub: dashboard, alerts, and metrics storage |
beszel-data | Persistent Disk | PocketBase (SQLite) database at /beszel_data |
Prerequisites
- Admin Email: The email address used to create the Beszel admin account on first boot, which you'll use to sign in to the dashboard.
Next steps
- Sign in at your service URL using USER_EMAIL and the USER_PASSWORD from the service's Environment page — The Beszel dashboard loads and you land on the empty systems overview, confirming the first-boot admin account was created
- Click Add System in the hub, then copy the Docker or binary command it generates and run it on the server you want to monitor — Within about 10 seconds that system turns green in the hub and starts showing live CPU, memory, and disk stats
- Change your admin password in the hub's settings and configure an alert notification channel (email, Slack, or Discord) — A test notification arrives on the configured channel and the generated USER_PASSWORD is no longer valid for sign-in
Resources
Repository
For AI agents
Drop into your coding agent to explore and deploy this template.