//------------------------------------------------------------------- //-------------------------------------------------------------------
self-host Beszel VPS Docker monitoring

How to Self-Host Beszel for Lightweight VPS and Docker Monitoring

If you want to self-host Beszel VPS Docker monitoring without a heavy setup, this guide walks you through the entire process in simple steps. Beszel is a small, open-source monitoring tool that shows you CPU, memory, disk, and Docker stats in a single, clean dashboard.

What Is Beszel

Beszel is a lightweight, self-hosted server monitoring platform that tracks system metrics, Docker container stats, historical data, and alerts. It uses only two small parts:

  • A hub that shows the dashboard.
  • An agent that runs on each machine you want to watch and sends data back to the hub.

Because it uses less memory than tools like Prometheus and Grafana, it is a good option when you just want to self-host Beszel VPS Docker monitoring for one or a few servers.

Some of the main features include:

  • Docker stats for CPU, memory, and network use per container.
  • Alerts for CPU, memory, disk, bandwidth, temperature, load average, and status.
  • S.M.A.R.T. disk health checks and failure warnings.
  • Multi-user support and OAuth login.
  • Automatic backups to disk or S3 storage.

Why Choose Beszel Over Prometheus and Grafana

Many people search for how to self-host Beszel VPS Docker monitoring because they find Prometheus and Grafana too heavy for small setups. The Beszel agent uses only around 10 to 20 MB of RAM, while a full Prometheus and Grafana stack needs hundreds of megabytes and more setup time.

If you run a small blog or app on a lightweight Linux VPS, Beszel gives you enough insight without the extra weight.

Requirements Before You Self-Host Beszel VPS Docker Monitoring

Before you start, make sure you have the basics ready. You need a VPS with Docker or Podman installed, root or sudo access, and a bit of free disk space.

  • A Linux VPS running Ubuntu 22.04 or newer.
  • Docker and Docker Compose, or Podman as an alternative.
  • SSH access to your server.
  • A free port, usually 8090, is open for the hub.

If you want to get Docker and Docker Compose running, check this guide on Docker setup on Ubuntu.

Once you are done with the requirement, proceed to the following steps to complete the guide.

Step 1. Install the Beszel Hub

The hub is the main dashboard where you self-host Beszel VPS Docker monitoring and view all your connected servers. Log in to your VPS through SSH, then make a folder for the hub files and switch to it:

mkdir beszel && cd beszel

Create the Beszel Hub Docker Compose YAML file with your desired text editor:

nano docker-compose.yml

Paste this into the file:

services:
  beszel:
    image: henrygd/beszel:latest
    container_name: beszel
    restart: unless-stopped
    ports:
      - 8090:8090
    volumes:
      - ./beszel_data:/beszel_data

Save the file, then start the hub:

docker compose up -d

Now open your browser and go to:

http://your-server-ip:8090

On the first visit, Beszel asks you to create an admin account with an email and password or sign in with GitHub.

Create a Beszel admin account

Step 2. Add a System from the Hub

Once logged in, click the Add System button in the top corner to add your target machine. A dialog opens asking for a Name, Host / IP, Port, Public Key, and Token before the agent can connect.

  • Name: A label to identify the server, like app-server-1.
  • Host / IP: The remote VPS’s IP address, or host.docker.internal if the agent runs on the same machine as the hub.
  • Port: Leave it as 45876 unless you changed it in the agent config.
  • Public Key: Auto-filled by Beszel, copy it into the agent’s compose file.
  • Token: Auto-filled too, mainly used for the universal token auto-registration method.

The easiest way to do this is to fill in Name and Host/IP, click Copy Docker Compose at the bottom, and paste the whole snippet on the target server.

Add a System from the Beszel Hub

Step 3. Deploy the Beszel Agent on Another Server

If your agent runs on a different VPS than the hub, follow this step. Just remember to install Docker and Compose on your agent’s server.

You must copy the compose file from the Add System dialog into a new folder on that remote server.

Create the project folder and navigate to it:

mkdir beszel-agent && cd beszel-agent

Create the Beszel agent Docker Compose YAML file:

nano docker-compose.yml

A typical agent config on a separate server looks like this:

services:
  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:
      LISTEN: 45876
      KEY: 'paste your public key here'

Save the file and start it with:

docker compose up -d

The agent uses network_mode: host so it can read the host’s real network stats, which also exposes the port directly without extra mapping.

Note: If you use Podman instead of Docker, the same compose file usually works with podman-compose up -d, since Beszel supports both runtimes.

Step 4. Run the Beszel Agent on the Same Server as the Hub

You can also run the hub and agent together on one machine, which is common when you just want to self-host Beszel VPS Docker monitoring for a single VPS.

You must combine both services into one compose file:

services:
  beszel:
    image: henrygd/beszel:latest
    container_name: beszel
    restart: unless-stopped
    ports:
      - 8090:8090
    volumes:
      - ./beszel_data:/beszel_data
    extra_hosts:
      - "host.docker.internal:host-gateway"

  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: "paste your public key here"

If you use this method, you must enter host.docker.internal in the Host / IP field when adding this system to the hub. The extra_hosts line lets the hub container resolve that hostname on Linux, since it’s a Docker Desktop feature by default.

Once running, the system shows as Up with its host, OS, CPU, and RAM info at the top of its detail page.

Important Note: If the server goes down in this method, the hub goes down with it and can’t alert you about its own outage. For simply watching your own VPS resources and Docker containers, this setup still works fine.

Once a system connects, whether local or remote, it shows up green in the All Systems table with live CPU, memory, disk, and load numbers.

Beszel Agent

Step 5. Enable Docker Container Stats in Beszel

One of the best reasons to self-host Beszel VPS Docker monitoring is the built-in Docker stats feature. Because the agent config already mounts /var/run/docker.sock, Beszel automatically detects running containers and lists them with CPU, memory, network use, health status, ports, and image name.

You do not need extra exporters or plugins for this, whether the agent runs on the same server or a separate one. Just open the system page and scroll down to see the container list update in real time.

Enable Docker Container Stats in Beszel

Step 6. Set Up Basic Alerts in Beszel

To open alert settings, click the bell icon next to any system row in the All Systems table. This opens a panel listing every metric you can toggle on, each with its own threshold field once enabled.

  • Status: Alerts when the server goes offline or comes back online, no threshold needed.
  • CPU Usage: Fires when CPU load crosses a percentage you set.
  • Memory Usage: Fires when RAM usage passes a percentage.
  • Disk Usage: Fires if any disk exceeds a certain percentage full.
  • Bandwidth: Fires when the combined upload plus download traffic passes a limit.
  • GPU Usage, Temperature, Load Average (1m/5m/15m), Battery: Same toggle and threshold pattern for each.
Set Up Basic Alerts in Beszel

Most people start by enabling just Status and CPU Usage, since those two catch the most common problems, like a server going down or getting maxed out.

If you want the same rules applied to every server at once, click the bell icon, switch to the “All Systems” tab, and check “Overwrite existing alerts“. Keep in mind alerts won’t actually send anywhere until you configure an SMTP server under Settings > Notifications.

Monitoring Multiple Servers with Beszel

You can repeat Step 3 on every extra VPS or dedicated server you want to track. This makes it simple to self-host Beszel VPS Docker monitoring for a small set of machines from one single hub screen.

If your workload grows past a few VPS nodes and you need more power, moving some services to a reliable dedicated server still works fine with Beszel, since the agent has a very small footprint.

Conclusion

Beszel gives you a fast and simple way to keep an eye on your servers without the weight of a full observability stack. By following these steps, you can self-host Beszel VPS Docker monitoring on any small VPS, whether the agent runs alongside the hub or on a completely separate machine, and expand it as your infrastructure grows.

Ready to try it yourself? Deploy Beszel quickly on a small PerLod Linux VPS and monitor your app servers with minimal overhead.

We hope you enjoy this guide. For deeper information, you can see the official Beszel documentation.

FAQs

Is Beszel free to use?

Yes, Beszel is free and open-source.

Does Beszel work with Podman?

Yes, both the hub and agent can run with Podman instead of Docker.

Can Beszel send alert notifications?

Yes, but you need to set up SMTP under Settings > Notifications first.

Can I run the agent on the same server as the Beszel hub?

Yes, just use host.docker.internal as the Host/IP when adding the system.

Post Your Comment

PerLod delivers high-performance hosting with real-time support and unmatched reliability.

Contact us

Payment methods

payment gateway
Perlod Logo
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.