Installer Checkmate avec Docker
Checkmate

Installer Checkmate avec Docker

Table des matières

GitHub - bluewave-labs/Checkmate: Checkmate is an open-source, self-hosted tool designed to track and monitor server hardware, uptime, response times, and incidents in real-time with beautiful visualizations. Don’t be shy, join here: https://discord.com/invite/NAb6H3UTjK :)
Checkmate is an open-source, self-hosted tool designed to track and monitor server hardware, uptime, response times, and incidents in real-time with beautiful visualizations. Don't be shy, join…

Si je vous dit Uptime Kuma, je pense que vous voyez plus ou moins ce que c'est, une application de monitoring afin de surveiller la disponibilité de n'importe quel service réseau.

Et bien ce qui suit n'est ni plus ni moins qu'une alternative, avec quelques petits trucs intéressants en plus.

Aujourd'hui nous allons parler de Checkmate ! Un service qui va vous permettre de faire du monitoring sur vos pages web, services, containers et surveiller des paramètres serveurs tels que l'usage de la RAM, le CPU et l'espace disque. Soyez notifié des événements par différent types de notifications : Mail, Discord, Slack, Matrix, ...

Il y a différentes façons de l'installer, si possible préférez celle :

  • Avec un nom de domaine : sans forcément exposer le service. Ne fût-ce que pour le SSL. Et autre détail que nous verrons plus tard, pour l'upload d'un logo, avec le domaine vous n'avez pas de souci de CORS, pour ne citer que lui.
  • Avec l'AVX : L'AVX est, ou non, supporté par votre machine, si votre CPU le gère, il suffit bien souvent d'activer la virtualisation dans votre BIOS. Sur Proxmox, il faut passer le CPU en host par exemple. Mais la condition que votre CPU gère l'AVX reste obligatoire.
    Si vous n'avez pas l'AVX, vous pourrez installer Checkmate mais avec une limitation concernant Mango, en version 4.4. Dernière version à fonctionner sans l'AVX. Ce n'est pas forcément un gros problème. Mais...
  • Mais, si vous n'avez pas l'AVX, l'agent Capture, qui n'est en rien une obligation, vous ne pourrez pas collecter les informations matérielles de vos serveurs, pour cela vous avez besoin de Capture.
    Capture est un agent de surveillance serveur pour Checkmate. Capture reçoit les requêtes de Checkmate (serveur) et envoie les données nécessaires sur l'état de l'infrastructure. Cela va permettre sur votre instance principale Checkmate d'afficher ce qui suit :

Couplé à des alertes configurables :

Donc, si vous ne souhaitez pas faire du monitoring sur d'autres serveurs à partir de votre instance Checkmate, l'absence de l'AVX n'est pas un problème.

Maintenant que vous savez tout ça, faites le choix du compose qui correspond à votre configuration et vos envies.


⚡ Caractéristiques

  • Solution entièrement open source, déployable sur vos serveurs ou appareils personnels (ex. : Raspberry Pi 4 ou 5).
  • Surveillance de site web.
  • Surveillance de la vitesse de chargement des pages.
  • Surveillance de l'infrastructure (mémoire, utilisation du disque, performances du processeur, réseau, etc.) – nécessite l'agent Capture.
  • Surveillance Docker.
  • Surveillance du ping.
  • Surveillance SSL.
  • Surveillance des ports.
  • Surveillance de serveur de jeu (3.0).
  • Aperçu des incidents.
  • Pages d'état.
  • Notifications par e-mail, webhooks, Discord et Slack.
  • Maintenance planifiée.
  • Surveillance des requêtes JSON.
  • Prise en charge multilingue : anglais, allemand, japonais, portugais (Brésil), russe, turc, ukrainien, vietnamien, chinois (traditionnel, taïwanais).

💾 Installation

Prérequis

Avant de commencer, assurez-vous d’avoir :

  • Distribution Linux (Ubuntu, Debian, etc ...).
  • Docker installé.
  • Accès terminal.
  • Connexion internet.
  • Générez un clé avec cette commande et notez-la : openssl rand -hex 32
  • Créez un fichier .env au même endroit que votre compose et notez ceci dedans :
    Remplacez votre_clé_générée par celle que vous avez.
JWT_SECRET=votre_clé_générée

Étapes d'installation (sans domaine)

  1. Créez votre compose.yml dans le dossier ou vous comptez installer Checkmate :
nano compose.yml
  1. Et collez ça dedans :
services:
  checkmate:
    image: ghcr.io/bluewave-labs/checkmate-backend-mono:latest
    container_name: checkmate
    restart: unless-stopped
    ports:
      - "52345:52345"
    environment:
      - CLIENT_HOST=http://192.168.1.176:52345
      - UPTIME_APP_CLIENT_HOST=http://192.168.1.176:52345
      - UPTIME_APP_API_BASE_URL=http://192.168.1.176:52345/api/v1
      - UPTIME_ALLOWED_ORIGINS=http://192.168.1.176:52345
      - UPTIME_APP_PUBLIC_ASSETS_URL=http://192.168.1.176:52345/uploads
      - UPTIME_APP_UPLOAD_DIR=/app/uploads
      - JWT_SECRET=${JWT_SECRET}
      - DB_CONNECTION_STRING=mongodb://mongodb:27017/checkmate
    volumes:
      - ./uploads:/app/uploads
     #- /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - mongodb

  mongodb:
    image: mongo:6
    container_name: checkmate-mongo
    restart: unless-stopped
    command: ["mongod", "--quiet"]
    volumes:
      - ./mongo:/data/db
  • - CLIENT_HOST=http://192.168.1.176:52345 => Remplacez 192.168.1.176 par l'IP de votre serveur.
  • - UPTIME_APP_CLIENT_HOST=http://192.168.1.176:52345 => Remplacez 192.168.1.176 par l'IP de votre serveur.
  • - UPTIME_APP_API_BASE_URL=http://192.168.1.176:52345/api/v1 => Remplacez 192.168.1.176 par l'IP de votre serveur.
  • - UPTIME_ALLOWED_ORIGINS=http://192.168.1.176:52345 => Remplacez 192.168.1.176 par l'IP de votre serveur.
  • - UPTIME_APP_PUBLIC_ASSETS_URL=http://192.168.1.176:52345/uploads => Remplacez 192.168.1.176 par l'IP de votre serveur.
  1. On va déployer l'application :
docker compose up -d
  1. Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 52345 par défaut :
http://ip:52345/

Étapes d'installation (avec domaine)

  1. Créez votre compose.yml dans le dossier ou vous comptez installer Checkmate :
nano compose.yml
  1. Et collez ça dedans :
services:
  checkmate:
    image: ghcr.io/bluewave-labs/checkmate-backend-mono:latest
    container_name: checkmate
    restart: unless-stopped
    ports:
      - "52345:52345"
    environment:
      - CLIENT_HOST=https://check.mondomaine.com
      - UPTIME_APP_CLIENT_HOST=https://check.mondomaine.com
      - UPTIME_APP_API_BASE_URL=https://check.mondomaine.com/api/v1
      - UPTIME_ALLOWED_ORIGINS=https://check.mondomaine.com
      - UPTIME_APP_PUBLIC_ASSETS_URL=https://check.mondomaine.com/uploads
      - UPTIME_APP_UPLOAD_DIR=/app/uploads
      - JWT_SECRET=${JWT_SECRET}
      - DB_CONNECTION_STRING=mongodb://mongodb:27017/checkmate
    volumes:
      - ./uploads:/app/uploads
     #- /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - mongodb

  mongodb:
    image: mongo:6
    container_name: checkmate-mongo
    restart: unless-stopped
    command: ["mongod", "--quiet"]
    volumes:
      - ./mongo:/data/db
  • - CLIENT_HOST=https://check.mondomaine.com => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  • - UPTIME_APP_CLIENT_HOST=https://check.mondomaine.com => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  • - UPTIME_APP_API_BASE_URL=https://check.mondomaine.com/api/v1 => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  • - UPTIME_ALLOWED_ORIGINS=https://check.mondomaine.com => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  • - UPTIME_APP_PUBLIC_ASSETS_URL=https://check.mondomaine.com/uploads => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  1. On va déployer l'application :
docker compose up -d
  1. Rendez-vous sur votre domaine :
https://check.mondomaine.com

Étapes d'installation sans AVX

Si vous n'avez pas la possibilité d'activer l'AVX, il est possible d'installer Checkmate avec Mongo en version 4.4. En revanche, l'agent Capture, nécessite absolument l'AVX. Vous ne pourrez donc juste installer que Checkmate.

Sans domaine

services:
  server:
    image: ghcr.io/bluewave-labs/checkmate-backend-mono:latest
    container_name: checkmate
    restart: unless-stopped
    ports:
      - "52345:52345"
    environment:
      - CLIENT_HOST=http://192.168.1.176:52345
      - UPTIME_APP_CLIENT_HOST=http://192.168.1.176:52345
      - UPTIME_APP_API_BASE_URL=http://192.168.1.176:52345/api/v1
      - UPTIME_ALLOWED_ORIGINS=http://192.168.1.176:52345
      - UPTIME_APP_PUBLIC_ASSETS_URL=http://192.168.1.176:52345/uploads
      - UPTIME_APP_UPLOAD_DIR=/app/uploads
      - JWT_SECRET=${JWT_SECRET}
      - DB_CONNECTION_STRING=mongodb://mongodb:27017/uptime_db
    volumes:
      - ./uploads:/app/uploads
     #- /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - mongodb

  mongodb:
    image: mongo:4.4
    container_name: checkmate-mongo
    restart: unless-stopped
    command: ["mongod", "--quiet", "--bind_ip_all"]
    volumes:
      - ./mongo_data:/data/db
    healthcheck:
      test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 10s
      retries: 5
  • - CLIENT_HOST=http://192.168.1.176:52345 => Remplacez 192.168.1.176 par l'IP de votre serveur.
  • - UPTIME_APP_CLIENT_HOST=http://192.168.1.176:52345 => Remplacez 192.168.1.176 par l'IP de votre serveur.
  • - UPTIME_APP_API_BASE_URL=http://192.168.1.176:52345/api/v1 => Remplacez 192.168.1.176 par l'IP de votre serveur.
  • - UPTIME_ALLOWED_ORIGINS=http://192.168.1.176:52345 => Remplacez 192.168.1.176 par l'IP de votre serveur.
  • - UPTIME_APP_PUBLIC_ASSETS_URL=http://192.168.1.176:52345/uploads => Remplacez 192.168.1.176 par l'IP de votre serveur.
  1. On va déployer l'application :
docker compose up -d
  1. Rendez-vous sur l'ip:port, suivant l'IP de votre serveur local et du port choisi, 52345 par défaut :
http://ip:52345/

Avec domaine

services:
  server:
    image: ghcr.io/bluewave-labs/checkmate-backend-mono:latest
    container_name: checkmate
    restart: unless-stopped
    ports:
      - "52345:52345"
    environment:
      - CLIENT_HOST=https://check.mondomaine.com
      - UPTIME_APP_CLIENT_HOST=https://check.mondomaine.com
      - UPTIME_APP_API_BASE_URL=https://check.mondomaine.com/api/v1
      - UPTIME_ALLOWED_ORIGINS=https://check.mondomaine.com
      - UPTIME_APP_PUBLIC_ASSETS_URL=https://check.mondomaine.com/uploads
      - UPTIME_APP_UPLOAD_DIR=/app/uploads
      - JWT_SECRET=${JWT_SECRET}
      - DB_CONNECTION_STRING=mongodb://mongodb:27017/checkmate
    volumes:
      - ./uploads:/app/uploads
     #- /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - mongodb

  mongodb:
    image: mongo:4.4
    container_name: checkmate-mongo
    restart: unless-stopped
    command: ["mongod", "--quiet", "--bind_ip_all"]
    volumes:
      - ./mongo_data:/data/db
    healthcheck:
      test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"]
      interval: 10s
      timeout: 10s
      retries: 5
  • - CLIENT_HOST=https://check.mondomaine.com => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  • - UPTIME_APP_CLIENT_HOST=https://check.mondomaine.com => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  • - UPTIME_APP_API_BASE_URL=https://check.mondomaine.com/api/v1 => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  • - UPTIME_ALLOWED_ORIGINS=https://check.mondomaine.com => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  • - UPTIME_APP_PUBLIC_ASSETS_URL=https://check.mondomaine.com/uploads => Remplacez https://check.mondomaine.com par votre domaine/sous-domaine.
  1. On va déployer l'application :
docker compose up -d
  1. Rendez-vous sur votre domaine :
https://check.mondomaine.com

👤 Créer votre compte administrateur

Une fois n'est pas coutume, quand Checkmate est installé et lancé, il faudra vous créer un compte administrateur :

  • 1 => Choisissez votre langue.
  • 2 => Cliquez sur Inscrivez vous ici.

Ce qui vous amène à la page de création de compte :

  • 1 => Indiquez votre prénom.
  • 2 => Indiquez votre nom.
  • 3 => Indiquez une adresse mail.
  • 4 => Choisissez un mot de passe fort.
  • 5 => Confirmez le mot de passe.
  • 6 => Cliquez sur Continuer.

Vous voilà sur le tableau de bord :


🔔 Configurer le service de notification

La seconde chose à faire c'est de configurer le service de notification. C'est mieux car si vous ajoutez un service avant, vous devrez y retourner pour ajouter la notification.

📫 Configurer le serveur mail

Dans le cas où vous avez votre propre service mail, vous avez les informations nécessaires à entrer ci-dessous.

Mais vous pouvez également utiliser les serveurs mail de Google, Outlook, Infomaniak,.. Jetez un œil ici pour avoir les paramètres nécessaires :

Configurer le SMTP pour envoyer un mail avec une application Docker
Tutoriel pour configurer le SMTP afin d’envoyer un mail à partir de vos applications self-hosted.

Rendez-vous dans Paramètres, partie Email :

  • 1 => Indiquez le serveur SMTP.
  • 2 => Indiquez le port.
  • 3 => Indiquez l'adresse mail.
  • 4 => Indiquez le mot de passe ou le mot de passe application comme cela se fait de plus en plus.
  • 5 => Cochez si vous utilisez STARTTLS.
  • 6 => Par sécurité, cochez.

Terminez en cliquant sur :

Créer un canal de notification

Dans la partie Notifications :

  • 1 => Cliquez sur Créez votre premier canal de notifications !.

Remplissez ces 3 champs :

  • 1 => Le nom du canal.
  • 2 => Le type du canal, ici par mail.
  • 3 => L'adresse du destinataire.
  • 4 => Cliquez sur Envoyer ou Notification de test pour vérifier si c'est fonctionnel.
    Votre canal est créé :

Il n'y a plus rien à faire de ce côté. Il suffira d'intégrer ce canal dans les réglages des notifications des services.


🌐 Monitoring d'un site, d'une URL.

Du tableau de bord :

  • 1 => Cliquez sur Let's create your first uptime monitor!.

Complétez les informations nécessaires :

  • 1 => Choisissez HTTPS ou HTTP suivant l'URL que vous voulez surveiller.
  • 2 => Indiquez le domaine.
  • 3 => Nommez la sonde.

Pour cette partie :

  • 1 => Réglez les Incidents ou laissez par défaut si cela vous convient.
  • 2 => Cochez quelle notification utiliser. Il peut y avoir plusieurs types.
  • 3 => Cliquez sur Sauvegarder pour terminer.

Avec le temps :

Et si vous cliquez sous hôte, sur 2FAuth :


🐋 Monitoring d'un container

Monter docker.sock

⚠️
Attention, monter /var/run/docker.sock peut-être dangereux si Checkmate est compromis.

Pour que cela fonctionne, stoppez votre container, modifiez votre compose et décommenter la ligne :

# - /var/run/docker.sock:/var/run/docker.sock:ro

Ce qui donne :

volumes:
      - ./uploads:/app/uploads
      - /var/run/docker.sock:/var/run/docker.sock:ro

Sauvez le fichier et faites un petit docker compose up -d pour relancer.

Identifiez l'ID complet

Pour ajouter un container il faut son ID complet. Dans mon exemple je vais prendre Gotify.

Je fais un docker ps et je note, soit l'ID ou le nom du container que je veux surveiller. Ensuite je tape cette commande qui va m'afficher les 64 caractères de l'ID du container :

docker inspect --format='{{.Id}}' 2853350f8c54

Remplacez 2853350f8c54 par l'ID du container que retourne docker ps.

Dans mon cas : 853350f8c54ebcb103191dcea7246d49b4a590950669f6b487c5667c982bca8.

💡
Répétez l'opération pour chaque container que vous voulez surveiller.

Ajouter le container dans Chekmate

Dans la partie Temps en ligne :

  • 1 => Cliquez sur Créer un nouveau.

Remplissez les informations suivantes :

  • 1 => Cochez Monitoring d'un container Docker.
  • 2 => ID complet du conteneur.
  • 3 => Nommez le container.

Terminez en cliquant sur :

Voici le résultat après un certain temps :

Si vous cliquez sur Gotify :


🕵️ Installer l'agent Capture

Non seulement vous pouvez surveiller les paramètres suivants de vos serveurs ou VM mais aussi être averti quand un seuil est dépassé :

Pour cela, installez cet agent sur chaque serveur (attention, nécessite l'AVX) :

services:
  capture:
    image: ghcr.io/bluewave-labs/capture:latest
    container_name: checkmate-capture
    restart: unless-stopped
    ports:
      - "59232:59232"
    volumes:
      - /etc/os-release:/etc/os-release:ro
    environment:
      - API_SECRET=test
      - GIN_MODE=release
  • 1 => Choisissez un mot de passe.

Ajouter une infrastructure

Maintenant il reste à ajouter l'agent à votre instance Checkmate.

Dans la partie Infrastructure :

  • 1 => Cliquez sur Créer votre premier moniteur d'infrastructure !.

Complétez :

  • 1 => Ajoutez le serveur à surveiller avec Capture soit : check.mondomaine.com/api/v1/metrics en prenant de soin de remplacer check.mondomaine.com par votre domaine/sous-domaine, ou, sans domaine => 192.168.1.115:59232/api/v1/metrics remplacez 192.168.1.115 par l'IP de votre serveur.
  • 2 => Nommez le serveur.
  • 3 => Indiquez le mot de passe qui est dans le compose.
  • 4 => Choisissez le type de notification.

Pour cette partie :

  • 1 => Cochez ce que vous souhaitez comme alerte et le seuil.
  • 2 => Terminez en cliquant sur Créer un moniteur d'infrastructure.

Il faudra patienter quelques petites secondes pour passer de pending...

... à up :

Si vous cliquez sur le serveur :


🚦 Page de statut

Pour créer une page de statut, partie Pages de statut :

  • 1 => Cliquez sur Créer votre première page de status !.

Complétez ce qui suit :

  • 1 => Cochez pour publier la page.
  • 2 => Nommez votre page.
  • 3 => Indiquez une adresse de votre page de statut.
  • 4 => Choisissez votre fuseau horaire.

Pour la suite :

  • 1 => Choisissez éventuellement un logo.
  • 2 => Cliquez sur Sauvegarder pour passer à l'onglet Contenus :
  • 1 => Choisissez les services à afficher sur la page de statut.
  • 2 => Cochez comme vous souhaitez.
  • 3 => Cliquez sur Sauvegarder pour terminer.

En ayant ajouté quelques services en plus :

Vous constaterez qu'il y a un Lien public, si on clique dessus :


🛡️ Socket Proxy

Voici le compose à installer sur pour passer par le socket proxy, si vous exposez Checkmate par exemple :

services:
  checkmate:
    image: ghcr.io/bluewave-labs/checkmate-backend-mono:latest
    container_name: checkmate
    restart: unless-stopped
    ports:
      - "52345:52345"
    environment:
      - CLIENT_HOST=https://check.mondomaine.com
      - UPTIME_APP_CLIENT_HOST=https://check.mondomaine.com
      - UPTIME_APP_API_BASE_URL=https://check.mondomaine.com/api/v1
      - UPTIME_ALLOWED_ORIGINS=https://check.mondomaine.com
      - UPTIME_APP_PUBLIC_ASSETS_URL=https://check.mondomaine.com/uploads
      - UPTIME_APP_UPLOAD_DIR=/app/uploads
      - JWT_SECRET=${JWT_SECRET}
      - DB_CONNECTION_STRING=mongodb://mongodb:27017/checkmate
    volumes:
      - ./uploads:/app/uploads
     #- /var/run/docker.sock:/var/run/docker.sock:ro
    depends_on:
      - mongodb

  mongodb:
    image: mongo:6
    container_name: checkmate-mongo
    restart: unless-stopped
    command: ["mongod", "--quiet"]
    volumes:
      - ./mongo:/data/db

  docker-socket-proxy:
    image: tecnativa/docker-socket-proxy:latest
    container_name: docker-socket-proxy
    restart: unless-stopped
    networks:
      - docker-proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      CONTAINERS: 1
      IMAGES: 1
      NETWORKS: 1
      SERVICES: 1
      TASKS: 1
      VOLUMES: 1
      POST: 0
    ports:
      - "127.0.0.1:2375:2375"

networks:
  docker-proxy:
    driver: bridge

zarev

->.<-
🐧 Passionné de self-hosting, je partage ce que je connais et me nourris des connaissances des bonnes âmes qui partagent avec moi. Soutenons l'utilisation des apps open source et leurs développeurs.

Vous pourriez aussi aimer