Skip to content
Live $100 credit at signup, up to $300 total Offer ends December 31, 2026 Get started →

Beszel

Beszel is a lightweight server monitoring platform with historical data, Docker statistics, and configurable alerts. It has two parts: a hub that serves the web dashboard on port 8090, and an agent that runs on each monitored machine and reports system metrics to the hub. This guide installs the hub on this VM and adds an agent to monitor the same machine.

ComponentVersion
Beszel Hub0.18.7
Beszel Agent0.18.7
Ubuntu24.04 LTS
ssh ubuntu@<your-vm-ip>

On the first boot, a setup script starts the Beszel hub. This takes under a minute. Track progress:

journalctl -u beszel-first-boot.service -f

The login message (MOTD) confirms when Beszel is ready.

cd /opt/beszel
docker compose ps
curl -fsS http://127.0.0.1:8090/ > /dev/null

Beszel is bound to localhost to protect its unauthenticated first-admin setup wizard. From your local machine, start an SSH tunnel:

ssh -L 8090:127.0.0.1:8090 ubuntu@<your-vm-ip>

Then open http://127.0.0.1:8090 and create the first administrator account. The image does not create a shared default administrator password.

The agent image is included but the agent is not started by default. In the Beszel UI, add this VM as a system and copy the generated token and public key. Add those values to /opt/beszel/docker-compose.yml, then start the agent profile.

cd /opt/beszel
docker compose --profile agent up -d beszel-agent
# Check container status
cd /opt/beszel && docker compose ps
# Restart
cd /opt/beszel && docker compose restart
# View logs
cd /opt/beszel && docker compose logs -f
PathPurpose
/opt/beszel/docker-compose.ymlDocker Compose configuration
/var/lib/beszel/Hub data
/var/lib/beszel-agent/Local agent data

Port 8090 is bound to localhost. UFW is enabled and allows SSH (port 22) only by default. Use the SSH tunnel above to create the first administrator safely.

To make the hub reachable from a trusted network after setup, change its Docker Compose port binding from 127.0.0.1:8090:8090 to 8090:8090, then allow a trusted IP:

sudo ufw allow from <trusted-ip> to any port 8090

For production use, keep Beszel bound to localhost and place it behind a reverse proxy so you can serve it on port 443 with a TLS certificate.

Last updated: