ObserveAutomation

Speedtest tracking my network

October 15, 2025

Speedtest tracking my network

I like to know what speed i’m getting from my ISP. I found a nifty docker container to do that. The web site also provides instructions for k8s deployment.

Steps

As so often I chose to use a containerised version of “SpeedTest-Tracker”. Github here

To set it up, you first need to generate a key which will be used to encrypt data. Then you need to create your docker-compose with any custom variables. Last but not least, you want to create a volume for the container to persist its data.

Creating an encryption key

A key is required for encryption. The following command generates a key which can be used in the APP_KEY that will be set later.

echo -n 'base64:'; openssl rand -base64 32;

For ease of retrieval, I have saved that key in a file called APP_KEY.

Setting up a database

Speed Tracker will need somewhere to store its data. There are four choices: SQLite, MariaDB, MySQL and Postgres. For this experiment I will use SQLite.

I used portainer (already deployed on my ‘dock’ VM) to deploy the container.

I copied into Portainer the configuration that I will need from SpeedtestTracker’s documentation page for Docker Compose:

services:
    speedtest-tracker:
        image: lscr.io/linuxserver/speedtest-tracker:latest
        restart: unless-stopped
        container_name: speedtest-tracker
        ports:
            - 8080:80
            - 8443:443
        environment:
            - PUID=1000
            - PGID=1000
            - APP_KEY=
            - DB_CONNECTION=sqlite
        volumes:
            - /path/to/data:/config
            - /path/to-custom-ssl-keys:/config/keys

Then I enhanced the environment variables to suit my needs. The environment variables are documented here.

Beyond those already present in the yaml file, the key variables we need to set are: ADMIN_NAME, ADMIN_EMAIL, ADMIN_PASSWORD.

The admin name, email, password are used to set the initial login user. I used the following values:

To control the timezone used to display dates and times in the GUI, I also added this variable:

I will update the APP_KEY value with the one I created in the first step.

I will also create a Docker volume in ~/SpeedTest/data.

In Portainer, I added the yaml above and started the container.

Now I can get to https://dock:8443 where I have to create a user.

At first I could not see anything - It seems the web page assumes the user is running in dark mode. I had to select the text to see what was there: Alt

Selecting the first entry takes me to a sign-in page where I gave the initial user-email/password.

Interestingly, you can set the initial user / email / password as environment variables. These are documented here. Look for the “ADMIN” entries.

You can also set the speedtest to run on a schedule by setting the SPEEDTEST_SCHEDULE environment variable. Here’s an example to run a speedtest at 12 minutes past every even hour (i.e. 00:12, 02:12, 04:12, etc.).

SPEEDTEST_SCHEDULE=12 */2 * * *

The dashboard looks like this (*more data is available if you scroll down): SpeedTest-Tracker Dashboard

While I find this very useful… and in the above screenshot you can see that I had an issue, though it was not with my ISP but due to re-using some old Cat5 cables which caused the LAN speed between a couple switches to drop to 100MBits/s for a few days. One caveat, though, is that if the internet is not reachable, nothing is recorded and you can’t see that the connection dropped completely.

When I get time, I may look at the code and see if I can create a pull request. No promises…