AnchorLancer votre premier dashboard BI en local (Metabase)
Ce tutoriel vous guide pour lancer une stack BI en local (Metabase + Postgres)
et commencer à explorer des données immédiatement. On s’appuie sur le projet
open source
immoteur/webhooks-ingest-demo,
qui fournit une petite API d’ingestion de webhooks et une configuration Metabase
qui lit directement depuis la base de données.
Si vous souhaitez explorer le résultat avant de lancer quoi que ce soit en local, ouvrez la démo live.
Astuce : lancez
make demopour être en mode live (vraies données viasmee.io). Si vous n’avez pas encore de source,make demo-with-seedinjecte des événements d’exemple pour éviter des graphiques vides.
AnchorCe que vous allez construire
- Une instance Metabase locale accessible dans votre navigateur.
- Une base Postgres alimentée en événements webhook et en tables prêtes pour l’analyse.
- Un premier dashboard que vous pouvez explorer, dupliquer et partager en local.
AnchorPrérequis
- Docker + Docker Compose (v2)
- Node.js 20+ (nécessaire pour les scripts de démo)
- Git + Make
- Des ports libres sur votre machine (par défaut :
8080,3001,15432)
AnchorLiens utiles
- Repo de la démo : https://github.com/immoteur/webhooks-ingest-demo
- Documentation Metabase : https://www.metabase.com/docs/latest/
- smee.io : https://smee.io/
AnchorSchéma d'architecture
AnchorGuide pas à pas
Anchor1) Cloner le projet de démo
git clone https://github.com/immoteur/webhooks-ingest-demo.git;
cd webhooks-ingest-demo;Anchor2) Démarrer la stack (recommandé)
Lancez la stack Docker Compose en mode live (vraies données) avec les relais
smee.io :
make demo;Exemple de sortie :
[demo] Waiting for API at http://localhost:8080...
[+] Running 1/1
✔ Container webhooks_ingest_api Healthy 17.6s
[demo] Ready (live mode, no seed):
- API: http://localhost:8080
- Metabase: http://localhost:3001
- Metabase admin: [email protected] / DemoAdmin!2025ChangeMe
- Metabase public dashboard: http://localhost:3001/public/dashboard/16b57a07-9831-4ec9-b927-b6207d3eaa31
[demo] smee relays (send webhooks here):
- classified-notification: https://smee.io/classified-notification-3o41g78qykci2otd
- classifieds-export: https://smee.io/classifieds-export-holes6hi6y85rx31Ce que cela fait pour vous :
- crée
.envà partir de.env.examplesi nécessaire - démarre Postgres + l’API d’ingestion + Metabase
- bootstrap Metabase (admin + connexion à la base)
- génère et démarre 2 relais
smee.io(un par endpoint webhook) - affiche les URLs et identifiants (dont une URL de dashboard Metabase public)
Les identifiants admin Metabase viennent aussi de .env (valeurs par défaut de la démo) :
[email protected]METABASE_ADMIN_PASSWORD=DemoAdmin!2025ChangeMe
Anchor3) Ouvrir Metabase et vérifier le dashboard
- Ouvrez
http://localhost:3001 - Connectez-vous avec
METABASE_ADMIN_EMAIL/METABASE_ADMIN_PASSWORD - Ouvrez le dashboard de démo (ou l’URL de dashboard public affichée par
make demo)

.env.
Anchor4) Explorer le modèle de données (votre premier dataset BI)
Dans Metabase, vous devriez voir des tables comme :
webhook_events: journal d’ingestion des webhooks reçus (avec rétention)classifieds: lignes aplaties issues des payloads Immoteur (classified-notification/classifieds-export)classified_images: une ligne par image (liée àclassifieds)classified_price_history: une ligne par changement de prix (liée àclassifieds)
Essayez une première question via l’éditeur SQL de Metabase :
select count(*) as events from webhook_events;Anchor5) Recevoir des événements réels (ou envoyer des payloads d’exemple)
Puis dans Metabase :
- relancez la question ou rafraîchissez le dashboard
- vérifiez que le compteur
webhook_eventsa augmenté
Anchor6) Arrêter (ou réinitialiser) la démo
Pour arrêter les conteneurs (en gardant les données) :
make stack-down-smee;Pour tout remettre à zéro (supprime les volumes Docker) :
make stack-reset-smee;AnchorConclusion
Vous avez maintenant une stack BI locale fonctionnelle : une API d’ingestion qui écrit dans Postgres, et Metabase qui lit la base pour alimenter des dashboards. Prochaine étape : créez votre propre question (par exemple “événements par heure”), ajoutez-la à un dashboard, puis branchez les endpoints webhook sur une source réelle quand vous serez prêt.