Quick Start
# Pull and configure
curl -o docker-compose.yml https://raw.githubusercontent.com/fabell4/hermes/main/docker-compose.yml
curl -o .env https://raw.githubusercontent.com/fabell4/hermes/main/.env.example
# Start containers
docker compose up -d
# Access the UI
open http://localhost:8080
Key Configuration
| Variable | Default | Description |
|---|---|---|
SPEEDTEST_INTERVAL_MINUTES |
60 |
How often to run speed tests |
ENABLED_EXPORTERS |
csv |
Comma-separated: csv, sqlite, prometheus, loki |
API_KEY |
(unset) | Enables authentication when set |
ALERT_FAILURE_THRESHOLD |
0 |
Consecutive failures before alerting (0 = disabled) |
PROMETHEUS_PORT |
8000 |
Port for /metrics scrape endpoint |
LOKI_URL |
(unset) | Loki push URL, e.g., http://loki:3100 |
See Getting Started for the full environment variable reference.
Architecture at a Glance
Hermes runs as two containers:
- hermes-scheduler — Background worker running speed tests on schedule, exposing Prometheus metrics on port
8000 - hermes-api — FastAPI backend + React frontend on port
8080
Data flows from the scheduler through exporters (CSV, SQLite, Prometheus, Loki) and is consumed by the frontend via the REST API.