Installation de l’application en local¶

Environnement de développement¶

Prérequis¶

  • docker & docker-compose

  • python 3.12

  • node 20

  • mkcert (optionnel : utilisĂ© pour la gĂ©nĂ©ration de certificats pour le dĂ©veloppement frontend de la carte et assistant)

  • gdal (librairie nĂ©cessaire Ă  l’utilisation de GeoDjango)

  • Installer et configurer le client Scaleway en suivant les instructions de Scaleway

  • Installer et configurer le client Scalingo en suivant les instructions de Scalingo

  • OpenTofu et Terragrunt

Conseil: utiliser asdf ou mise pour la gestion des environnements virtuel node et python

⚠ L’accĂšs Ă  la plateforme Scaleway est nĂ©cessaire pour exĂ©cuter la copie de la base de donnĂ©es de production en local

SpĂ©cificitĂ© d’installation pour les processeurs Mx de Mac¶

https://gist.github.com/codingjoe/a31405952ec936beba99b059e665491e

Technologies¶

Cette liste est non-exhaustive.

Webapp:

  • Python

  • Django

  • Node

  • Typescript

  • Parcel

  • DSFR

  • Honcho

  • Whitnoise

  • Tailwind

  • nginx

Plateforme data :

  • Airflow

  • DBT

CI/CD:

  • Github

  • Dependabot

Administration:

  • Scalingo

  • Scaleway

  • Sentry

Dev tools:

  • Pytest

  • Playwright

  • Django-debug-toolbar

Provisionnement:

  • OpenTofu

  • Terragrunt

Profiles Docker Compose¶

Le docker-compose.yml à la racine expose deux profiles indépendants :

Profile

Services

lvao

lvao-webapp-db (PostGIS, port 6543), lvao-warehouse-db (8765), nginx local SSL (nginx-local-only/ + mkcert, domaine quefairedemesdechets.ademe.local).

airflow

airflow-db (7654), airflow-webserver (8080), airflow-scheduler (12 G RAM), airflow-dag-processor (8082).

Pas de Redis ni de mailcatcher en local : le cache Django est stocké en base (django.core.cache.backends.db.DatabaseCache, table qf_django_cache).

Installation rapide¶

la commande init-dev installe tout l’environnement Webapp et plateforme data

make init-dev

Lancement de la webapp et de la plateforme data¶

Modifier le fichier /etc/hosts, ajouter les lignes

127.0.0.1       lvao.ademe.local
127.0.0.1       quefairedemesdechets.ademe.local
127.0.0.1       quefairedemesobjets.ademe.local

Copier la base de données de prod

make db-restore-local-from-prod

Lancer l’application

make run-all

la webapp est accessible à l’adresse quefairedemesobjets.ademe.local la plateforme data est accessible à l’adresse http://localhost:8080

Installation de la Webapp uniquement¶

Configuration¶

Modifier le fichier /etc/hosts, ajouter les lignes

127.0.0.1       lvao.ademe.local
127.0.0.1       quefairedemesdechets.ademe.local
127.0.0.1       quefairedemesobjets.ademe.local

Installation & Exécution¶

Configuration des variables d’environnement: ajouter (ou mettre à jour si existant)

cp .env.template .env

Modifier les variables dans le fichier .env si nécessaire

Générer les certificats utilisé par nginx

make init-certs

Les bases de données Postgres + Postgis sont executées et mises à disposition par le gestionnaire de conteneur Docker

Pour lancer uniquement les services utiliser par la webapp

docker compose  --profile lvao up -d

Installation des dépendances Python et JavaScript (depuis la racine du repo) :

uv sync --all-groups
npm ci

Migrations Django (toujours depuis webapp/) :

uv run python manage.py migrate

Créer la table de cache (depuis webapp/) :

make createcachetable

Pour peupler la base de données webapp le plus simple est de copier la base de données de production, cf. Copier la base de données de prod en local

Sinon, utiliser la commande de peuplement ci-dessous (depuis webapp/) :

make seed-database

Créer un superutilisatteur¶

Si vous n’en avez pas dĂ©jĂ  un (depuis webapp/) :

uv run python manage.py createsuperuser

Lancement¶

Depuis webapp/ :

make runserver

runserver dĂ©marre le serveur Django et le worker db_worker en arriĂšre-plan. Ce worker est nĂ©cessaire pour traiter les actions admin lourdes (≄ 1 000 SuggestionGroupe sĂ©lectionnĂ©s) qui passent par django-tasks. Voir reference/webapp/django.md.

Une fois le serveur dĂ©marrĂ©, l’application est accessible Ă  l’adresse quefairedemesobjets.ademe.local, Ă©coutant sur le port 8000 (derriĂšre nginx local si le profile lvao Docker est actif).

Tester l’application¶

Tests Python (pytest), depuis le dossier webapp/ :

make unit-test
make integration-test

Tests JS unitaires

npm run test

End-to-end avec Playwright. Ces tests nĂ©cessitent une base de donnĂ©es incluant un Ă©chantillon d’acteurs issus de la base de donnĂ©es principale. Celle-ci peut ĂȘtre gĂ©nĂ©rĂ©e en local facilement, via une commande Ă  lancer depuis la racine du dĂ©pĂŽt. (make e2e-prepare construit l’échantillon via le DAG compute_sample_acteur, voir create_webapp_sample_db.md) :

make -C webapp init-playwright
make e2e            # préparation + tests

Pour relancer seulement les tests (depuis webapp/) :

make e2e-test
make e2e-test-ui

Test d’accessibilitĂ© (depuis webapp/) :

make a11y

Installer les hooks de pre-commit¶

Pour installer les git hook de pre-commit, installer le package precommit et installer les hooks en executant pre-commit

pre-commit install

Installation de la plateforme DATA¶

Copier les variables d’environnement data-platform/dags/.env.template vers data-platform/dags/.env :

cp data-platform/dags/.env.template data-platform/dags/.env

Lancer les containers docker avec docker compose:

docker compose --profile airflow up

docker compose lancera :

  • la base de donnĂ©es postgres nĂ©cessaire Ă  la webapp de la carte

  • la base de donnĂ©es postgres nĂ©cessaire Ă  Airflow

  • un webserver airflow

  • un scheduler airflow en mode LocalExecutor

accĂ©der Ă  l’interface d’Airflow en local http://localhost:8080 ; identifiant/mot de passe : airflow / airflow

Tester la plateforme Data¶

Tests Python des DAGs (pytest), depuis la racine du repo :

uv sync --group dev --group notebook
cd data-platform && make dags-test