Files
docudjeex/content/fr/3.serveex/4.monitoring/1.uptime-kuma.md
T

9.5 KiB

title, description
title description
Uptime-Kuma Installer Uptime-Kuma pour surveiller la disponibilité de vos services auto-hébergés, configurer des alertes et protéger éventuellement le tableau de bord avec Tinyauth ou Authentik

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

picture

Installation

::file-tree

tree: /: - srv: - docker: - uptime-kuma: - data/ - compose.yaml

::

::steps{level="3"}

Déployer la stack

Ouvrez Dockge, cliquez sur compose, nommez la stack uptime-kuma, puis copiez-collez ce qui suit :

---
services:
  uptime-kuma:
    image: louislam/uptime-kuma:2-slim
    container_name: uptime-kuma
    volumes:
      - /srv/docker/uptime-kuma/uptime-kuma-data:/app/data
    ports:
      - 3200:3001 # <Port hôte>:<Port conteneur>
    restart: always

::tip{icon=""} Astuce : ajoutez le label Watchtower à chaque conteneur pour automatiser les mises à jour

```yaml [compose.yaml]
services:
  uptime-kuma:
    #...
    labels:

      - com.centurylinklabs.watchtower.enable=true
```

::

Accéder à l'interface web

Vous pouvez maintenant accéder à l'outil via http://ipdevotreserveur:3200.

::caution

Si ça ne marche pas : vérifiez les règles de votre pare-feu. ::

Terminé !

::

Exposer avec Swag

::note{icon=""} 📋 Au préalable :

Nous partons du principe que vous avez le sous-domaine stats.mondomaine.fr avec un CNAME pointant vers mondomaine.fr dans votre zone DNS. Et bien sûr, à moins d'utiliser Cloudflare Zero Trust, le port 443 de votre box doit pointer vers le port 443 de votre serveur via les règles NAT. ::

::warning

Uptime-Kuma n'utilise pas d'authentification multifacteur. L'exposer sur internet pourrait compromettre les machines qu'il surveille. Ne le faites que si vous utilisez un système MFA comme TinyAuth ou Authentik. Sinon, ne l'exposez pas avec SWAG, utilisez plutôt un VPN comme Wireguard. ::

::steps{level="3"}

Créer le fichier subdomain.conf

Dans les dossiers de Swag, créez le fichier stats.subdomain.conf.

::tip{icon="" to="/serveex/files/file-browser-quantum"} Astuce pour les allergiques au terminal : vous pouvez utiliser File Browser Quantum pour naviguer et modifier vos fichiers plutôt que des commandes dans le terminal. ::

sudo nano /srv/docker/swag/config/nginx/proxy-confs/stats.subdomain.conf

Collez la configuration suivante :

## Version 2023/12/19

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

    server_name stats.*;

    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; }

    # enable for ldap auth (requires ldap-location.conf in the location block)
    #include /config/nginx/ldap-server.conf;

    # enable for Authelia (requires authelia-location.conf in the location block)
    #include /config/nginx/authelia-server.conf;

    # enable for Authentik (requires authentik-location.conf in the location block)
    #include /config/nginx/authentik-server.conf;

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable for ldap auth (requires ldap-server.conf in the server block)
        #include /config/nginx/ldap-location.conf;

        # enable for Authelia (requires authelia-server.conf in the server block)
        #include /config/nginx/authelia-location.conf;

        # enable for Authentik (requires authentik-server.conf in the server block)
        #include /config/nginx/authentik-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app uptime-kuma;
        set $upstream_port 3001;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;

    }
}

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.

Ajouter le réseau d'Uptime-Kuma à SWAG

Dans Dockge, modifiez le compose de SWAG et ajoutez le réseau d'Uptime-Kuma :

---
services:
  swag:
     container_name: # ...
      # ... 
     networks:                 # Relie le conteneur au réseau personnalisé 
      # ...           
      - uptime-kuma            # Nom du réseau déclaré

networks:                      # Définit le réseau personnalisé
  # ...
  uptime-kuma:                 # Nom du réseau déclaré
    name: uptime-kuma_default  # Nom réel du réseau externe
    external: true             # Précise qu'il s'agit d'un réseau externe

Redémarrez la stack et attendez que SWAG soit pleinement opérationnel.

::note

Nous partons ici du principe que le nom du réseau d'Uptime-Kuma est uptime-kuma_default. Vous pouvez vérifier la connexion en visitant le tableau de bord de SWAG sur http://ipdevotreserveur:81. ::

Terminé !

::

Et voilà ! Uptime-Kuma est maintenant exposé, et vous pouvez y accéder via https://stats.mondomaine.fr.

Protéger Uptime-Kuma avec TinyAuth

TinyAuth peut se placer devant Uptime-Kuma comme devant n'importe quelle autre application, mais ici nous voulons aussi que la page de statut publique (et les ressources dont elle a besoin pour s'afficher) reste joignable sans se connecter. Cela utilise la même technique de location en expression régulière que Laisser certains chemins publics, appliquée directement à stats.subdomain.conf.

::steps{level="3"}

Ouvrir le fichier subdomain.conf

sudo nano /srv/docker/swag/config/nginx/proxy-confs/stats.subdomain.conf

Ajouter la vérification forward-auth et les chemins publics

Remplacez le contenu du fichier par ce qui suit. Le bloc location ~ ^/(...) correspond à la page de statut publique d'Uptime-Kuma et à ses ressources, et est servi directement, sans jamais atteindre la vérification auth_request du location / :

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

    server_name stats.*;

    include /config/nginx/ssl.conf;

    location ~ ^/(status|assets|icon\.svg|api|upload|metrics) {
        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app uptime-kuma;
        set $upstream_port 3001;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }

    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;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app uptime-kuma;
        set $upstream_port 3001;
        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é. ::

Appuyez sur :kbd{value="Ctrl+O"}, puis :kbd{value="Enter"} pour enregistrer, et :kbd{value="Ctrl+X"} pour quitter.

Terminé !

::

Redéployez la stack. Uptime-Kuma sera alors joignable publiquement via https://stats.mondomaine.fr, avec la page de statut ouverte et tout le reste derrière TinyAuth.

::tip{icon=""} Astuce : vous pouvez aussi protéger cette application avec Authentik à la place : ouvrez stats.subdomain.conf et décommentez les lignes 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. Modifiez ensuite le provider Uptime-Kuma, et dans Advanced Protocol Settings > Authenticated Paths, saisissez :

```properties
^/$
^/status
^/assets/
^/assets
^/icon.svg
^/api/.*
^/upload/.*
^/metrics
```

::

::tip{icon=""} Astuce : si vous utilisez TinyAuth ou Authentik et que l'exposition du panneau d'administration à votre réseau local ne vous dérange pas, vous pouvez désactiver l'authentification native d'Uptime-Kuma dans ses réglages et vous reposer uniquement sur celui qui le protège. ::