Tous les services opérationnels Devise EUR Aucun frais de mise en service Vous êtes à La Réunion ?
‹ Serveurs VPS et Docker

Metabase : tableaux de bord sur ses données

Metabase est un outil libre de tableaux de bord : il se connecte à vos bases de données, et vous construisez graphiques et indicateurs sans écrire de SQL, ou en SQL si vous le préférez. Il s'installe avec Docker, en un conteneur qui écoute sur le port 3000. Pour un usage durable, sa documentation demande une vraie base d'application, PostgreSQL par exemple, à la place de la base H2 intégrée, que l'on perd avec le conteneur.

Par Jonathan Dewaele · publié le

Ce guide suit la page Running Metabase on Docker, relue le 15 octobre 2026 pour la version 0.64. L'image utilisée est l'édition libre, metabase/metabase, dans la version v0.64.2.5, la plus récente publiée à cette date sur Docker Hub.

La base d'application

Metabase garde ses propres données, comptes, questions, tableaux de bord et réglages, dans une base qu'il appelle base d'application. Par défaut, c'est une base H2 écrite dans un fichier à l'intérieur du conteneur. La documentation prévient que supprimer le conteneur fait perdre ces données, et demande une base prête pour la production pour un usage réel.

Ne confondez pas cette base avec celles que vous analysez : Metabase lit vos données ailleurs, il n'écrit que dans sa base d'application.

Installer Metabase avec PostgreSQL

  1. Créez un dossier et placez-vous dedans : mkdir ~/metabase && cd ~/metabase
  2. Écrivez un fichier .env avec un mot de passe que vous générez vous-même, lettres et chiffres :
MB_DB_PASS=un-mot-de-passe-long-et-unique
  1. Écrivez compose.yaml, qui reprend l'exemple de la documentation avec une version fixée, un port publié sur la seule adresse locale et un volume nommé pour PostgreSQL :
services:
  metabase:
    image: metabase/metabase:v0.64.2.5
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      MB_DB_TYPE: postgres
      MB_DB_DBNAME: metabaseappdb
      MB_DB_PORT: 5432
      MB_DB_USER: metabase
      MB_DB_PASS: ${MB_DB_PASS}
      MB_DB_HOST: postgres
    volumes:
      - /dev/urandom:/dev/random:ro
    depends_on:
      - postgres
    healthcheck:
      test: curl --fail -I http://localhost:3000/api/health || exit 1
      interval: 15s
      timeout: 5s
      retries: 5

  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      POSTGRES_USER: metabase
      POSTGRES_DB: metabaseappdb
      POSTGRES_PASSWORD: ${MB_DB_PASS}
    volumes:
      - pg_data:/var/lib/postgresql/data

volumes:
  pg_data:
  1. Lancez : docker compose up -d
  2. Suivez le démarrage avec docker compose logs -f metabase, puis Ctrl+C : le premier lancement prend un moment, le temps de préparer la base d'application.

La documentation présente son propre fichier d'exemple comme non destiné à la production. Les écarts ci-dessus vont dans ce sens : version fixée au lieu de latest, mot de passe hors du fichier, port limité au serveur lui-même.

Ouvrir Metabase en HTTPS

Le port 3000 n'est publié que sur l'adresse locale : passez par un proxy inverse pour servir Metabase sur un nom de domaine. Avec Caddy lancé dans un conteneur sur un réseau partagé nommé proxy, Metabase doit rejoindre ce réseau sans quitter le réseau propre au projet, où il retrouve PostgreSQL. D'après la documentation des réseaux de Compose, relue le 15 octobre 2026, un service qui liste ses réseaux ne rejoint que ceux-là : il faut donc nommer default. Ajoutez au service metabase :

    networks:
      - default
      - proxy

Laissez postgres sans clé networks : il reste sur le seul réseau default, hors de portée du proxy. Déclarez enfin le réseau partagé à la fin du fichier, au même niveau que volumes :

networks:
  proxy:
    external: true

Le réseau proxy doit exister avant docker compose up, sinon Compose s'arrête sur une erreur de réseau introuvable. Relancez avec docker compose up -d, puis ajoutez au Caddyfile :

stats.votre-domaine.fr {
    reverse_proxy metabase:3000
}

Le sous-domaine doit pointer vers l'adresse IP du serveur. À la première ouverture, Metabase demande de créer le compte administrateur : faites-le sans attendre, la première personne qui ouvre la page le crée.

Relier vos données

Dans les réglages d'administration de Metabase, rubrique des bases de données, ajoutez une base : type, hôte, port, nom de la base, utilisateur et mot de passe.

  • Créez un utilisateur en lecture seule dans la base analysée, réservé à Metabase. Un tableau de bord n'a pas besoin d'écrire.
  • Une base qui tourne dans un conteneur du même serveur se joint par le nom de son service, si les deux conteneurs partagent un réseau Docker. La documentation rappelle que la connexion part de l'intérieur du conteneur de Metabase : localhost y désigne Metabase lui-même.
  • Une base distante doit accepter la connexion depuis l'adresse du serveur, de préférence chiffrée.

Sauvegarder et mettre à jour

Ce qui compte, c'est la base d'application, dans le volume pg_data. Sauvegardez-la par un export PostgreSQL : docker compose exec -T postgres pg_dump -U metabase metabaseappdb > metabase.sql (l'option -T évite le pseudo-terminal, qui abîmerait le fichier). Gardez une copie hors du serveur.

Pour mettre à jour :

  1. Sauvegardez la base d'application.
  2. Lisez les notes de version de Metabase.
  3. Changez l'étiquette de l'image dans compose.yaml, puis lancez docker compose pull et docker compose up -d.

D'après la page de mise à jour, Metabase fait lui-même les migrations de sa base d'application au démarrage d'une nouvelle version, et revenir en arrière après une version majeure demande de restaurer une sauvegarde : c'est pourquoi elle passe avant.

Sur un VPS Hubspace

Docker et Compose sont installés à la livraison, utilisables sans sudo par le compte admin. Le pare-feu réseau n'ouvre que les ports 22, 80 et 443 : le port 3000 reste fermé depuis Internet, même publié, et Metabase se sert par le proxy en HTTPS. Une base de données hébergée sur une offre Plesk n'est pas joignable depuis l'extérieur : Metabase ne peut pas s'y connecter directement. La sauvegarde quotidienne du serveur couvre son disque, pas le disque supplémentaire monté sur /mnt/data : voir Les sauvegardes d'un VPS. Les serveurs VPS décrivent la mémoire de chaque taille.

Questions fréquentes

Metabase est-il gratuit ?

L'édition libre, image metabase/metabase, l'est. Metabase vend aussi des éditions Pro et Enterprise, qui utilisent l'image metabase/metabase-enterprise et ajoutent des fonctions payantes.

Peut-on garder H2 pour un essai ?

Oui, le temps de découvrir l'outil. Gardez en tête que tout ce que vous construisez disparaît avec le conteneur. Avant d'y mettre du travail, passez à PostgreSQL.

Quelle mémoire prévoir ?

La page d'installation n'en donne pas. Metabase tourne sur Java, et sa consommation dépend du nombre d'utilisateurs et de la taille des requêtes : surveillez-la avec docker stats les premiers jours, et lisez la mémoire disponible du serveur comme l'explique Mémoire et swap sous Linux.

Articles liés