Skip to main content
Beszel is a lightweight server monitoring hub with a web UI, historical data, Docker container stats, and alerting. It consists of a hub (central dashboard) and agents (installed on each monitored server). This guide deploys the hub with Docker, an Nginx reverse proxy, and a Let’s Encrypt SSL certificate, then covers agent installation.

Prerequisites

  • Docker and Docker Compose installed on the hub server — see Install Docker
  • A domain or subdomain pointed to the hub server (e.g., monitor.example.com)
  • Ports 80 and 443 are open in your firewall

Step 1: Deploy the Beszel Hub

Create a directory and Docker Compose file:
Start the container:
The hub is now running on 127.0.0.1:8090.

Step 2: Install Nginx

Step 3: Configure Nginx Reverse Proxy

Replace monitor.example.com with your actual domain:
Enable the site and reload Nginx:

RHEL-Based Systems

RHEL, AlmaLinux, and Rocky do not use sites-available/sites-enabled by default. Place the configuration in /etc/nginx/conf.d/beszel.conf Instead, skip the symlink step.

Step 4: Install SSL with Certbot

Obtain and install the certificate:
Verify automatic renewal:

Step 5: Access the Hub

Open https://monitor.example.com in your browser. On first visit, create your admin account at the /_/ admin path.

Installing the Agent

The Beszel agent runs on each server you want to monitor and reports back to the hub. It does not require Docker.

Add a System in the Hub

  1. Log in to the Beszel hub
  2. Click Add System
  3. Enter a name and the server’s IP/hostname
  4. The hub will generate a public key — copy it

Install the Agent

On the server you want to monitor, run:
The installer will prompt for:
  • The hub’s public key (paste the key from Step 1)
  • The port for the agent to listen on (default: 45876)

Open the Agent Port

On the monitored server, allow the agent port in the firewall:
Restrict agent access to the hub server’s IP only. There is no reason for other hosts to reach the agent port.

Updating

Hub

Agent (systemd)

Agent (Docker)

All-in-One Hub Script

Edit the DOMAIN variable before running:
install-beszel.sh