docker run -d --name speedtest-tracker --restart unless-stopped \\
-p 8080:80 \\
-p 8443:443 \\
-e PUID= \\
-e PGID= \\
-e APP\_KEY= \\
-e APP\_URL= \\
-e DB\_CONNECTION=sqlite \\
-v /path/to/data:/config \\
-v /path/to-custom-ssl-keys:/config/keys \\
lscr.io/linuxserver/speedtest-tracker:latest
{% endtab %}
{% tab title="MariaDB" %}
\`\`\`
docker run -d --name speedtest-tracker --restart unless-stopped \\
-p 8080:80 \\
-p 8443:443 \\
-e PUID= \\
-e PGID= \\
-e APP\_KEY= \\
-e APP\_URL= \\
-e DB\_CONNECTION=mariadb \\
-e DB\_HOST= \\
-e DB\_PORT=3306 \\
-e DB\_DATABASE=speedtest\_tracker \\
-e DB\_USERNAME= \\
-e DB\_PASSWORD= \\
-v /path/to/data:/config \\
-v /path/to-custom-ssl-keys:/config/keys \\
lscr.io/linuxserver/speedtest-tracker:latest
\`\`\`
{% endtab %}
{% tab title="MySQL" %}
\`\`\`
docker run -d --name speedtest-tracker --restart unless-stopped \\
-p 8080:80 \\
-p 8443:443 \\
-e PUID= \\
-e PGID= \\
-e APP\_KEY= \\
-e APP\_URL= \\
-e DB\_CONNECTION=mysql \\
-e DB\_HOST= \\
-e DB\_PORT=3306 \\
-e DB\_DATABASE=speedtest\_tracker \\
-e DB\_USERNAME= \\
-e DB\_PASSWORD= \\
-v /path/to/data:/config \\
-v /path/to-custom-ssl-keys:/config/keys \\
lscr.io/linuxserver/speedtest-tracker:latest
\`\`\`
{% endtab %}
{% tab title="Postgres" %}
\`\`\`
docker run -d --name speedtest-tracker --restart unless-stopped \\
-p 8080:80 \\
-p 8443:443 \\
-e PUID=1000 \\
-e PGID=1000 \\
-e APP\_KEY= \\
-e APP\_URL= \\
-e DB\_CONNECTION=pgsql \\
-e DB\_HOST= \\
-e DB\_PORT=5432 \\
-e DB\_DATABASE=speedtest\_tracker \\
-e DB\_USERNAME= \\
-e DB\_PASSWORD= \\
-v /path/to/data:/config \\
-v /path/to-custom-ssl-keys:/config/keys \\
lscr.io/linuxserver/speedtest-tracker:latest
\`\`\`
{% endtab %}
{% endtabs %}
{% hint style="info" %}
If you would like to provide your own SSL keys, they must be named \`cert.crt\` (full chain) and \`cert.key\` (private key), and mounted in the container folder \`/config/keys\`.
{% endhint %}
{% endstep %}
{% step %}
\*\*Environment Variables\*\*
In order for the application to run smoothly, some environment variables need to be set. Check out the \[Environment Variables\](/getting-started/environment-variables.md) section. Make sure all \*\*required\*\* variables are configured.
{% endstep %}
{% step %}
\*\*Configuration Variables (Optional)\*\*
You can set configuration variables to have automatic speedtest on an schedule. Check out the \[Environment Variables\](/getting-started/environment-variables.md#speedtest) section on how to set the variables. Also see the \[FAQ\](/help/faqs.md#speedtest) for tips effectively scheduling tests.
{% hint style="info" %}
Complete overview of the Environment Variables for custom configuration can be found \[here\](/getting-started/environment-variables.md).
{% endhint %}
{% endstep %}
{% step %}
\*\*Start the Container\*\*
You can now start the container accordingly the platform you are on.
{% endstep %}
{% step %}
\*\*First Login\*\*
During the start the container there is a default username and password created. Use the \[default login\](/security/authentication.md#default-user-account) credentials to login to the application. You can \[change the default user\](/security/authentication.md#change-account-details) after logging in.
{% endstep %}
{% endstepper %}
\[^1\]: Generate with: \`echo "base64:$(openssl rand -base64 32 2>/dev/null)"\`
\[^2\]: The URL where you'll access the app (e.g., \`http://localhost:8080\`)
---
# Unknown
\> For the complete documentation index, see \[llms.txt\](https://docs.speedtest-tracker.dev/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://docs.speedtest-tracker.dev/getting-started/installation/using-unraid.md).
# Using Unraid
### Install on Unraid OS
Use the Community Applications plugin to install one of the templates below by searching for "Speedtest Tracker".
\* LinuxServer.io - \[Template support\](https://github.com/linuxserver/docker-speedtest-tracker)
\* ZappyZap - \[Template support\](https://forums.unraid.net/topic/130245-support-devzwf-speedtest-tracker/)
---
# Unknown
\> For the complete documentation index, see \[llms.txt\](https://docs.speedtest-tracker.dev/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://docs.speedtest-tracker.dev/getting-started/installation/using-synology.md).
# Using Synology
{% hint style="warning" %}
The following directions are for the old "Docker" application, if you're using "Container Manager" you can follow the docker compose instructions in \[Using Docker Compose\](/getting-started/installation/using-docker-compose.md).
{% endhint %}
### Install on a Synology NAS
{% hint style="warning" %}
This guide assumes you know how to use the old "Docker" application.
{% endhint %}
{% stepper %}
{% step %}
\*\*Download Image\*\*
Open the Docker interface of your Synology Device, search for \`linuxserver/speedtest-tracker\` in the Registry and download it.
{% endstep %}
{% step %}
\*\*Create Directory\*\*
Create a local directory (i.e. \`/volume1/docker/speedtest-tracker\`) which later can be mapped to the docker container.
{% endstep %}
{% step %}
\*\*Start Image\*\*
Launch the image once the download is completed.
{% endstep %}
{% step %}
\*\*Map Ports\*\*
Map the ports to available ports.
| Local Port | Container Port |
| ---------- | -------------- |
| 8443 | 443 |
| 8080 | 80 |
{% hint style="info" %}
Make sure the ports you choose are not used by any other application or DSM service on your device and remember to adjust the Synology Firewall settings accordingly.
{% endhint %}
{% endstep %}
{% step %}
\*\*Map Directory\*\*
Map the directory you created earlier to the mount path \`/config\`.
{% endstep %}
{% step %}
\*\*Finish\*\*
Review your settings and click "done".
You can now access Speedtest-Tracker via \`http://YOUR\_IP\_ADDRESS:8080\` or \`https://YOUR\_IP\_ADDRESS:8443\`.
{% endstep %}
{% endstepper %}
---
# Unknown
\> For the complete documentation index, see \[llms.txt\](https://docs.speedtest-tracker.dev/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://docs.speedtest-tracker.dev/getting-started/database-drivers.md).
# Database Drivers
Since Speedtest Tracker is built on the Laravel Framework any of the framework's supported database \[drivers\](https://laravel.com/docs/10.x/database#configuration) are also supported.
SQLite ships as the default driver but you can also use MySQL/MariaDB/Postgres.
> While SQL Server is supported by Laravel it hasn't been tested with Speedtest Tracker so no support will be provided for that driver.
\*\*\*
### Driver Options
#### SQLite (Default)
SQLite is a good option for simple installs. The database will be create automatically inside the docker volume.
| Environment Variable | Value |
| -------------------- | -------- |
| \`DB\_CONNECTION\` | \`sqlite\` |
#### MariaDB
| Environment Variable | Value |
| -------------------- | -------------------------------------------------------- |
| \`DB\_CONNECTION\` | \`mariadb\` |
| \`DB\_HOST\` | The FQDN or address to the database instance. |
| \`DB\_PORT\` | \`3306\` is the default port but can depend on your setup. |
| \`DB\_DATABASE\` | Name of the database you'll connect to. |
| \`DB\_USERNAME\` | User that'll be used to connect to the database. |
| \`DB\_PASSWORD\` | Password for the user above. |
#### MySQL
| Environment Variable | Value |
| -------------------- | -------------------------------------------------------- |
| \`DB\_CONNECTION\` | \`mysql\` |
| \`DB\_HOST\` | The FQDN or address to the database instance. |
| \`DB\_PORT\` | \`3306\` is the default port but can depend on your setup. |
| \`DB\_DATABASE\` | Name of the database you'll connect to. |
| \`DB\_USERNAME\` | User that'll be used to connect to the database. |
| \`DB\_PASSWORD\` | Password for the user above. |
#### Postgres
| Environment Variable | Value |
| -------------------- | -------------------------------------------------------- |
| \`DB\_CONNECTION\` | \`pgsql\` |
| \`DB\_HOST\` | The FQDN or address to the database instance. |
| \`DB\_PORT\` | \`5432\` is the default port but can depend on your setup. |
| \`DB\_DATABASE\` | Name of the database you'll connect to. |
| \`DB\_USERNAME\` | User that'll be used to connect to the database. |
| \`DB\_PASSWORD\` | Password for the user above. |
| \`DB\_SEARCH\_PATH\` | To change the database schema used by Postgres. |
---
# Unknown
\> For the complete documentation index, see \[llms.txt\](https://docs.speedtest-tracker.dev/llms.txt). Markdown versions of documentation pages are available by appending \`.md\` to page URLs; this page is available as \[Markdown\](https://docs.speedtest-tracker.dev/getting-started/environment-variables.md).
# Environment Variables
### Application
| Name | Required | Description | Example |
|---|---|---|---|
PUID | true | Used to set the user the container should run as. | 1000 |
PGID | true | Used to set the group the container should run as. | 1000 |
APP\_KEY | true | Key used to encrypt and decrypt data. See the install docs to generate a key. | |
APP\_URL | true | URL used for links in emails and notifications. | https://speedtest.example.com |
APP\_NAME | false | Used to define the application's name in the dashboard and in notifications. | |
ADMIN\_NAME | false | Name of the initial admin user. Note: Only effective during initial setup. | Admin |
ADMIN\_EMAIL | false | Email of the initial admin user. Note: Only effective during initial setup. | admin@example.com |
ADMIN\_PASSWORD | false | Password of the initial admin user. Note: Only effective during initial setup. | password |
ASSET\_URL | false | URL used for assets, needed when using a reverse proxy. | https://speedtest.example.com |
APP\_LOCALE | false | Change the default language. | |
APP\_TIMEZONE | false | Application timezone should be set if your database does not use UTC as its default timezone. | Europe/London |
ALLOWED\_IPS | false | Block requests to the application unless from the allowed addresses. | 127.0.0.1,127.0.0.2 |
| Name | Required | Description | Example |
|---|---|---|---|
CHART\_BEGIN\_AT\_ZERO | false | Begin the dashboard axis charts at zero. - Default: true | true or false |
CHART\_DATETIME\_FORMAT | false | Set the formatting of timestamps in charts. Formatting: https://www.php.net/manual/en/datetime.format.php | j/m G:i(18/10 20:06) |
DATETIME\_FORMAT | false | Set the formatting of timestamps in tables and notifications. Formatting: https://www.php.net/manual/en/datetime.format.php | j M Y, G:i:s(18 Oct 2024, 20:06:01) |
DISPLAY\_TIMEZONE | false | Display timestamps in your local time. | America/New\_York |
CONTENT\_WIDTH | false | Width of the content section of each page. Can be set to any value found in the Filament docs. - Default: 7xl | |
PUBLIC\_DASHBOARD | false | Enables the public dashboard for guest (unauthenticated) users. - Default: false | |
DEFAULT\_CHART\_RANGE | false | Set the default time range for the dashboards - Default: 24h | Options: 24h, week or month |
| Name | Required | Description | Example |
|---|---|---|---|
SPEEDTEST\_SKIP\_IPS | false | A comma separated list of public IP addresses where tests will be skipped when present. | 127.0.0.1 or 127.0.0.0/16 |
SPEEDTEST\_SCHEDULE | false | Cron expression used to run speedtests on a scheduled basis. https://crontab.guru/ is a helpful tool. | 6 \*/2 \* \* \*(At minute 6 past every 2nd hour) |
SPEEDTEST\_SERVERS | false | Comma separated list of server IDs to randomly use for speedtest. To find servers near you visit: https://www.speedtest.net/api/js/servers | 52365 or 36998,52365 |
SPEEDTEST\_BLOCKED\_SERVERS | false | Comma separated list of server IDs that should not be used when running an Ookla Speedtest. | |
SPEEDTEST\_INTERFACE | false | Set the network interface to use for the test. This need to be the network interface available inside the container | eth0 |
SPEEDTEST\_EXTERNAL\_IP\_URL | false | URL of a service used to get the external WAN IP address. URL should contain the protocol i.e. https:// | https://icanhazip.com |
SPEEDTEST\_INTERNET\_CHECK\_HOSTNAME | false | Hostname used to ping for an active internet connection. | |
THRESHOLD\_ENABLED | false | Enable the thresholds. Note: Only effective during initial setup. | true |
THRESHOLD\_DOWNLOAD | false | Set the Download Threshold Note: Only effective during initial setup. | 900 |
THRESHOLD\_UPLOAD | false | Set the Upload Threshold Note: Only effective during initial setup. | 900 |
THRESHOLD\_PING | false | Set the Ping Threshold Note: Only effective during initial setup. | 25 |
PRUNE\_RESULTS\_OLDER\_THAN | false | Set the value to greater than zero to prune stored results. This value should be represented in days, e.g. 7 will purge all results over 7 days old. | 7 |
| Name | Required | Description | Example |
|---|---|---|---|
API\_RATE\_LIMIT | false | Number of requests per minute to the API. - Default: 60 | 100 |
API\_MAX\_RESULTS | false | Sets the maximum number of results returned by API. - Default 500 | 500 |
APP\_KEY is missingLogin page
| User | Admin | |
|---|---|---|
| View any (list) | true | true |
| View (show) | true | true |
| Create | false | false |
| Update | true | true |
| Delete any (bulk) | false | true |
| Delete | false | true |
| User | Admin | |
|---|---|---|
| View any (list) | false | true |
| View (show) | false | true |
| Create | false | true |
| Update | false | true |
| Delete any (bulk) | false | true |
| Delete | false | true |
| User | Admin | |
|---|---|---|
| Manage API tokens | false | true |
| Trigger a manual Speedtest | true | true |
| User | Admin | |
|---|---|---|
| Data integrations | false | true |
| Notifications | false | true |
| Thresholds | false | true |
500 | SERVER ERROR erroraes-128-cbc, aes-256-cbc, aes-128-gcm, aes-256-gcm.| Field | Type | Description |
|---|---|---|
id | primary key | |
service | string | Service user to run the speedtest. |
ping | double | As milliseconds |
download | unsigned big int | As bytes |
upload | unsigned big int | As bytes |
comments | text | User added comments. |
data | json | The raw response from the speedtest. |
benchmarks | json | Captures the speedtest's benchmarks at run time. |
healthy | boolean | Indicates if the speedtest was healthy compared to the benchmark. |
status | string |
|
scheduled | boolean | Was the result scheduled. |
created\_at | timestamp | When the record was created. |
updated\_at | timestamp | When the record was last updated. |
Mail settings
| Name | Description |
|---|---|
| on every scheduled speedtest run | On each successful scheduled speedtest a notification will be send to the application. |
| on threshold failures for scheduled speedtests | On any absolute threshold failure for scheduled speedtest a notification will be send to the application. |
Database settings
| Name | Description |
|---|---|
| on every scheduled speedtest run | On each successful scheduled speedtest a notification will be send to the application. |
| on threshold failures for scheduled speedtests | On any absolute threshold failure for scheduled speedtest a notification will be send to the application. |
Webhook settings
| Name | Description |
|---|---|
| on every scheduled speedtest run | On each successful scheduled speedtest a notification will be send to the application. |
| on threshold failures for scheduled speedtests | On any absolute threshold failure for scheduled speedtest a notification will be send to the application. |
| Command | Description |
|---|---|
about | Provides information on the current version of Speedtest Tracker, Laravel and Filament. |
| Command | Description |
|---|---|
app:ookla-list-servers | Get a list of local Ookla speedtest servers. |
app:user-change-role | Change the role for a user. |
app:user-reset-password | Change the password for a user. |
| Command | Description |
|---|---|
app:result-fix-statuses | Reviews the data payload of each result and corrects the status attribute. |
| Name | Description |
|---|---|
| on every scheduled speedtest run | On each successful scheduled speedtest a notification will be send to the application. |
| on threshold failures for scheduled speedtests | On any absolute threshold failure for scheduled speedtest a notification will be send to the application. |
| Name | |
|---|---|
app\_name | label |
isp | label |
server\_id | label |
server\_name | label |
server\_country | label |
server\_location | label |
healthy | label |
status | label |
scheduled | label |
download\_bytes | Metric |
upload\_bytes | Metric |
ping | Metric |
download\_bits | Metric |
upload\_bits | Metric |
download\_jitter | Metric |
upload\_jitter | Metric |
ping\_jitter | Metric |
download\_latency\_avg | Metric |
download\_latency\_high | Metric |
download\_latency\_low | Metric |
upload\_latency\_avg | Metric |
upload\_latency\_high | Metric |
upload\_latency\_low | Metric |
packet\_loss | Metric |
| Added compose part | Description |
|---|---|
APP\_URL | URL you want to access the WebGui on. |
ASSET\_URL | URL used for loading all the needed assets. Need to be the same as the APP\_URL. |
traefik.enable=true | Explicitly tell Traefik to expose this container |
traefik.http.routers.speedtest-tracker.rule=Host(\`speedtest.yourdomain.com\`) | The domain the service will respond to |
traefik.http.routers.speedtest-tracker.entrypoints=websecure | Allow request only from the predefined entry point |
traefik.http.routers.speedtest-tracker.tls=true | When a TLS section is specified, it instructs Traefik that the current router is dedicated to HTTPS requests only |
traefik.http.routers.speedtest-tracker.tls.certresolver=yourresolver | Explicitly tell Traefik which Certificate provider to use matching your Traefik configuration |
traefik.http.services.speedtest-tracker.loadbalancer.server.port=80 | Explicitly tell Traefik port to use to connect to the container |
| Added compose part | Description |
|---|---|
APP\_URL | URL you want to access the WebGui on. |
ASSET\_URL | URL used for loading all the needed assets. Need to be the same as the APP\_URL. |
| Name | Default | Description |
|---|---|---|
| URL | blank | FQDN or IP address to the InfluxDB2 instance |
| Org | blank | Organization on which you created your bucket in |
| Bucket | speedtest-tracker | The name of the bucket you created in your org |
| Token | blank | API token that has access to write to the org and bucket listed above |
Influxdb v2 Settings
| Name | Data Type | |
|---|---|---|
result\_id | String | Tag |
external\_ip | String | Tag |
isp | String | Tag |
service | String | Tag |
server\_id | String | Tag |
server\_name | String | Tag |
server\_country | String | Tag |
server\_location | String | Tag |
healthy | String | Tag |
status | String | Tag |
scheduled | String | Tag |
download | init | Field |
upload | init | Field |
ping | float | Field |
download\_bits | int | Field |
upload\_bits | int | Field |
download\_jitter | float | Field |
upload\_jitter | float | Field |
ping\_jitter | float | Field |
download\_latency\_avg | float | Field |
download\_latency\_high | float | Field |
download\_latency\_low | float | Field |
upload\_latency\_avg | float | Field |
upload\_latency\_high | float | Field |
upload\_latency\_low | float | Field |
packet\_loss | float | Field |