Mieux contrôler les dérogations d'espèces protégées
Installer docker et docker-compose Peut-être via Docker Desktop, bonne chance !
Front-end en Svelte Back-end en Node.js Base de données Postgres
Le serveur récupère les données des dossiers via l'API Démarche Numérique. Il en fait une sauvegarde régulière, parce que Démarches Simplfiées ne sauvegarde les données que temporairement (1 an pour le moment, nous allons demander 5 ans)
En dev, on peut lancer npm run dev pour lancer le tout.
Le repo est synchronisé dans le conteneur du serveur via un volume.
Les données de la base de données sont sauvegarder dans un volume dans le repo (pour faire des test facilement)
http://localhost:2648/ http://localhost:2648/saisie-especes
### Créer une migration
exécuter knex migrate:make <nom de la migration>
modifier les fonction up() down() du fichier ./migrations/XXX-nom.js
documentation sur les migrations knex
Pour régénérer tous les types :
npm run build-types
exécuter npm run build-types:db
Les types sont crées dans le dossier ./scripts/types/database/public
npm run build-types:ds
Cette commande télécharge aussi les dernières versions des schémas avant de créer les types.
Pour éviter le téléchargement et créer les types à partir des fichiers schémas existants dans le repo, ajouter l'option --skipDownload, par exemple :
node outils/genere-types-schema-DS.js --skipDownload --idSchemaDS derogation-especes-protegees
Pour se connecter au serveur postgres depuis un container : ce container doit être exposé au réseau et utiliser postgres_db (le container_name de la base de donnée Postgres) comme hostname
URL pour pgadmin en dev :
http://localhost:5050/
La documentation (dossier docs/) est déployée en production sur GitHub Pages, qui utilise Jekyll pour transformer les fichiers .md en site web statique.
Pour visualiser la documentation en local (avant de pousser sur GitHub), vous pouvez utiliser Docker pour lancer un serveur Jekyll identique à celui de GitHub Pages.
Construire l'image Docker Jekyll
cd docs
docker build -t mon-jekyll .
cd ..Lancer le serveur Jekyll en local
Toujours depuis la racine du projet :
docker run --rm -p 4000:4000 -v "$PWD/docs":/srv/jekyll -e PAGES_REPO_NWO="dev" mon-jekyllLe site sera accessible à l'adresse : http://localhost:4000/
- Installer le navigateur de test et les dépendances système:
npx playwright install --with-deps firefox - Lancer Pitchou en mode dev:
npm run dev - Lancer les tests
npx playwright test tests/e2e
npm start:production
L'application est déployée sur Scalingo
Nous utilisons l'outil ligne de commande de Scalingo
On utilise une base de données Postgres 15.7 en prod
Scalingo fournit des backups https://doc.scalingo.com/databases/postgresql/backing-up
Actuellement, on a un backup quotidien des 7 derniers jours, un backup hebdomadaire des 4 dernières semaines et 10 backups manuels
Récupérer le dernier backup
cd backups
# Télécharger le dernier backup
scalingo --app especes-protegees --addon postgresql backups-download
# Dézipper le fichier .pgsql
tar -xf <nom_fichier>.tar.gz
# ignorer le message qui dit "tar: Suppression de « / » au début des noms des membres"
ll # afficher le nom du fichier .pgsql
cd -Restore le dernier backup
# Supprimer la base de données existante
docker exec postgres_db dropdb -f --username=dev especes_pro_3731
# Recréer la base de données
docker exec postgres_db createdb --username=dev especes_pro_3731
# Restore des données
docker exec postgres_db pg_restore --no-owner --no-privileges --dbname=especes_pro_3731 --username=dev --jobs=6 /var/lib/pitchou/backups/<nom du fichier>.pgsqlOn peut faire un restore en un clic d'un backup dans l'onglet BACKUPS du dashboard de l'addon PostgreSQL
Sinon, on peut suivre la procédure de la documentation Scalingo
knex migrate:latest (fait automatiquement à chaque déploiement, voir package.json scripts.prestart:prod-server)
Pour aller en arrière et en avant d'un cran dans la liste des migrations :
npm run migrate:down
npm run migrate:up
pour les autocomplete de saisie espèces notamment
node outils/liste-espèces.js
### Ajouter une espèce manquante
Dans le fichier data/sources_especes/espèces_manquantes.ods ajouter l'espèce avec son identifiant INPN (CD_NOM),nom latin (LB_NOM), nom vernaculaire (NOM_VERN) et sa justification légale (LABEL_STATUT).
Puis lancer node outils/liste-espèces.js pour régénérer une liste d'espèces complétée.
depuis le container du serveur
docker exec tooling node --env-file=.env outils/sync-démarche-numérique.js --IdSchemaDS derogation-especes-protegees (dernières heures par défaut)
docker exec tooling node --env-file=.env outils/sync-démarche-numérique.js --IdSchemaDS derogation-especes-protegees --lastModified 2025-06-01(synchroniser les dossiers modifiés depuis le 1 juin 2025)
docker exec tooling node --env-file=.env outils/sync-démarche-numérique.js --IdSchemaDS derogation-especes-protegees --lastModified 2024-01-01 (synchroniser tous les dossiers, date très distantes)
Un crontab tourne régulièrement pour récupérer les dossiers récemment modifiés dans DS et les synchroniser en base de données
Pour modifier le cron : https://crontab.guru/
Parfois, notamment après des changements dans le modèle de données, il est nécessaire de synchroniser tous les dossiers
Pour le faire, on peut utiliser un [one-off container}(https://doc.scalingo.com/platform/app/tasks) :
scalingo --app especes-protegees run --size 2XL 'node outils/sync-démarche-numérique.js --IdSchemaDS derogation-especes-protegees --lastModified 2024-01-01'Utile pour tester rapidement en local après un restore de backup en tant qu'une personne en particulier
docker exec tooling node outils/afficher-liens-de-connexion.js --emails adresse1@e.mail,adresse2@e.mail
Pour les lien de connexion en production :
docker exec tooling node outils/afficher-liens-de-connexion.js --emails adresse1@e.mail,adresse2@e.mail --prod
Pour donner l'origine de manière libre :
docker exec tooling node outils/afficher-liens-de-connexion.js --emails adresse1@e.mail,adresse2@e.mail --origin 'http://example.net'
Pitchou maintient une API pour que GeoMCE puisse récupérer les données que Pitchou doit déclarer (GeoMCE ne peut pas ouvrir d'API pour des raisons techniques de leur côté)
Pitchou expose une capability url de la forme
/declaration-geomce?secret=XXX
Un outil permet de récupérer la capability url pour la transmettre aux personnes de GeoMCE :
scalingo --app especes-protegees run "node outils/geomce.js --capability-url"
En cas de compromission ou régulièrement, la capability-url peut être reset:
scalingo --app especes-protegees run "node outils/geomce.js --reset-capability-url"
Les données de tracking nécessaires à AARRI sont stockées exclusivement dans la table évènement_métrique
Pour des raisons de minimisation des données, de protection des personnes et de conformité au RGPD, nous supprimons les données datant de plus d’un an.
Nous avons un outil qui permet de faire ça.
En production :
scalingo --app especes-protegees run "node outils/aarri/supprimer-evenements.js"
En dev :
docker exec tooling node outils/aarri/supprimer-evenements.js
Pour nettoyer tous les évènements concernant une personne spécifique :
docker exec tooling node outils/aarri/supprimer-evenements.js --email david@example.net
Pour nettoyer tous les évènements plus vieux que x semaines
docker exec tooling node outils/aarri/supprimer-evenements.js --conserver-dernières-semaines 20
Extraire les données AARRI d'une personne spécifique dans un fichier ODS
docker exec tooling node --env-file=.env outils/aarri/donnees-pour-personne.js --email 'mail@example.net'
# En dev
docker exec tooling node --env-file=.env outils/aarri/donnees-pour-personne.js --email 'mail@example.net' --origin 'http://localhost:2648'