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