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.
Authors and projects
Section titled “Authors and projects”The project behind the guide and the author of the page.
How it works
Section titled “How it works”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.
Installing the Beszel Hub
Section titled “Installing the Beszel Hub”-
Create a directory for Beszel and open
docker-compose.yml:root@server: ~ mkdir /opt/beszel && cd /opt/beszel && nano docker-compose.yml -
Add the hub service:
docker-compose.yml services:beszel:image: henrygd/beszelcontainer_name: beszelrestart: alwaysports:- '127.0.0.1:8090:8090'volumes:- ./beszel_data:/beszel_datalogging:driver: 'json-file'options:max-size: '30m'max-file: '5' -
Start the hub:
root@server: ~ cd /opt/beszel && docker compose up -d && docker compose logs -f -
Add Beszel to the web server so the panel opens on its own domain:
root@server: ~ cd /opt/remnawave && nano nginx.confnginx.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-nginxroot@server: ~ cd /opt/remnawave && nano CaddyfileAdd the Beszel site at the end of the file:
Caddyfile beszel.yourdomain.com {reverse_proxy 127.0.0.1:8090}Caddy obtains the certificate for this domain on its own.
Restart Caddy:
root@server: ~ cd /opt/remnawave && docker compose restart remnawave-caddy
Do not forget to create the DNS record beszel.example.com pointing at the hub server.
Account creation
Section titled “Account creation”-
Open your browser and go to your address:
root@server: ~ https://beszel.example.com -
The admin creation page opens:

-
Enter an email address and a strong password.
-
You land in the Beszel control panel:

Adding an agent
Section titled “Adding an agent”-
Press
Add System. -
Choose the
Binaryconnection method. -
Fill in the agent name and the IP address of the Remnawave node server. The default port (45876) is fine.
-
Press
Copy Linux commandto get the agent installation command. -
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" -
The agent is installed:

Firewall on the node server
Section titled “Firewall on the node server”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.
-
Open port 45876 (TCP) for the hub server IP only (replace
100.88.38.121with 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 -
Reload the firewall:
root@server: ~ ufw reload -
Wait a couple of minutes for the agent to connect to the hub:

Telegram notifications
Section titled “Telegram notifications”-
Open
https://beszel.example.comand log in with the admin credentials. -
Go to
Settings:
-
Click
Notification:
-
Into the Webhook / Push notifications field paste a link like:
Webhook / Push notifications telegram://8266662524:AAHruriu0cLDEOlMgfgyrtbn7mJb6Cp4aY@telegram?chats=14656506568266662524:AAHruriu0cLDEOlMgfgyrtbn7mJb6Cp4aYis your bot token.1465650656is the chat ID where notifications arrive. -
Click
Save Settings.
