Menu Fermer

Mettre en place Grafana sous Docker

Cet article n’a pas pour but d’être un guide explicatif mais plus une compilation des configurations requises pour la mise en place d’un conteneur Grafana sous Docker avec les besoins suivants :

  • Vlan Dédié
  • Chiffrement https
  • Base donnée externe

L’image choisie

J’ai choisi dans mon cas de partir sur l’image grafana-enterprise, celle ci est identique à la version OSS mais donne la possibilité d’activer une licence afin de passer à la version entrerprise sans réinstallation nécéssaire.

La configuration du vlan sous docker

Se reporter à mon précédent article pouvant être trouvé ici : Configurer les vlans sous Docker

Les certificats

Dans mon cas présent j’utilise Let’s Encrypt avec certbot afin de générer et renouveler mes certificats, cependant ceux ci ne peuvent pas être directement intégré dans un docker, j’ai donc un fichier dans post renewal-hook afin de copier ceux-ci, affecter les bons droits et redémarrer le conteneur pour application.
Ci dessous le script présent dans /etc/letsencrypt/renewal-hooks/post/

#/sbin/sh
# Copy Cert to Docker data
cp /etc/letsencrypt/live/grafana.raczaron.fr/* /opt/grafana/ssl/
chown grafana:grafana /srv/grafana/ssl/*
# Restart container
/srv/grafana/run.sh

L’installation de certbot a été réalisé en suivant cette procédure : https://certbot.eff.org/instructions?ws=other&os=pip

Le fichier run.sh

Ici rien de compliquer, le script run.sh réalise un pull pour éventuellement mettre à jour le conteneur et ensuite réalise le compose en spécifiant le chemin du fichier compose.yaml

#!/bin/sh

docker compose pull && docker compose -f compose.yaml up -d --force-recreate

Le fichier compose.yaml

Ici le fichier compose que j’ai construit pour mon cas de figure en me reportant aux procédures de chez Grafana. Notez la présence du user: « 472 » qui dans mon cas a été nécessaire pour l’accès aux certificats une fois un chown 472 réalisé sur les fichiers. L’uid 472 étant celui utilisé par défaut dans le conteneur Grafana.

services:
  grafana:
    image: grafana/grafana-enterprise
    container_name: grafana
    restart: unless-stopped
    user: "472"
    environment:
      - GF_SERVER_PROTOCOL=https
      - GF_SERVER_DOMAIN=grafana.raczaron.fr
      - GF_SERVER_CERT_FILE=/etc/grafana/ssl/mycertificate.pem
      - GF_SERVER_CERT_KEY=/etc/grafana/ssl/myprivatekey.pem
      - GF_DATABASE_TYPE=mysql
      - GF_DATABASE_HOST=192.168.11.10:3306
      - GF_DATABASE_NAME=grafana
      - GF_DATABASE_USER=dbusername
      - GF_DATABASE_PASSWORD=mysupersecurepassword
      # Uncomment to enable debug
      # - GF_LOG_LEVEL=debug
    volumes:
      - 'grafana-storage:/var/lib/grafana'
      - '/opt/grafana/ssl:/etc/grafana/ssl/'
    networks:
      vlan10:
        ipv4_address: 192.168.10.10
volumes:
  grafana-storage: {}
networks:
  vlan10:
    external: true

Une explication rapide de certains des paramètres.

  • GF_SERVER_PROTOCOL=https : on spécifie que l’on souhaite utiliser https
  • GF_SERVER_DOMAIN=dahsboard.raczaron.fr : le nom de domaine avec lequel on accédera à Grafana
  • GF_SERVER_CERT_FILE & GF_SERVER_CERT_KEY : Les chemin du certificat et de la clé privée.
  • GF_DATABASE_TYPE=mysql : ici j’utilise une base de données mysql, il est possible d’utiliser aussi postgrelsql ou sqlite3
  • GF_DATABASE_NAME & GF_DATABASE_USER & GF_DATABASE_PASSWORD : les informations d’identifications pour la base de données
  • volumes : ici deux volumes définis, le premier est un volume docker permettant de rendre persistant le dossier /var/lib/grafana. Il est visible via la commande « docker volume ls ». Le second est un mappage du dossier ou j’ai déposé mes certificats.

Une fois cela fait un démarrage du conteneur via run.sh permettra de valider le bon fonctionnement. Si le conteneur ne monte pas il faudra alors étudier les logs via la commande « docker logs grafana ».

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.