273 lines
10 KiB
Markdown
273 lines
10 KiB
Markdown
---
|
|
title: Uptime-Kuma
|
|
description: 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}
|
|
|
|
[Uptime-Kuma](https://github.com/louislam/uptime-kuma) est un outil de surveillance auto-hébergé qui vérifie régulièrement si vos autres services et sites sont en ligne et joignables, et vous alerte dès que l'un d'eux tombe. Il permet aussi de construire une page de statut publique pour partager l'état de vos services avec d'autres personnes.
|
|
|
|

|
|
|
|
## 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 :
|
|
|
|
```yaml [compose.yaml]
|
|
---
|
|
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 :__
|
|
<br/><br/>
|
|
Nous partons du principe que vous avez le sous-domaine `stats.mondomaine.fr` avec un `CNAME` pointant vers `mondomaine.fr` dans votre [zone DNS](/general/networking/dns). Et bien sûr, [à moins d'utiliser Cloudflare Zero Trust](/serveex/security/cloudflare), le port `443` de votre box doit pointer vers le port `443` de votre serveur via les [règles NAT](/general/networking/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](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/authentik/). Sinon, ne l'exposez pas avec SWAG, utilisez plutôt un VPN comme [WireGuard](/serveex/core/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.
|
|
::
|
|
|
|
```bash [Terminal]
|
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/stats.subdomain.conf
|
|
```
|
|
Collez la configuration suivante :
|
|
|
|
```nginx [stats.subdomain.conf]
|
|
## 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 :
|
|
|
|
```yaml [compose.yaml]
|
|
---
|
|
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](/serveex/security/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](/serveex/security/tinyauth#laisser-certains-chemins-publics), appliquée directement à `stats.subdomain.conf`.
|
|
|
|
::steps{level="3"}
|
|
### Ouvrir le fichier subdomain.conf
|
|
|
|
```bash [Terminal]
|
|
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 /`. Seul `api/status-page` est laissé public, pas tout `/api`, car le reste de l'API d'Uptime-Kuma doit rester derrière l'authentification ; `/metrics` (l'endpoint Prometheus d'Uptime-Kuma) est volontairement absent de la regex pour la même raison :
|
|
|
|
```nginx [stats.subdomain.conf]{9-16,32-33}
|
|
server {
|
|
listen 443 ssl;
|
|
listen [::]:443 ssl;
|
|
|
|
server_name stats.*;
|
|
|
|
include /config/nginx/ssl.conf;
|
|
|
|
location ~ ^/(status|assets|icon\.svg|api/status-page|upload) {
|
|
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#exposer-tinyauth-avec-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](/serveex/advanced/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](/serveex/advanced/authentik#protéger-une-app-par-reverse-proxy). 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](/serveex/security/tinyauth) ou [Authentik](/serveex/advanced/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.
|
|
::
|