Aller au contenu

Vue d'ensemble

Le serveur

Hébergeur OVH, VPS
Système Debian 12 (bookworm)
Ressources 6 vCPU · 11 Gio de mémoire · 92 Gio libres
IPv4 57.129.141.234
IPv6 2001:41d0:801:2000::52b8
Conteneurisation Docker 29.4 · Compose v5.1

Les services

Tous les services tournent dans Docker, orchestrés par un unique docker-compose.yml. Un seul réseau, metrika, les relie.

flowchart TB
    subgraph internet[Internet]
        V[Visiteur]
    end
    subgraph vps["VPS — réseau Docker metrika"]
        T[Traefik<br/>80 / 443]
        W[nginx<br/>site statique]
        M[Metabase]
        F[FastAPI<br/>analyse sur mesure]
        A1[Airflow api-server]
        A2[Airflow scheduler]
        A3[Airflow dag-processor]
        A4[Airflow triggerer]
        P[(PostgreSQL 18)]
    end
    V -->|HTTPS| T
    T -->|/| W
    T -->|/public/ · /app/| M
    T -->|/analyse| F
    F --> P
    M --> P
    A1 & A2 & A3 & A4 --> P

Traefik est le seul service qui publie des ports vers l'extérieur (80 et 443). Metabase, Airflow et PostgreSQL publient sur 127.0.0.1 uniquement : inaccessibles depuis Internet, joignables par tunnel SSH.

Rôle de chaque brique

Service Version Rôle
Traefik 3.7.10 Routage HTTP, terminaison TLS, certificats Let's Encrypt automatiques
nginx 1.29-alpine Sert la vitrine statique et la documentation. Aucune logique applicative
PostgreSQL 18.6 Entrepôt (warehouse) et métadonnées (airflow, metabase)
Airflow 3.3.1 Orchestration : ingestion, rattrapage, déclenchement des transformations
dbt 1.12.2 Transformations SQL versionnées et tests de qualité
Metabase 0.63.13 Exploration et tableaux de bord
FastAPI 0.141 Application d'analyse sur mesure (/analyse)

Pourquoi cette forme

Un seul fichier Compose. Tout se redéploie d'une commande, sur n'importe quelle machine disposant de Docker. C'est la promesse à tenir devant un client : « la même architecture, chez vous, demain ».

Airflow en LocalExecutor. La configuration de référence du projet Airflow embarque Redis et des workers Celery, indispensables pour répartir la charge sur plusieurs machines. Sur une machine unique, c'est deux services de plus à maintenir pour aucun bénéfice. Le parallélisme reste assuré.

dbt dans un environnement virtuel séparé au sein de l'image Airflow. dbt et Airflow se disputent régulièrement les mêmes dépendances (Jinja2, protobuf) ; les isoler supprime une classe entière de pannes à la mise à jour. Les DAGs appellent /opt/dbt/bin/dbt par son chemin absolu.

Piège rencontré

Ajouter /opt/dbt/bin au PATH de l'image Airflow paraît pratique — et casse tout : l'interpréteur Python du virtualenv dbt masque celui d'Airflow, et plus aucune tâche Python ne s'exécute. Voir Dépannage.

Ce qui n'a pas été retenu

DuckDB en mode serveur (protocole Quack). Évalué et validé techniquement — serveur et client fonctionnent, en lecture comme en écriture, sur le port 9494 en HTTP. Écarté parce que le protocole est encore en beta : un démonstrateur commercial ne doit pas reposer sur une brique susceptible de changer d'interface. La recette de conteneur reste documentée si l'on veut la rebrancher.

Une application FastAPI pour la vitrine. Écartée : sans embarquement signé ni API publique, un serveur applicatif n'apporte rien à une page qui affiche des iframes. La vitrine reste servie par nginx.

FastAPI a en revanche été réintroduit pour un tout autre usage — une application d'analyse sur mesure, qui démontre ce qu'un développement spécifique apporte face à un outil générique. Voir Journal des décisions.