---
title: Speedtest Tracker
description: Installer Speedtest Tracker pour mesurer et historiser automatiquement le débit de votre connexion internet, exposé avec SWAG.
---


:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}

[Speedtest Tracker](https://docs.speedtest-tracker.dev/) est un conteneur qui permet de planifier des tests de débit réguliers afin d'historiser l'état de la connexion internet de votre serveur.

![speedtest-tracker](/img/serveex/speedtest-tracker.avif)

## Installation
::note{to="https://docs.linuxserver.io/images/docker-speedtest-tracker/"}

Nous utiliserons l'image Docker maintenue par **LinuxServer.io**
::

::file-tree
---
tree:
  /:
    - srv:
      - docker:
        - speedtest-tracker:
          - compose.yaml
          - .env
          - data:
            - config/
---
::

::steps{level="3"}
### Générer une clé d'application

Dans un terminal, générez une clé avec la commande suivante :

```bash [Terminal]
echo -n 'base64:'; openssl rand -base64 32;
```

Notez la clé.

### Déployer la stack

Ouvrez Dockge, cliquez sur `compose`, nommez la stack `speedtest-tracker`, puis collez ce qui suit :

```yaml [compose.yaml]
---
services:
    speedtest-tracker:
        image: lscr.io/linuxserver/speedtest-tracker:latest
        restart: unless-stopped
        container_name: speedtest-tracker
        ports:
            - ${PORT}:80
        environment:
            - PUID=${PUID}
            - PGID=${GUID}
            - TZ=Europe/Paris
            - APP_KEY=${API_KEY}
            - DB_CONNECTION=sqlite
            - SPEEDTEST_SCHEDULE=${SCHEDULE}
        volumes:
            - /srv/docker/speedtest-tracker/data/config:/config
```

### Renseigner vos variables d'environnement

Trouvez vos `PUID` et `GUID` avec la commande suivante :

```bash [Terminal]
id votreutilisateur
```

Dans le fichier `.env`, renseignez la variable `API_KEY` avec la clé générée et ajoutez une planification des tests au format cron, ainsi que vos `PUID` et `GUID`, par exemple :

```properties [.env]
SCHEDULE=15 */6 * * * # toutes les 6 heures
API_KEY=base64:zihejehkj8_nzhY/OjeieR= # votre clé
PUID=1000
GUID=1000
PORT=3225 # port d'accès à l'interface web
```

::tip{icon="" to="https://docs.speedtest-tracker.dev/getting-started/environment-variables"}
✨ **Astuce :** vous pouvez configurer d'autres variables d'environnement en vous référant à la **documentation officielle**.
::

Déployez le conteneur et allez sur `http://ipdevotreserveur:3225`. Connectez-vous avec le compte `admin@exemple.com` et le mot de passe `password`. N'oubliez pas de changer votre identifiant et votre mot de passe une fois connecté !

### Terminé !
::

## Exposer Speedtest Tracker avec SWAG
::note
📋 **Prérequis :**  
Nous partons du principe que vous avez déjà créé un sous-domaine du type `speedtest.mondomaine.fr` dans votre [zone DNS](/general/networking/dns) avec un `CNAME` pointant vers `mondomaine.fr`, et que, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), vous avez aussi redirigé le port `443` de votre box vers le port `443` de votre serveur dans vos [règles NAT](/general/networking/nat).
::

Nous voulons maintenant exposer Speedtest Tracker sur internet pour y accéder à distance. Nous partons du principe que vous avez configuré le `CNAME` DNS de `speedtest.mondomaine.fr` pointant vers `mondomaine.fr`.

::warning

Speedtest Tracker n'utilise pas d'authentification multifacteur. L'exposer sur internet pourrait compromettre les appareils connectés. Ne le faites que si vous utilisez un système multifacteur comme [TinyAuth](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, évitez SWAG et préférez un VPN comme [Wireguard](/serveex/core/wireguard).
::

::steps{level="3"}
### Créer le fichier subdomain.conf

Ouvrez le fichier `speedtest.subdomain.conf` :

```bash [Terminal]
sudo nano /srv/docker/swag/config/nginx/proxy-confs/speedtest.subdomain.conf
```

Configurez-le comme ceci :

```nginx [speedtest.subdomain.conf]
## Version 2023/12/19

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name speedtest.*;  

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; } 

    # Authentication options (uncomment as needed)
    #include /config/nginx/ldap-server.conf;
    #include /config/nginx/authelia-server.conf;
    #include /config/nginx/authentik-server.conf;

    location / {
        # Basic auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # Per-location authentication
        #include /config/nginx/ldap-location.conf;
        #include /config/nginx/authelia-location.conf;
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;

        set $upstream_app speedtest-tracker;
        set $upstream_port 3225;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }
}
```

Enregistrez et quittez. La configuration se met à jour en quelques secondes.

### Ajouter le réseau de Speedtest Tracker à SWAG

::note

Par défaut, SWAG ne connaît pas le nom « speedtest-tracker ». Pour autoriser l'accès, vous devez ajouter le réseau de Speedtest Tracker au `compose.yml` de SWAG.
::

Allez dans Dockge et modifiez le compose de SWAG pour y inclure le réseau de Speedtest Tracker :

```yaml [compose.yaml]
---
services:
  swag:
    container_name: # ...
    # ...
    networks:
      # ...
      - speedtest-tracker

networks:
  # ...
  speedtest-tracker:
    name: speedtest-tracker_default
    external: true
```

Redémarrez la stack en cliquant sur « Deploy » et attendez que SWAG soit complètement démarré.

::note

Ceci suppose que le réseau de Speedtest Tracker s'appelle `speedtest-tracker_default`. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur `http://ipdevotreserveur:81`.
::

### Terminé !
::

Patientez un instant, puis visitez `https://speedtest.mondomaine.fr` dans votre navigateur. Vous devriez être redirigé vers Speedtest Tracker. Vous pouvez vérifier l'état du service via le tableau de bord (`http://ipdevotreserveur:81` depuis le réseau local).

## Protéger Speedtest Tracker avec TinyAuth
Ajoutez la vérification forward-auth de [TinyAuth](/serveex/security/tinyauth) directement dans `speedtest.subdomain.conf`, de la même façon que dans [le tutoriel TinyAuth](/serveex/security/tinyauth#protecting-an-app-via-reverse-proxy) :

```nginx [speedtest.subdomain.conf]{22-34,37-38}
## Version 2023/12/19

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name speedtest.*;  

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    #if ($lan-ip = yes) { set $geo-whitelist yes; }
    #if ($geo-whitelist = no) { return 404; }
    if ($geo-blacklist = no) { return 404; } 

    # Authentication options (uncomment as needed)
    #include /config/nginx/ldap-server.conf;
    #include /config/nginx/authelia-server.conf;
    #include /config/nginx/authentik-server.conf;

    location /tinyauth {
        internal;
        proxy_pass http://tinyauth:3000/api/auth/nginx;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Forwarded-Uri $request_uri;
    }

    location @tinyauth_login {
        return 302 https://tinyauth.mondomaine.fr/login?redirect_uri=$scheme://$http_host$request_uri;
    }

    location / {
        auth_request /tinyauth;
        error_page 401 = @tinyauth_login;

        # Basic auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # Per-location authentication
        #include /config/nginx/ldap-location.conf;
        #include /config/nginx/authelia-location.conf;
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;

        set $upstream_app speedtest-tracker;
        set $upstream_port 3225;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }
}
```

::note{to="/serveex/security/tinyauth#exposing-tinyauth-with-swag"}

Le bloc `location /tinyauth` s'exécute dans le conteneur de SWAG lui-même, SWAG doit donc être sur le réseau Docker de TinyAuth pour le joindre par son nom (`tinyauth` ici). Cela devrait déjà être en place depuis **l'exposition de TinyAuth**. Si vous rencontrez une erreur, revérifiez que le fichier compose de SWAG a toujours ce réseau rattaché.
::

::tip{icon=""}
✨ Vous pouvez protéger cette application avec [Authentik](/serveex/advanced/authentik) plutôt que TinyAuth, en ouvrant `speedtest.subdomain.conf` et en décommentant  
`include /config/nginx/authentik-server.conf;` et `include /config/nginx/authentik-location.conf;`.  
N'oubliez pas de [créer une application et un provider dans Authentik](/serveex/advanced/authentik#protecting-an-app-via-reverse-proxy).
::
