--- 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). ::