speedtest-monitor

speedtest-monitor

Docker app from GreiteTurtle's Repository

Overview

Self-hosted internet speed monitor. Runs Cloudflare Speed Test on a configurable schedule, stores every measurement in SQLite, and serves a dashboard with live updates over WebSocket. Includes alerts (webhook, ntfy, Discord, Slack, SMTP), authentication (local accounts and OIDC), and role-based access (admin / viewer). On first boot, set AUTH_SECRET (required) and BETTER_AUTH_URL (required when accessed behind a reverse proxy). Either set SPEEDTEST_ADMIN_EMAIL + SPEEDTEST_ADMIN_PASSWORD to seed the first admin, or visit /setup to create it from the UI. All other variables are optional. Data is persisted to /data (mapped to /mnt/user/appdata/speedtest-monitor by default).

Runtime arguments

Web UI
http://[IP]:[PORT:3000]/
Network
bridge
Shell
sh
Privileged
false

Template configuration

WebUI PortPorttcp

HTTP + WebSocket port served by the app.

Target
3000
Default
3000
Value
3000
App DataPathrw

Persistent storage for the SQLite database (speedtest.db).

Target
/data
Default
/mnt/user/appdata/speedtest-monitor
Value
/mnt/user/appdata/speedtest-monitor
AUTH_SECRETVariable

REQUIRED. Secret used to sign session cookies. Generate with: openssl rand -base64 32

BETTER_AUTH_URLVariable

Public URL of the dashboard, used by Better Auth for sign-in callbacks and OIDC redirects (e.g. https://speedtest.example.com). REQUIRED when running behind a reverse proxy. Defaults to http://localhost:PORT if unset - fine for direct local access only.

SPEEDTEST_INTERVAL_MINUTESVariable

Default measurement interval in minutes (1-1440). Can be changed at runtime from /settings without restarting.

Default
15
Value
15
SPEEDTEST_ADMIN_EMAILVariable

First-run admin email (optional). When set together with SPEEDTEST_ADMIN_PASSWORD, the admin is auto-seeded on every boot (idempotent). Leave empty to use the /setup wizard instead.

SPEEDTEST_ADMIN_PASSWORDVariable

First-run admin password (optional, min 10 chars). Used together with SPEEDTEST_ADMIN_EMAIL. Updating this value rehashes the admin password on the next boot.

SPEEDTEST_PUBLIC_URLVariable

Public URL of the dashboard (e.g. https://speedtest.example.com). Used to build deep links in alert emails. Leave empty if unused.

SPEEDTEST_TEST_DURATION_SVariable

Duration of each download/upload phase in seconds. Raise to 20-30 for multi-Gbps links so TCP slow-start does not dominate the sample.

Default
10
Value
10
SPEEDTEST_PARALLEL_STREAMSVariable

Parallel HTTP streams per phase. Increase (e.g. 16) on very high-bandwidth links to saturate the pipe.

Default
8
Value
8
SPEEDTEST_DB_PATHVariable

Absolute path to the SQLite database file. Must live under the App Data volume.

Default
/data/speedtest.db
Value
/data/speedtest.db
PORTVariable

Internal HTTP port. Only change if you know what you are doing - must match the WebUI port mapping above.

Default
3000
Value
3000
SPEEDTEST_WEBHOOK_URLVariable

Generic webhook URL for alerts (optional). Leave empty if unused.

SPEEDTEST_WEBHOOK_HEADERSVariable

Optional JSON object of extra headers for the generic webhook (e.g. {"Authorization":"Bearer xxx"}).

SPEEDTEST_NTFY_URLVariable

Full ntfy URL including the topic, e.g. https://ntfy.sh/my-topic. Leave empty if unused.

SPEEDTEST_NTFY_TOKENVariable

Optional ntfy access token (for protected topics).

SPEEDTEST_DISCORD_WEBHOOKVariable

Discord webhook URL for alerts (optional).

SPEEDTEST_SLACK_WEBHOOKVariable

Slack incoming webhook URL for alerts (optional).

SPEEDTEST_SMTP_HOSTVariable

SMTP server hostname for email alerts (optional). Required together with SPEEDTEST_SMTP_FROM and SPEEDTEST_SMTP_TO to enable email.

SPEEDTEST_SMTP_PORTVariable

SMTP port. Defaults to 587 (STARTTLS).

Default
587
Value
587
SPEEDTEST_SMTP_SECUREVariable

'true' for implicit TLS (port 465), 'false' for STARTTLS, leave empty for auto-detect from port.

SPEEDTEST_SMTP_USERVariable

SMTP username (optional, for authenticated SMTP).

SPEEDTEST_SMTP_PASSVariable

SMTP password (optional, for authenticated SMTP).

SPEEDTEST_SMTP_FROMVariable

Sender address for alert emails, e.g. speedtest@example.com.

SPEEDTEST_SMTP_TOVariable

Recipient address for alert emails (single address or comma-separated list).

SPEEDTEST_OIDC_ISSUERVariable

OIDC issuer URL (optional), e.g. https://auth.example.com. Required together with the client id/secret to enable SSO.

SPEEDTEST_OIDC_CLIENT_IDVariable

OIDC client id (optional).

SPEEDTEST_OIDC_CLIENT_SECRETVariable

OIDC client secret (optional).

SPEEDTEST_OIDC_DISPLAY_NAMEVariable

Label shown on the OIDC sign-in button.

Default
SSO
Value
SSO
SPEEDTEST_OIDC_ADMIN_EMAILVariable

Email of the user to auto-promote to admin on first OIDC sign-in.

SPEEDTEST_OIDC_ALLOW_NEW_USERSVariable

'true' to auto-create accounts on first OIDC sign-in, 'false' to require admin pre-provisioning.

Default
true
Value
true

Details

Repository
ghcr.io/greite/speedtest-monitor:latest
Last Updated2026-06-01
First Seen2026-05-12

Run speedtest-monitor on Unraid.

speedtest-monitor is listed in Community Apps for Unraid OS. Explore Unraid to build a flexible home server, NAS, or homelab.