Beszel
Resource graphs for the box and its containers, from a hub and an agent that both run on host networking.
Names and addresses are placeholders. The list says what each one stands for.
What it does here
Beszel graphs CPU, memory, disk and per-container use over time. A filling /srv shows up here first.
Canonical setup
Two pieces: a hub with the dashboard, and an agent that reads host and container stats. Start the hub, add a system in its UI to get the agent's key, then start the agent with that key.
Upstream: Beszel: getting started.
In this build
- Hub and agent both on host networkingThe agent needs it for real host stats. The hub on the host network reaches the agent on localhost instead of crossing the Docker bridge.
- The system added as localhost, port 45876
- The key written into the compose fileNot interpolated from .env.
- Served by Caddy as metrics.dev.tailnet.exampleThe hub listens on 8090.
services:
beszel:
image: henrygd/beszel:latest
container_name: beszel
restart: unless-stopped
network_mode: host
volumes:
- /srv/data/beszel:/beszel_dataStart the hub with docker compose up -d beszel, create the admin account, then Add System with host localhost and port 45876. Copy the key it shows and add the agent:
beszel-agent:
image: henrygd/beszel-agent:latest
container_name: beszel-agent
restart: unless-stopped
network_mode: host
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
PORT: "45876"
KEY: "ssh-ed25519 AAAA...the hub key..."Seams
Where this meets the rest of the build. Each one leads with what you will actually see.
Symptomthe system never connects
On the bridge network, the hub reaches the agent's host port across the Docker bridge, and the tailnet-only firewall drops it. Run the hub on host networking.
Symptomthe system stays red after the agent is up
The hub hasn't tried again yet. Edit the system in the hub and Save to force a reconnect.
Symptomthe agent doesn't accept the hub's key
Compose's .env interpolation of a value with spaces is unreliable. Write the key into the compose file as a map value, quoted.
Symptomdocker exec beszel-agent env fails
The agent image has no shell or env. Check its settings with docker inspect -f '{{range .Config.Env}}{{println .}}{{end}}' beszel-agent.
Verify
The system shows green in the hub, and graphs start filling within a minute or two.
- 17 Oct 2026First written.