Skip to content

Add Speedtest Tracker service with Homepage widget #30

@riccjohn

Description

@riccjohn

Summary

Add Speedtest Tracker as a self-hosted service that runs periodic internet speed tests and exposes results via a web UI and API. Wire it into the Homepage dashboard using the built-in speedtest widget.

Context

This repo runs a Docker Compose home server stack on Ubuntu Server (192.168.0.243). All services share a single proxy bridge network and are routed through Traefik with wildcard TLS certs for *.woggles.work. Homepage dashboard config lives in homepage/config/.

The target subdomain is speedtest.woggles.work.

Files to change

1. docker-compose.yml

Add a new speedtest-tracker service following the same pattern as existing services:

  • Image: lscr.io/linuxserver/speedtest-tracker:latest
  • Container name: speedtest-tracker
  • PUID=1000, PGID=1000, TZ=${TZ:-America/New_York}
  • APP_KEY env var from .envrequired by the app (Laravel app key, format: base64:<32-byte-base64-string>). Generate with: echo "base64:$(openssl rand -base64 32)"
  • DB_CONNECTION=sqlite (no external DB needed)
  • Volume: ./speedtest-tracker/config:/config
  • Network: proxy
  • Traefik labels for speedtest.woggles.work on websecure, cert resolver cloudflare, internal port 80
  • restart: unless-stopped

Also add to the homepage service environment: block:

- HOMEPAGE_VAR_SPEEDTEST_API_KEY=${SPEEDTEST_API_KEY:-}

2. homepage/config/services.yaml

Add a new entry to the Network group (or create an ISP group if preferred):

- Speedtest Tracker:
    href: https://speedtest.woggles.work
    description: Periodic internet speed tests
    icon: speedtest-tracker
    widget:
      type: speedtest
      url: http://speedtest-tracker:80
      key: "{{HOMEPAGE_VAR_SPEEDTEST_API_KEY}}"

3. .env.example

Add two new variables:

# Speedtest Tracker
# APP_KEY is required — generate with: echo "base64:$(openssl rand -base64 32)"
SPEEDTEST_TRACKER_APP_KEY=
# API key for Homepage widget (Settings > API Tokens in Speedtest Tracker UI after first run)
SPEEDTEST_API_KEY=

Constraints & conventions to follow

  • Run ./scripts/lint-config.sh before opening a PR — it validates that every {{HOMEPAGE_VAR_*}} in services.yaml is wired into docker-compose.yml and every bare ${VAR} in docker-compose.yml exists in .env.example.
  • Use a feature branch, not main. One PR for this feature only.
  • Follow the exact indentation and ordering style of existing services in each file.
  • The APP_KEY must be passed as SPEEDTEST_TRACKER_APP_KEY in .env / .env.example and referenced in docker-compose.yml as APP_KEY: ${SPEEDTEST_TRACKER_APP_KEY} to avoid name collisions.

Acceptance criteria

  • speedtest-tracker service defined in docker-compose.yml with correct env vars, volume, network, and Traefik labels
  • Homepage environment: block includes HOMEPAGE_VAR_SPEEDTEST_API_KEY
  • homepage/config/services.yaml includes a Speedtest Tracker entry with the speedtest widget
  • .env.example documents both SPEEDTEST_TRACKER_APP_KEY and SPEEDTEST_API_KEY with comments
  • ./scripts/lint-config.sh exits 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions