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.