Fully verified26,494

Monitoring

Beszel

Beszel collects server CPU, memory, storage and network metrics through lightweight agents and keeps their history in a local dashboard. This hub recipe creates a private administrator on first start, closes self-registration, and preserves accounts, monitoring history and SSH identity in one backed-up volume.

Overview

Beszel keeps a small historical view of server resources: CPU, RAM, swap, disk usage and traffic. Agents supply the measurements; the hub stores accounts, access assignments, alert settings and history in local SQLite databases. It suits household servers and small infrastructure where a compact resource dashboard is useful.

This recipe installs the hub, not agents on every machine. Add each monitored system through the native interface and deploy a matching pinned agent on that system. Docker, GPU, SMART, ZFS and systemd integrations need separate permissions and configuration. The included smoke uses a real isolated agent without host networking or Docker socket; its readings are sandbox measurements.

The hub creates both an application administrator and a PocketBase superuser from the supplied email/password only when the database is new. Self-registration is closed. Upstream supports OIDC, email-OTP MFA and trusted-header authentication, but the recipe does not configure them. SMTP is required for email-OTP MFA.

The browser interface is built in. Android/iOS and macOS clients listed by the official documentation are independent third-party projects and were not tested here. Review their licenses and credential handling before connecting them.

For users of Netdata Cloud, Beszel covers local server-resource dashboards and history. Its monitoring scope and integrations differ; no price saving is claimed without verified current terms.

Security assessment (2026-10-24): loopback HTTP, non-root process, read-only container root, closed signup and no host/Docker access. Protect the hub’s SSH identity, the PocketBase admin interface and every agent separately. This configuration review is not a vulnerability scan.

Sources: hub installation, agents, environment, security, OIDC, mobile, desktop.

Update tracking

These are stored results of separate checks, not real-time data. An unknown status means the check has not been performed yet.

New releases

Recipe version compared with the latest known upstream release. A version number, not a reading of what changed.

Current version 0.21.1Oct 24, 2026, 9:32 AM UTC

Critical vulnerabilities

Result of a dedicated Docker image scan, not a Compose configuration check.

Not checkedNot checked

Breaking updates

A new major version is found by comparing version numbers. A compatibility verdict is entered by hand after reading the release notes and the migration steps.

Not checkedNot checked

compose.yaml

Upstream Compose changes relative to the verified recipe.

Upstream Compose is not trackedNot checked

Outdated Docker images

Pinned image tags checked for newer versions.

Not checkedNot checked

From observation to action

Update plan

The recipe already pins the latest known release. The steps below show the evidence retained for that version.

0.21.10.21.1
  1. Open the release evidence

    Open this release on GitHub ↗ The link is evidence to review, not proof of compatibility.

  2. Review the version boundary

    The version numbers do not cross a major compatibility boundary. No compatibility verdict has been recorded.

  3. Prepare image-tag changes

    No image-tag change is currently planned.

  4. Follow the documented migration shape

    Change the tag and restart. Release-specific migration steps still come from the release notes and installation guide.

  5. Protect the rollback point

    No version change is currently planned. The recipe includes a backup procedure. Restore has been tested.

  6. Verify the updated recipe

    An exact Fully verified check for this target was recorded on 2026-10-24.

Read the update procedure in the installation guide ↓

Specifications

Security and exposure

Installation levels

The status shows how fully the published recipe meets each level's requirements.

Ready

For home

A minimal setup for a local network or access through a VPN.

  • Single server
  • Local access
  • Minimum components

The recipe covers every requirement at this level.

Ready

For a VPS

A public deployment with protected access and backups.

  • Domain
  • HTTPS via reverse proxy
  • Off-server backup

The recipe covers every requirement at this level.

Not supported

Reliable

A setup designed for predictable operations and observability.

  • Separate database
  • Healthcheck
  • External monitoring
  • CPU and memory limits

You still need to add: separate database, external monitoring, cpu and memory limits.

Tailored to your server

Configuration generator

Answer five questions and download a ready-to-run Beszel bundle.

Runs locally
01 Do you have a domain?
02 Which reverse proxy?
03 Server architecture
04 Where should data be stored?

Use an absolute path for a separate disk, such as /srv/beszel.

05 Is VPN access required?

Your bundle is ready

The archive is created in your browser. Your answers are never sent anywhere.

The same files as one shell script, written in plain heredocs so you can read the whole thing before it runs. It checks Docker, the architecture, memory, disk and the ports it needs, and writes nothing until you add --apply.

Screenshots

Quick start

Read the full guide first: it explains external access, backups, and data locations.

Prepare settingscp .env.example .env
Launchdocker compose up -d
Check statusdocker compose ps

Step-by-step guide

Installation

Use Ubuntu 24.04 LTS or Debian 12/13, Docker Engine and Compose >=2.24.0 from the official repository. Download the complete recipe.

cp .env.example .env
chmod 600 .env
openssl rand -hex 24

Replace CHANGE_ME in BESZEL_ADMIN_PASSWORD with the random value and set your BESZEL_ADMIN_EMAIL and actual BESZEL_URL.

docker compose config --quiet
docker compose pull
docker compose up -d --wait
docker compose ps

Open http://localhost:8090 and sign in with the supplied email/password. On a new database they create the Beszel administrator and PocketBase superuser; environment changes do not rotate existing credentials. Set private credentials before exposing the hub.

VPS

Use a domain, HTTPS, firewall and encrypted off-server backups. Keep 8090 on loopback; expose only the reverse proxy. Restrict /_/ administration to trusted operators.

LAN / VPN

Prefer an SSH tunnel (ssh -L 8090:127.0.0.1:8090 user@server) or VPN/proxy. For direct trusted-LAN access, explicitly change the bind address in Compose and restrict it with the firewall. Set BESZEL_URL to the actual browser origin.

HTTPS

Point DNS at the proxy and set BESZEL_URL=https://metrics.example.com, then recreate the service. Forward WebSocket upgrades and allow long-lived connections; agents using WebSocket and the live interface need them.

Caddy

Use proxy/Caddyfile on the host; Caddy handles TLS and WebSocket upgrades.

Nginx

Obtain the referenced certificate, install proxy/nginx.conf in the http context, run nginx -t and reload. The map selects the appropriate Connection header.

Traefik

Load proxy/traefik.yaml through the file provider with websecure and the letsencrypt resolver. The sample assumes host Traefik; a container needs a route to the hub instead of host loopback.

Data / Данные

The named BESZEL_DATA_VOLUME is mounted at /beszel_data: data.db, auxiliary.db, SSH private key id_ed25519, notification state and any native backups. Preserve the whole directory, including WAL files while running. No agent state is mounted here. Changing the volume name selects another installation.

Backup

Run bash backup.sh. It stops the hub, archives the entire data volume plus .env and Compose, then restores its prior running/stopped state. Archives have mode 600. Encrypt and copy them off-server; keep each monitored agent’s own configuration, token and data separately.

Restore / Восстановление

Restore replaces current monitoring data. Use only a trusted archive. Start the recipe once on a new machine, compare archived configuration.env manually (it is not activated), and run bash restore.sh /safe/path/beszel-backup.tar. The script validates required files, takes a safety backup, replaces data and waits for health. Failed extraction leaves the hub stopped. Restored account passwords and SSH key are authoritative; verify old history and that agents reconnect.

Update / Обновление

Read release notes, back up, set a new explicit BESZEL_VERSION and run docker compose pull && docker compose up -d –wait. Never use latest. Upgrade separately deployed agents to a compatible pinned version and verify metrics. The hub update is an in-place replacement; review future major migration instructions before adopting them.

Rollback / Откат

Stop beszel, restore the previous BESZEL_VERSION in .env, pull and start it once, then restore the matching pre-update archive. A database migrated by a new PocketBase/Beszel version may not work with an older binary; restore the old snapshot rather than reusing migrated files. Verify login, assigned systems and agent connectivity.

Removal / Удаление

docker compose down keeps the named volume. For permanent deletion, export a backup first, verify the project and BESZEL_DATA_VOLUME, then run docker compose down –volumes. This destroys accounts, SSH identity and history. Remove .env, proxy/DNS rules and separately deployed agents only when no longer needed.

Every .env.example parameter

Variable Meaning
BESZEL_VERSION Pinned hub image tag 0.21.1
BESZEL_PORT Loopback host HTTP port, default8090
BESZEL_URL Actual external URL for UI and links
BESZEL_ADMIN_EMAIL Email for first administrator and superuser, new DB only
BESZEL_ADMIN_PASSWORD Unique random bootstrap password; replace CHANGE_ME
BESZEL_DATA_VOLUME Unique persistent volume name
TZ IANA timezone, default Etc/UTC
BESZEL_BACKUP_DIR Optional private archive destination

Connect real systems

Use Add System and the agent guide on the machine you intend to monitor. Replace any floating image in the UI-generated command with henrygd/beszel-agent:0.21.1. For SSH allow the agent port only from the hub; for WebSocket use TLS. Add Docker socket, host networking or devices only when those integrations are needed. The hub public key is not its private key. SMTP, OIDC, MFA and notification delivery are not configured by this recipe.

Report a recipe problem

Tell us how it went on your server

Opens a prefilled GitHub issue. A GitHub account is required; submitting the issue makes it public.

Troubleshooting

Diagnostics

docker compose ps
docker compose logs --tail=100 beszel
docker compose exec beszel /beszel health --url http://127.0.0.1:8090

Wrong password: bootstrap environment applies only to a new database. Restore brings back old credentials. Use your authorized PocketBase password-reset procedure; never delete the volume just to reset login.

No systems/metrics: the recipe installs only the hub. Deploy a separate agent, assign the system to the user, and check its address, port, key and version. Localhost inside the hub means the hub container. Restrict SSH to the hub; WebSocket needs a correct HUB_URL, registration token, TLS and proxy upgrade.

Permission denied: the initializer makes the data volume owned by UID/GID1000. Never use another application’s volume. Container root is read-only; data and temporary tmpfs are writable.

Missing notifications: SMTP/push is not configured. A saved alert rule does not prove delivery. Check the integration using the official documentation.

Empty history: newly connected systems collect measurements over time; aggregates arrive later. A user sees only assigned systems. Sandbox container measurements do not prove complete physical-host monitoring.

Backup/restore: FOSSARY_ENV_FILE selects another .env. Incomplete archives are rejected before stopping. Failed extraction leaves the hub stopped: inspect space, permissions, archive and safety copy. Archives contain credentials and a private SSH key; never publish them.

Official sources

Latest release: 2026-10-22 · GitHub Stars: 26,494 · metadata checked Oct 24, 2026, 9:32 AM UTC

Disclaimer

Fossary is an independent informational catalog and is not affiliated with the developers of the listed applications. We collect information from public sources and verify published recipes, but we do not develop, distribute, or control these applications.

A listing or validation status is not a requirement, endorsement, or personal recommendation to use an application. You decide whether it is suitable and use it at your own risk. We do not warrant an application's security, availability, or fitness for purpose and, to the extent permitted by law, are not liable for resulting loss or damage. Review its license, security settings, data processing, and backup procedures before installation.