Architecture applicative¶
Vue dâensemble de la plateforme « Que Faire De Mes Objets et DĂ©chets » (QFDMOD), des composants en prĂ©sence et de leurs interactions.
Diagramme global¶
flowchart LR
user(("đ€ Utilisateur"))
integrateur(("𧩠Intégrateur iframe"))
admin(("đ ïž Admin / Ăditeur"))
subgraph github["GitHub Actions (CI/CD)"]
direction TB
ci["Lint + tests"]
cd["Deploy webapp + Airflow"]
sync["Sync DB prod â preprod"]
end
subgraph Scalingo["âïž Scalingo (region osc-fr1)"]
nginx_scalingo["nginx (cache + proxy /ph/)"]
webapp["đ Webapp Django\n(gunicorn, WhiteNoise)"]
django_worker["âïž Worker django-tasks\n(db_worker)"]
end
subgraph Scaleway["âïž Scaleway (region fr-par, projet longuevieauxobjets)"]
direction TB
subgraph CaaS["Container as a Service"]
airflow_webserver["đ„ïž Airflow Webserver\n(api-server :8080)"]
airflow_scheduler["â° Airflow Scheduler\n+ dbt"]
airflow_dag_processor["đ Airflow DAG Processor\n(+ nginx healthcheck)"]
end
subgraph Registry["đł Container Registry"]
ns_qfdmo["namespace ns-qfdmo (privé)"]
end
subgraph Databases["đïž Bases PostgreSQL 16 (RDB HA)"]
db_webapp[("DB Webapp\nlvao-{env}-webapp")]
db_warehouse[("DB Warehouse\nlvao-{env}-warehouse")]
db_airflow[("DB Airflow\nsur lvao-{env}-warehouse")]
db_warehouse <-->|"postgres_fdw"| db_webapp
end
subgraph S3["đŠ Object Storage (S3 fr-par)"]
s3_medias[("qfdmo-interface\nuploads Django Admin")]
s3_opendata[("lvao-opendata\nexports CSV")]
s3_logs[("lvao-{env}-airflow\nlogs Airflow")]
s3_source[("lvao-data-source\nfichiers Excel")]
s3_tfstate[("lvao-terraform-state")]
end
end
subgraph monitoring["đ Monitoring & analytics"]
sentry["Sentry (beta.gouv)"]
posthog["PostHog EU"]
matomo["Matomo (stats.beta.gouv.fr)"]
cockpit["Scaleway Cockpit (Grafana)"]
mattermost["Mattermost\nlvao-tour-de-controle"]
dashlord["Dashlord ADEME"]
end
subgraph sources_ext["đ Sources & APIs externes"]
eco_organismes["Ăco-organismes & ADEME"]
ban_geo["BAN / geo.api.gouv.fr"]
ae_insee["AE / INSEE / La Poste / Koumoul"]
notion["Notion API"]
tally["Tally.so"]
end
user -->|"HTTPS"| nginx_scalingo
integrateur -->|"iframe carte/assistant/infotri"| nginx_scalingo
admin -->|"/admin/, /cms/"| nginx_scalingo
nginx_scalingo --> webapp
nginx_scalingo -->|"/ph/*"| posthog
webapp --> db_webapp
webapp -->|"enqueue tĂąches"| django_worker
django_worker --> db_webapp
webapp --> s3_medias
webapp -->|"erreurs"| sentry
webapp -->|"HogQL stats"| posthog
webapp -->|"BAN, EPCI"| ban_geo
webapp -->|"contact form"| notion
webapp -->|"forms"| tally
airflow_scheduler --> db_airflow
airflow_scheduler -->|"ETL writes"| db_webapp
airflow_scheduler -->|"dbt run/test"| db_warehouse
airflow_scheduler -->|"export CSV"| s3_opendata
airflow_scheduler -->|"S3Hook"| s3_source
airflow_scheduler -->|"ingestion"| eco_organismes
airflow_scheduler -->|"clone refs"| ae_insee
airflow_webserver --> db_airflow
airflow_dag_processor --> db_airflow
airflow_webserver -.->|"état tùches"| airflow_scheduler
CaaS -.->|"remote logs"| s3_logs
cd -->|"git push SSH"| Scalingo
cd -->|"build & push"| ns_qfdmo
ns_qfdmo -->|"pull"| CaaS
sync -->|"restore"| db_webapp
user -.->|"analytics"| matomo
Databases -.->|"métriques"| cockpit
cd -.->|"notif deploy"| mattermost
Cartographie des composants¶
Pour le détail de chaque brique, suivre le lien correspondant.
Hébergement applicatif¶
Composant |
Hébergeur |
Détail / référence |
|---|---|---|
Webapp Django (Gunicorn + WhiteNoise + nginx local) |
Scalingo ( |
|
Worker django-tasks ( |
Scalingo ( |
|
Airflow : webserver, scheduler (avec dbt), DAG processor |
Scaleway Container as a Service ( |
|
Container Registry privé |
Scaleway |
Données¶
Composant |
Hébergeur |
Détail / référence |
|---|---|---|
DB Webapp |
Scaleway RDB PostgreSQL 16 HA |
|
DB Warehouse |
Scaleway RDB |
|
DB Airflow |
Scaleway RDB |
|
Liaison |
Schémas virtuels |
|
Object Storage S3 ( |
Scaleway S3 ( |
Plateforme data¶
Composant |
Référence |
|---|---|
Orchestration Airflow 3 ( |
|
Sources dâingestion (Ă©co-organismes, ADEME, API CMA/Pharmacies, S3) |
|
Transformation dbt (base/intermediate/marts/exposure) |
|
Clustering / déduplication |
Webapp¶
Composant |
Référence |
|---|---|
Django + apps métier ( |
|
TĂąches asynchrones django-tasks (actions admin lourdes, file en base) |
|
API Django-Ninja ( |
|
CMS Wagtail (surcouche |
|
Front Stimulus + Turbo + Parcel + TypeScript |
|
Design system DSFR + Tailwind (prefix |
|
Templates Django |
CI/CD & déploiement¶
Composant |
Référence |
|---|---|
Workflows GitHub Actions (review, cd, deploy, sync_databases, dependabot, publish-docs) |
|
Provisioning OpenTofu / Terragrunt |
Observabilité¶
Composant |
Référence |
|---|---|
Sentry, PostHog, Matomo, Scaleway Cockpit, Mattermost, healthcheck |
|
CodeQL, GitGuardian, Dependabot, Dashlord |
Sécurité¶
Sujet |
Référence |
|---|---|
Inventaire des actifs à protéger |
|
Prestataires & exigences de sécurité |
|
Authentification & autorisations |
|
Sécurité réseau |
|
Gestion des secrets |
|
Sauvegardes |
|
Plan de continuitĂ© dâactivitĂ© (PCA) |
|
Plan de reprise dâactivitĂ© (PRA) |
|
Revues réguliÚres |