https://suiteterritoriale.anct.gouv.fr/
Cette application implémente la page d'accueil de la Suite territoriale, ainsi que le chemin de raccordement pour les collectivités.
Son code est basé sur Next.js, et a été initié à partir du template Next.js de betagouv.
Après avoir cloné le projet :
make bootstrapIl suffit ensuite de se rendre sur http://localhost:8950/.
Pour voir toutes les commandes disponibles, il est possible de lancer :
make helpLes services suivants sont disponibles :
| Service | URL / Port | Description | Identifiants |
|---|---|---|---|
| Frontend | http://localhost:8950 | Site vitrine en développement | Aucun |
| PostgreSQL | 8951 | Serveur de base de données | usr / pwd |
| Redis | 8952 | Cache et courtier de messages | Aucun |
| Celery UI | http://localhost:8953 | Supervision de la file de tâches | Aucun |
| Drizzle Studio | http://localhost:8954 | Interface de gestion de la base de données | Aucun |
Un conteneur Python utilisant le code de data/ est lançable avec :
make data-shellUne fois dedans, il est possible de lancer les tâches de synchronisation des données :
# Tout synchroniser
python -m tasks.sync
# Lancer une tâche de vérification manuellement
python -m tasks.check_website [SIRET]
python -m tasks.check_dns [SIRET]
Cela peut permettre de débugguer des problèmes liés à certains SIRETs en particulier.
Il est recommandé d'ajouter des tests unitaires à chaque nouveau cas pour rendre les vérifications plus robustes.
Après avoir modifié une dépendance Python dans data/pyproject.toml, il est nécessaire de recréer le lockfile :
make data-freeze-depsIdem pour le frontend. Après avoir modifié une dépendance dans package.json, il est nécessaire de recréer le lockfile :
make front-freeze-depsUne autre méthode est de lancer make front-shell et de faire un npm install _package_ depuis le conteneur.
L'application utilise Drizzle ORM pour gérer la base de données PostgreSQL.
Pour réinitialiser la base de données avec des données de test :
# Réinitialiser la base de données avec des données de test
make db-reset-sample
# Explorer la base de données avec Drizzle Studio
make db-browse
# Restaurer un backup de prod
make db-restorePour restaurer le fichier db-backup.tar.gz présent à la racine du projet vers une base PostgreSQL distante (typiquement une base Scalingo dédiée), utiliser :
make db-restore-remote URL='postgresql://user:pass@host:port/dbname'La commande :
- s'exécute dans un conteneur
postgres:16.6(aucun binairepg_restorerequis sur la machine hôte) ; - applique les options recommandées par la documentation Scalingo :
--clean --if-exists --no-owner --no-privileges --no-comments; - demande une confirmation interactive avant de lancer la restauration, car elle écrase les objets existants sur la base cible.
Prérequis côté Scalingo (à effectuer en amont, non gérés par la commande) :
- Autoriser l'IP de la machine dans le pare-feu de la base :
scalingo --app <app> database-firewall-rules-add <addon-id> --cidr <your-ip>/32 --label "Workstation"
- Récupérer l'URL de connexion :
scalingo --app <app> env-get SCALINGO_POSTGRESQL_URL
- La restauration impose un arrêt complet de la base durant l'opération (downtime inévitable).
En cas d'ajout de colonnes gérées par Drizzle dans la base de données Postgres, voici la procédure à suivre :
- Modifier
src/lib/schema.ts - Executer
make db-pushpour modifier la table - Executer
make db-seedpour importer les nouvelles données - Si besoin, ajouter ces colonnes aux tables
*_historymanuellement
Ces étapes sont à répéter en staging puis en prod.
# lancer tous les tests
make test
# a refaire avant chaque commit
make lint
- Mapshaper installé sur votre système (https://github.com/mbloch/mapshaper)
Télécharger la dernière version des données ADMIN EXPRESS de l'IGN, version France Entière, depuis : https://geoservices.ign.fr/adminexpress
mapshaper -i REGION.shp snap -proj wgs84 -simplify 5% weighted keep-shapes -filter-fields INSEE_REG,NOM -rename-fields INSEE_GEO=INSEE_REG,NAME=NOM -o format=geojson precision=0.00001 regions.jsonmapshaper -i REGION.shp name=regions -i DEPARTEMENT.shp name=depts -clip target=depts source=regions -proj wgs84 -simplify 5% weighted keep-shapes -filter-fields INSEE_DEP,INSEE_REG,NOM -rename-fields INSEE_GEO=INSEE_DEP,NAME=NOM -split INSEE_REG -o format=geojson precision=0.00001mapshaper -i DEPARTEMENT.shp name=depts -i COMMUNE.shp name=communes -clip target=communes source=depts -proj wgs84 -simplify 5% weighted keep-shapes -filter-fields INSEE_COM,INSEE_DEP,NOM -rename-fields INSEE_GEO=INSEE_COM,NAME=NOM -split INSEE_DEP -o format=geojson precision=0.00001Cette procédure générera :
- Un fichier
france.jsoncontenant les données des régions - Des fichiers séparés pour chaque région, contenant l'ensemble des départements de cette région
- Des fichiers séparés pour département, contenant l'ensemble des communes de ce département
