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 ».