Skip to content

Beszel Installation

Beszel is lightweight server monitoring: agents on the nodes collect system and Docker metrics, while the hub draws graphs, keeps history, and sends notifications. The web interface works out of the box, with a multi-user mode and an API.

Hub

The web panel and history storage. Runs on the panel server or any server of yours.

Agents

One per node. They connect to the hub themselves on port 45876 with an issued key.

Access

Port 45876 in the firewall opens for the hub IP only; https covers the panel.

The project behind the guide and the author of the page.

Beszel

The monitoring tool of this guide: agents on the servers collect metrics, the hub draws graphs and sends notifications.

Hubweb interface and historyAgentsystem and Docker metrics

The guide

Written and maintained by the author of the remnawave-reverse-proxy script.

Scriptremnawave-reverse-proxyTelegramt.me/remnawave_reverse
browser · httpsBeszel Hub:8090 · web panel and historyTelegramwebhook alertsagents dial the hub themselves:45876 · key from the hubagent · de-fra-01system + Docker metricsufw 45876 ← hub IPagent · nl-ams-02system + Docker metricsufw 45876 ← hub IP

The browser opens the hub web panel over https. Agents on the nodes connect to the hub themselves on port 45876: the hub hands them a key when they are added, and it is the agent that initiates the connection, so nothing extra needs to be open on the node except one port for the hub IP. The hub sends notifications via a webhook, for example to Telegram.

  1. Create a directory for Beszel and open docker-compose.yml:

    root@server: ~
    mkdir /opt/beszel && cd /opt/beszel && nano docker-compose.yml
  2. Add the hub service:

    docker-compose.yml
    services:
    beszel:
    image: henrygd/beszel
    container_name: beszel
    restart: always
    ports:
    - '127.0.0.1:8090:8090'
    volumes:
    - ./beszel_data:/beszel_data
    logging:
    driver: 'json-file'
    options:
    max-size: '30m'
    max-file: '5'
  3. Start the hub:

    root@server: ~
    cd /opt/beszel && docker compose up -d && docker compose logs -f
  4. Add Beszel to the web server so the panel opens on its own domain:

    root@server: ~
    cd /opt/remnawave && nano nginx.conf
    nginx.conf
    upstream beszel {
    server 127.0.0.1:8090;
    }
    server {
    server_name beszel.yourdomain.com;
    listen 443 ssl;
    http2 on;
    ssl_certificate "/etc/nginx/ssl/yourdomain.com/fullchain.pem";
    ssl_certificate_key "/etc/nginx/ssl/yourdomain.com/privkey.pem";
    ssl_trusted_certificate "/etc/nginx/ssl/yourdomain.com/fullchain.pem";
    location / {
    proxy_http_version 1.1;
    proxy_pass http://beszel;
    proxy_set_header Host $host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    }
    }

    Restart nginx:

    root@server: ~
    cd /opt/remnawave && docker compose down remnawave-nginx && docker compose up -d remnawave-nginx && docker compose logs -f remnawave-nginx

Do not forget to create the DNS record beszel.example.com pointing at the hub server.

  1. Open your browser and go to your address:

    root@server: ~
    https://beszel.example.com
  2. The admin creation page opens:

    Admin creation

  3. Enter an email address and a strong password.

  4. You land in the Beszel control panel:

    Add System

  1. Press Add System.

  2. Choose the Binary connection method.

  3. Fill in the agent name and the IP address of the Remnawave node server. The default port (45876) is fine.

  4. Press Copy Linux command to get the agent installation command.

  5. Switch to the node server and run the copied command:

    root@server: ~
    curl -sL https://get.beszel.dev -o /tmp/install-agent.sh && chmod +x /tmp/install-agent.sh && /tmp/install-agent.sh -p 45876 -k "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPW2NUPqCB4pq8oOgEFB9Luqe6oWjEy4bkQV3qcXo3qt" -t "8c9e7262-ced0-4162-bc49-4c985162c22f" -url "https://beszel.example.com"
  6. The agent is installed:

    Install Agent

The agent initiates the connection to the hub itself, but the listening port 45876 on the node must be reachable by the hub, and by the hub only.

  1. Open port 45876 (TCP) for the hub server IP only (replace 100.88.38.121 with the actual address, for example an address in the NetBird network):

    root@server: ~
    ufw allow from 100.88.38.121 to any port 45876 proto tcp
  2. Reload the firewall:

    root@server: ~
    ufw reload
  3. Wait a couple of minutes for the agent to connect to the hub:

    Host System

  1. Open https://beszel.example.com and log in with the admin credentials.

  2. Go to Settings:

    Beszel Settings

  3. Click Notification:

    Beszel Notifications

  4. Into the Webhook / Push notifications field paste a link like:

    Webhook / Push notifications
    telegram://8266662524:AAHruriu0cLDEOlMgfgyrtbn7mJb6Cp4aY@telegram?chats=1465650656

    8266662524:AAHruriu0cLDEOlMgfgyrtbn7mJb6Cp4aY is your bot token.

    1465650656 is the chat ID where notifications arrive.

  5. Click Save Settings.