Tutoriel Uptime Kuma
De nombreux services en ligne disposent d'une page de statut en ligne tel que Dropbox, Netflix et bien d'autre encore. De nombreux services payant offre la possibilité de mettre en service votre propre page de statut en ligne, comme StatusPage, FreshStatus ou bien encore le célèbre UptimeRobot. Ces sites internet offrent la possibilité de surveiller vos services dans une version payante ou assez limitée en fonctionnalité.
C'est pour cela qu'un beau jour, un certain Louis Lam décide de changer les choses en proposant un outil open-source baptisé Uptime Kuma. L'outil se veut être une alternative complétement gratuite et sous licence libre du service UptimeRobot (limité en fonctionnalité et en ajout d'URL de site internet) tout en vous permettant d'héberger vous-même cet outil de surveillance. L'interface est claire, moderne et entièrement personnalisable. Elle est développée avec VueJS 3 et Bootstrap 5 pour l'interface Web et les WebSocket pour l'écoute des services et l'envoi des notifications. Uptime Kuma est régulièrement mis à jour par le développeur. Les utilisateurs peuvent envoyer leurs demandes de fonctionnalité ou de correction sur Github et rendre le projet meilleur.
Parmi les fonctionnalité que propose l'outil Uptime Kuma sont assez nombreuses :
L'installation et la configuration est assez simple, donc pourquoi attendre ?
C'est parti pour l'installation de Uptime Kuma ! L'outil s'installe sur un serveur Linux, de préférence et ne nécessite pas forcément d'énormes ressource. Dans un premier temps, je vous présente l'installation sous Docker, puis dans un second temps l'installation avec NodeJS. Je vais réaliser les deux installations sur un Debian 11 avec 512 Mb de RAM et 20 Gb de stockage. Ces capacités sont uniquement dédiées si le service Uptime Kuma est seulement installé. A vous d'adapter la configuration en fonction de vos besoins !
Afin de gagner du temps sur l'installation, Uptime Kuma peut être déployé depuis une image Docker. Dans le cas où vous ne disposez pas de Docker, suivez la procédure d'installation ci-dessous.
Avant toute installation, mettez à jour la liste des dépôt de Debian avec un coup de apt update
.
Installez quelques dépendances qui nous permettra d’utiliser des packages de transport sur HTTPS comme Curl ou GnuPG, qui est un outil GNU pour sécuriser les communications et le stockage de données, pour la récupération de la clé PGP :
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
On récupère à l'aide de Curl la clé PGP depuis le site officiel de Docker et on ajoute ensuite la clé sur le serveur Debian :
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
On ajoute ensuite les sources Docker aux sources APT de Debian et on mets à jour la liste des dépôts :
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
Vérifiez ensuite que les sources ont bien été prises en compte :
Procédez à l'installation de Docker sur le serveur :
sudo apt install docker-ce
On vérifie l'état des services Docker après installation et le service doit être en cours d'exécution :
sudo systemctl status docker
Une fois que Docker est désormais installé sur le serveur, il est nécessaire de cloner l'image Docker de Uptime Kuma afin de profiter du service.
On créé le volume Docker pour l'installation d'Uptime Kuma :
docker volume create uptime-kuma
On récupère l'image Docker d'Uptime Kuma et on place cette image dans le volume précédemment créé :
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
Vous pouvez également modifier le port d'écoute et le volume :
docker run -d --restart=always -p <PORT>:3001 -v <DOSSIER_OU_VOLUME>:/app/data --name uptime-kuma louislam/uptime-kuma:1
Pour les personnes qui préfèrent installer à la main leur propre instance Uptime Kuma, déroulons l'installation avec NodeJS. À noter que Uptime Kuma nécessite NodeJS >= à la version 14.
Avant toute installation, mettez à jour la liste des dépôt de Debian avec un coup de apt update
.
Si nécessaire, on installe Curl et on télécharge le script d'installation Bash de NodeJS (version 14, dernière en date) depuis le site officiel de NodeSources.
sudo apt install curl
curl -sL https://deb.nodesource.com/setup_14.x -o nodesource_setup.sh
Evitez d'installer NodeJS à l'aide de la commande apt install nodejs
car la version n'est pas à jour.
On procède à l'installation de NodeJS en exécutant le script Bash et ensuite installer directement NodeJS depuis les sources APT. Globalement, le script installe des modules complémentaires, configure les sources APT pour NodeJS et installe la clé PGP associée.
bash nodesource_setup.sh sudo apt install nodejs -y
On installe les modules de base essentiels à Npm :
sudo apt install build-essential
On vérifie la version de NodeJS prouvant ainsi que l'installation a bien fonctionnée :
node -v
On s'assure que Npm dispose bien de la dernière version actuellement disponible :
npm install npm -g
On installe ensuite Git, si nécessaire, pour cloner le dépôt d'Uptime Kuma :
sudo apt install git
On souhaite maintenant cloner les sources d'Uptime Kuma en clonant le repôt GitHub :
git clone https://github.com/louislam/uptime-kuma
Entrez dans le dossier téléchargé et exécutez l'installation du service avec npm :
cd uptime-kuma
npm run setup
Enfin, démarrer le serveur NodeJS automatiquement au démarrage du serveur avec le gestionnaire de processus Pm2 :
npm install pm2 -g
pm2 start /root/uptime-kuma/server/server.js --name uptime-kuma
pm2 startup
pm2 save
Vérifier les services lancés avec PM2 :
pm2 ls
Vous pouvez éventuellement lancer le service "uptime-kuma" sur un port ou un nom d'hôte différent :
pm2 start server/server.js --name uptime-kuma -- --port=80 --host=0.0.0.0
Gérer le service démarré avec Pm2 :
pm2 start uptime-kuma
pm2 stop uptime-kuma
pm2 restart uptime-kuma
Dans le cas où le développeur propose une nouvelle version, il est intéressant de mettre à jour l'instance sans pour autant tout réinstaller (vous imaginez sinon ). La dernière version est directement disponible dans les Releases du GitHub d'Uptime Kuma.
Retirez la dernière image docker et créez un autre conteneur avec le même volume.
Lancer ensuite la reconstruction de la nouvelle image :
docker pull louislam/uptime-kuma:1
docker stop uptime-kuma
docker rm uptime-kuma
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
Pour chaque nouvelle version, il faut un certain temps pour construire l’image Docker. Soyez patient si elle n’est pas encore disponible.
cd "<YOUR docker-compose.yml DIRECTORY>"
docker pull louislam/uptime-kuma:1
docker stop uptime-kuma
docker-compose up -d --force-recreate
Localisez le répertoire d'installation d'Uptime Kuma :
cd <uptime-kuma-directory>
On mets à jour depuis Git en spécifiant la dernière version disponible sur le Github d'Uptime Kuma avec la version dernièrement publiée :
git fetch --all
git checkout <VERSION> --force
On installe les dépendances et on reconstruit l'image :
npm ci --production
npm run download-dist
Enfin, on redémarre le service Pm2 lancé au préalable afin de prendre en compte la nouvelle mise à jour :
pm2 restart uptime-kuma
Et voilà ! Uptime Kuma est désormais installé soit avec Docker ou NodeJS, prêt à fonctionner. Passons maintenant à la configuration de l'interface, ajouter une sonde afin de surveiller un site internet et enfin configurer le service de notification.
L'interface Web est disponible à l'adresse suivante : http://<ip>:3001/
Nous remarquons que le port d'écoute par défaut 3001 (à ouvrir sur le pare-feu si nécessaire) et que l'interface écoute sur du HTTP, donc les identifiants de connexions passeront en claire sur le réseau Mettez Uptime Kuma sur un reverse proxy tel que Nginx Proxy Manager
Récupérez l'adresse IP sous Linux à l'aide de la commande ip a
Lors de l'ouverture de l'adresse URL dans le naviguer, un assistant vous propose de configurer les accès de connexion.
Vous voici dès à présent sur le tableau de bord :
Une sonde sera le processus qui surveillera le site internet spécifié. Au choix, le type de sonde peut être un site HTTP(s), TCP, mots dans un site HTTP(s), requête Ping, vérifier un enregistrement DNS et même un serveur de jeu Steam.
Le menu est assez complet : vous spécifier le type de sonde, le nom d'affichage explicit et l'adresse du site en question. De plus, vous pouvez spécifier l'intervalle de vérification du site internet, spécifier le nombre de tentative avant que le service soit considéré comme hors-service, spécifier la méthode d'appel du site (GET, POST...).
Des options avancées comme le choix des codes HTTP acceptable sur le service cible, le mode inversé qui signifie que si le service est en ligne, alors il sera alors considéré comme hors-service et vice-versa.
Le mode "Ignorer les erreurs liées au certificat SSL/TLS" désactive la vérification des certificats autosignés. Cette option peut être nécessaire dans le cas où vous obtenez l'erreur suivante : "Unable to verify the first certificate" lors de l'ajout de la sonde. Vous pouvez également spécifier des identifiants de connexions si une authentification HTTP Basic a été mise en place au préalable sur la configuration du serveur Web.
Dans le cas où un service tombe en panne, il est assez intéressant d'avertir l'administrateur réseau par un service de communication : soit par l'envoi classique SMTP (Mails) ou alors par l'envoi d'une notification depuis un service externe comme Telegram, Microsoft Teams, Slack...
Lors de la création d'une nouvelle notification, spécifiez le service de communication des notifications et le nom d'affichage des messages qui seront envoyés par le Bot.
Nous allons procéder à la configuration du service Telegram (messagerie chiffrée de bout-en-bout). Ce dernier est assez fiable et la configuration est relativement simple. Je vous envoi directement vers un tutoriel vous permettant de créer et de configurer le Bot Telegram.
Renseignez dans champ "Bot Token" le Token privé obtenu, dans l'assistant de configuration des notifications d'Uptime Kuma. On vous demande ensuite de spécifier un "Chat ID" : il s'agit du canal qui va recevoir les messages d'Uptime Kuma. Au choix, vous pouvez les recevoir soit par message privé, dans un salon dédié ou un groupe de discussion. Dans mon cas, je souhaite les recevoir directement par message privé.
Vous pouvez récupérer l'ID du canal de communication depuis d'adresse suivante en spécifiant le Token privé obtenu dans l'URL : https://api.telegram.org/bot<YOU_API_KEY>/getUpdates
Voici la réponse en retour de l'API de Telegram :
L'API se charge de récupérer les derniers messages envoyés depuis l'API. Ces messages contiennent plusieurs informations (message, date, infos de l'utilisateurs...) dont l'ID privé de l'utilisateur, encadré en rouge. Copier cet ID et renseignez-le dans le ChatID.
Ajoutez sur le bouton "Tester" afin de vérifier si la connexion à l'API a bien été réalisée.
Nous recevons bien le message de test sur Telegram :
Vous avez la possibilité, une fois la configuration fonctionnelle, de l'activer par défaut lors de l'ajout d'une nouvelle sonde sur Uptime Kuma et d'appliquer la configuration sur les sondes ne disposant pas encore de la configuration des notifications.
Cliquer tout en bas sur le bouton afin de valider l'enregistrement de la nouvelle sonde.
Vous remarquerez que l'état du service est en ligne. On obtient en direct le temps de réponde dans la durée, l'Uptime en pourcentage et un graphique du temps de réponse par minute. Vous pouvez également voir la date d'expiration du certificat SSL du site en nombre de jour et la date précise d'expiration :
En cliquant sur le lien en jaune, vous obtenez pas mal d'informations sur le certificat (émetteur, validité...) :
Maintenant que nous avons créé notre sonde, nous souhaitons l'afficher sur une page publique de statut en ligne. Cette page est accessible à l'adresse : http://<ip>/status
. Sur la page, vous pouvez ajouter une description et les sondes créée précédemment. Vous pouvez créer une section par type de service et peuvent être déplacée dans l'ordre que l'on souhaite. La page peut être entièrement personnalisable : ajout d'un nom personnalisé et d'un logo, définir le thème de la page (mode clair/sombre).
Cliquez sur afin d'éditer la page de statut publique.
La sonde est ajoutée sur la page publique :
Vous pouvez également ajout un message d'incident en cliquant sur , dans le cadre d'une prévention d'une opération de maintenance par exemple. Vous pouvez également modifier la couleur de style du message en cliquant sur le bouton "Style".
Voici le résultat final de la page de statut en ligne :
Enfin, vous pouvez par défaut directement rediriger directement l'utilisateur sur la page de statut en ligne en allant dans les paramètres d'Uptime Kuma.
N'hésitez pas à aller faire un tour dans les paramètres
Si un service tombe en panne, un message est directement envoyé sur Telegram !
Dans le cas ou vous souhaitez mettre un certificat SSL sur l'interface, il est nécessaire de "proxifier" Uptime Kuma soit avec Nginx ou Apache.
Voici l'exemple d'une configuration Reverse Proxy pour Nginx avec SSL :
server {
listen 443 ssl http2;
server_name status.vemotech.fr;
ssl_certificate /path/to/ssl/cert/crt;
ssl_certificate_key /path/to/ssl/key/key;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:3001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Mais également pour Apache :
<VirtualHost *:443>ServerName status.vemotech.fr
SSLEngine OnSSLCertificateFile /path/to/ssl/cert/crt
SSLCertificateKeyFile /path/to/ssl/key/key
Protocols h2 http/1.1
ProxyPass / http://localhost:3001/
RewriteEngine onRewriteCond %{HTTP:Upgrade} websocket [NC]RewriteCond %{HTTP:Connection} upgrade [NC]RewriteRule ^/?(.*) "ws://localhost:3001/$1" [P,L]
</VirtualHost>
Les configurations écoutent en interne l'adresse du serveur local (si vous installez Nginx ou Apache sur le même serveur) ou alors si vous souhaitez "proxifier" le serveur Web et les Websockets sur un sous-domaine externe.
Cette configuration peut être utilisé dans le cas où vous souhaitez dédier un sous-domaine (par exemple : status.vemotech.fr) et rediriger la page vers le Reverse Proxy, puis vers l'instance Uptime Kuma.
Voilà, j'espère que ce tutoriel vous aura plus et on se retrouve très bientôt pour un prochain tutoriel !