Aller au contenu

Installation

Prérequis

  • Docker et Docker Compose v2+
  • Un nom de domaine pointant vers le serveur (enregistrement A)
  • Les ports 80 et 443 joignables depuis Internet

Mise en route

git clone git@github.com:metrika-rc/demo.git metrika-demo
cd metrika-demo

# 1. Configuration
cp .env.example .env
$EDITOR .env          # renseigner les domaines, générer les secrets

# 2. Socle
docker compose up -d postgres
docker compose logs postgres | grep "bases .* créées"

# 3. Airflow (construction de l'image, ~3 min)
docker compose build
docker compose up -d airflow-apiserver airflow-scheduler \
                    airflow-dag-processor airflow-triggerer

# 4. Metabase, proxy et site
docker compose up -d metabase traefik web

Génération des secrets

Ne jamais réutiliser les valeurs d'exemple :

python3 - <<'PY'
import base64, os, secrets
alpha = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789"
pw = lambda n=24: "".join(secrets.choice(alpha) for _ in range(n))
print("POSTGRES_PASSWORD=", pw(), sep="")
print("METABASE_DB_PASSWORD=", pw(), sep="")
print("AIRFLOW_DB_PASSWORD=", pw(), sep="")
print("WAREHOUSE_DB_PASSWORD=", pw(), sep="")
print("MB_ENCRYPTION_SECRET_KEY=", pw(48), sep="")
print("MB_EMBEDDING_SECRET_KEY=", secrets.token_hex(32), sep="")
print("AIRFLOW_FERNET_KEY=", base64.urlsafe_b64encode(os.urandom(32)).decode(), sep="")
print("AIRFLOW_JWT_SECRET=", secrets.token_hex(32), sep="")
print("AIRFLOW_ADMIN_PASSWORD=", pw(16), sep="")
PY

Mots de passe alphanumériques uniquement

Les caractères spéciaux compliquent l'échappement dans les chaînes de connexion et les fichiers d'environnement. Une valeur contenant des espaces doit être entre guillemets, sinon source .env échoue.

Amorçage des données

# Jeu synthétique (bronze)
docker compose exec airflow-scheduler airflow dags test 10_seed_bronze_demo

# Historique open data — 45 jours
docker compose exec airflow-scheduler airflow backfill create \
  --dag-id 20_ingest_eco2mix \
  --from-date 2026-07-05 --to-date 2026-08-18 \
  --max-active-runs 3 --reprocess-behavior completed

La transformation dbt se déclenche automatiquement dès qu'un asset bronze est mis à jour. Pour la forcer :

docker compose exec -e WAREHOUSE_PASSWORD="$WAREHOUSE_DB_PASSWORD" \
  airflow-scheduler bash -c 'cd /opt/airflow/dbt && /opt/dbt/bin/dbt build --target prod'

Configuration de Metabase

  1. Ouvrir http://localhost:3000 par tunnel, créer le compte administrateur
  2. Ajouter la source de données :

    Champ Valeur
    Host postgrespas localhost
    Port 5432
    Database warehouse
    Username metabase_reader
    Schemas gold
  3. Créer une clé d'API : Administration → Authentification → Clés d'API

  4. Provisionner les tableaux de bord :
export METABASE_API_KEY=mb_xxx
python3 scripts/metabase_provision.py

postgres et non localhost

Depuis le conteneur Metabase, localhost désigne Metabase lui-même. C'est l'erreur la plus fréquente à cette étape.

Messagerie (optionnel)

# Renseigner SMTP_USER et SMTP_PASSWORD dans .env, puis :
set -a; source .env; set +a
python3 scripts/metabase_smtp.py

Metabase valide la connexion SMTP au moment de l'enregistrement : si la commande réussit, l'envoi fonctionne réellement.