System monitoring, observability, and dashboarding for your homelab. This stack provides real-time metrics, log viewing, network monitoring, and customizable dashboards for service discovery and management.
- Beszel: A lightweight, agent-based server monitoring tool.
- Dashdot: A modern server dashboard for monitoring system metrics.
- Dozzle: A real-time log viewer for Docker containers.
- Glances: A cross-platform monitoring tool that provides a comprehensive overview of your system.
- Scrutiny: A hard drive health monitoring tool that combines smartd monitoring with a web UI.
- Speedtest Tracker: A self-hosted internet speed test tracker.
- Home Assistant: An open-source home automation platform.
- NetAlertX: A network device monitoring tool with alerts.
- WatchYourLAN: A network device discovery and monitoring tool.
- Homarr: A modern, customizable dashboard for your services.
- Homebox: A simple and efficient file management and sharing tool.
This stack requires a .env file for configuration. A complete and recommended set of variables can be found in the .env.example file.
To get started:
-
Copy the
.env.examplefile to.env:cp .env.example .env
-
Open the
.envfile and edit the variables to match your environment.
Key variables include:
DOCKER_DATA_BASEFOLDER: The absolute path for storing persistent data.DOCKER_MEDIA_BASEFOLDER: The absolute path for media files.BESZEL_SSH_KEY: Your SSH public key for Beszel agent authentication.BESZEL_TOKEN: A secret token for the Beszel agent.BESZEL_HUB_URL: The public URL of your Beszel hub.HOMARR_SECRET_ENCRYPTION_KEY: An optional secret key for Homarr.SPEEDTEST_TRACKER_APP_KEY: An optional app key for Speedtest Tracker.
| Service | Internal Port | Access Pattern | Description |
|---|---|---|---|
| Beszel | 8090 |
http://beszel:8090 |
Web interface for server monitoring. |
| Dashdot | 3001 |
http://dashdot:3001 |
Modern server dashboard. |
| Dozzle | 8080 |
http://dozzle:8080 |
Real-time Docker log viewer. |
| Glances | 61208 |
http://glances:61208 |
System monitoring web UI/API. |
| Home Assistant | 8123 |
http://<host-ip>:8123 |
Home automation platform. |
| Homebox | 7745 |
http://homebox:7745 |
Asset and inventory management. |
| Homarr | 7575 |
http://homarr:7575 |
Customizable service dashboard. |
| NetAlertX | 20211 |
http://<host-ip>:20211 |
Network device monitoring. |
| Scrutiny | 8080 |
http://scrutiny:8080 |
Hard drive health monitoring UI. |
| Speedtest Tracker | 80 |
http://speedtest-tracker:80 |
Internet speed test tracker. |
| WatchYourLAN | 8840 |
http://<host-ip>:8840 |
Network device discovery. |
Note: The services that sit on
npm_networkare meant to be reverse-proxied via Nginx Proxy Manager. Host-network services keep their direct host endpoints.
| Service | Image |
|---|---|
| Beszel | henrygd/beszel:latest |
| Beszel Agent | henrygd/beszel-agent:latest |
| Dashdot | mauricenino/dashdot:latest |
| Dozzle | amir20/dozzle:latest |
| Glances | nicolargo/glances:latest-full |
| Home Assistant | linuxserver/homeassistant:latest |
| Homebox | ghcr.io/sysadminsmedia/homebox:latest-rootless |
| Homarr | ghcr.io/homarr-labs/homarr:latest |
| NetAlertX | jokobsk/netalertx:latest |
| Scrutiny | ghcr.io/analogj/scrutiny:master-omnibus |
| Speedtest Tracker | linuxserver/speedtest-tracker:latest |
| WatchYourLAN | aceberg/watchyourlan:v2 |
-
Initial Setup:
# Create required directories mkdir -p ${DOCKER_DATA_BASEFOLDER}/{beszel,homeassistant,homebox,homarr,netalertx,scrutiny,speedtest-tracker,wyl2,glances}
-
Start the Stack:
docker compose up -d
-
Access Services:
- Access Beszel at
http://localhost:8090 - Access Dashdot at
http://localhost:3002 - Access Dozzle at
http://localhost:8081 - Access Glances at
http://localhost:61208 - Access Home Assistant at
http://localhost:8123 - Access Homebox at
http://localhost:3100 - Access Homarr at
http://localhost:7575 - Access NetAlertX at
http://localhost:20211 - Access Scrutiny at
http://localhost:8083 - Access Speedtest Tracker at
http://localhost:8084 - Access WatchYourLAN at
http://localhost:8840
- Access Beszel at
- Beszel Agent: Runs in
network_mode: hostto monitor the host system. - Dashdot: Runs with
privileged: truefor full host access for system metrics. - Home Assistant: Runs with
privileged: trueandnetwork_mode: hostfor Bluetooth and device discovery. - NetAlertX & WatchYourLAN: Use
network_mode: hostfor network scanning. - Scrutiny: Requires
SYS_RAWIOcapability and device access (e.g.,/dev/sda) to read S.M.A.R.T. data.
/var/run/docker.sock, granting access to the Docker daemon:
- Beszel Agent, Dozzle, Glances, Homarr.
These configurations are powerful but require that the stack be deployed only in trusted networks.