====== Import des données via GN2PG ====== ===== Notes ===== * C'est le serveur //db-srv// qui se charge d'héberger le script Gn2Pg dans le dossier ''/home/geonat/data/gn2pg'' * Le serveur //bkp-srv// peut également héberger Gn2Pg pour l'espace de préprod. * Un script Bash '''/home/geonat/data/gn2pg/bin/gn2pg_update.sh'' encapsule l'appel de Gn2Pg * Le script Bash a une dépendance à //Pipenv// qui se charge de télécharger et installer le paquet Python //gn2pg-client// pour nous * Il est nécessaire d'installer //Pipenv// sur le système et de préparer le dossier ''/home/geonat/data/gn2pg/gn2pg'', pour cela voir le fichier /home/geonat/data/gn2pg/README.md * Un cron (''/etc/crond.d/gn2pg'') se charge de lancer Gn2Pg aux heures déterminées pour chaque config définie. * Il est possible de vérifier si Gn2Pg est en cours de fonctionnement en filtrant les processus sur le mot-clé "gn2pg_update" : ''ps -aux|grep gn2pg_update'' * Les fichiers de log de Gn2Pg sont consultables ici : ''/home/geonat/data/gn2pg/log/'' ===== Relancer un import GN2PG interrompu ===== * Connectez vous à la base de donnée * Afficher la table : ''gn2pg_lpo.data_json'' * Trier les données par ordre décroissant du champ ''update_ts''. La date la plus récente devrait s'afficher en premier * La date ''update_ts'' et la valeur du champ ''id_data'' du dernier enregistrement devrait correspondre au dernier log de Gn2Pg : ''2024-11-18 15:37:53,851 - DEBUG - store_postgresql:store_1_data - 43682513'' * Le champ "id_data" contient l'id_synthese à copier. * Modifier ensuite le fichier ''~/data/gn2pg/config/lpo_config.toml'' sur le serveur hébergeant //Gn2Pg//. * Ajouter/Modifier le paramètre ''filter_n_up_id_synthese'' et lui associer l'id synthese précédemment copié comme valeur. * **ATTENTION** : penser une fois le téléchargement via Gn2PG terminé à commenter cette valeur. ===== Principes pour les données transmises ===== * Nous gardons l’ID synthèse du GeoNature de chaque fournisseur de données (pôle en AURA) en guise de ''entity_source_pk_value''. * Nous gardons la contrainte d’unicité entre ''id_source'' et ''entité_source_pk_value''. * Avec la fourniture du « vrai » identifiant produit par le producteur au niveau du champs additionnel sous la clé « ''source_id_data'' ». * Pas d’utilisation de l’UUID à ce stade car effets de bords qui pourront s’avérer problématiques selon les usages. * Les champs ''identifier'' et ''email'' des données sur les utilisateurs devront avoir la valeur ''NULL''. C'est important pour éviter tout conflit avec les utilisateurs créant des comptes directement depuis les interfaces. Pour éviter aussi des bugs au niveau de l'inscription et du renouvellement des mots de passe, il y a un index unique sur ces 2 champs. Enfin, même si cela crée des doublons, nous distinguerons les entrées dans la table ''t_roles'' pour les utilisateurs s'inscrivant au SINP vis à vis des entrées générées par GN2PG ou les scripts d'intégrations des données au format CSV. La fonction se chargeant d'insérer les utilisateurs dans la table ''t_roles'' de GeoNature a été modifiée pour insérer ''NULL'' dans le champ ''email'' et l'email dans le champ ''additional_data'' sous l'attribut ''gn2pg_data.email''. * Le champ ''meta_validation_date'' de la synthèse du fournisseur utilisera l'alias ''validation_date'' soit : ''s.meta_validation_date AS validation_date'' * Le champ ''additional_data'' de la synthèse du fournisseur utilisera l'alias ''donnees_additionnelles'' soit : ''s.additional_data::text AS donnees_additionnelles'' * Les données à intégrer au champs additionnel en tant qu'attributs de l'objet principal sont : * « ''source_nom'' » * « ''source_id_data'' » ===== Mise à jour de l'installation de Gn2Pg ===== * Sur le dépôt Github //sinp--data// : * modifier la version du client //gn2pg-client// dans le fichier ''gn2pg/Pipfile''. * Installer la nouvelle version du client avec : ''pipenv install'' * Si besoin, mettre à jour le fichier Pipfile.lock avec la commande : ''pipenv lock'' * Créer un nouveau commit avec ces modifications * corriger les fichier ''gn2pg/data/sql/...to_synthese.sql'' en : * comparant les modifications effectuées sur [[https://github.com/lpoaura/GN2PG/blob/main/gn2pg/data/to_gnsynthese.sql|le fichier to_gnsynthese.sql du dépôt GN2PG]] depuis la précédente version utilisée. * Mettre à jour le fichier ''README.md'' si nécessaire * Corriger les fichiers ''config/..._config.toml'' si les paramètres de config ont évolués (voir [[https://github.com/lpoaura/GN2PG/blob/main/gn2pg/check_conf.py|check_conf.py]], [[https://github.com/lpoaura/GN2PG/blob/main/CHANGELOG.rst|Changelog]] et [[https://github.com/lpoaura/GN2PG/releases|realeases]]) * En local, les tester avec : ''%%pipenv run gn2pg_cli --custom-script ./data/sql/<...>_to_synthese.sql <...>_config.toml%%'' * Tester le script en local depuis le dossier ''gn2pg/bin/'' avec : ''./gn2pg_update.sh -v -c <...>_config.toml'' * Sur le serveur //db-srv// ou //bkp-srv// (pré-production) : * Se placer dans le dossier ~/data/ avec : '' cd ~/data/'' * Récupérer les changements : ''git pull ; git submodule update'' * Mettre à jour Pipenv : * afficher la version actuellement installée de Pipenv via Pipx : ''pipx list'' * mise à jour : ''pipx upgrade pipenv'' * vérifier la version de Pipenv : ''%%pipenv --version%%'' * Mettre à jour les dépendances des paquets Python : ''pipenv sync'' * Se placer dans le dossier de gn2pg : '' cd ~/data/gn2pg/'' * Vérifier l'installation de Gn2Pg : * s'assurer que ''~/.gn2pg/'' est bien un lien vers ''~/data/gn2pg/config/'' avec : ''ls -al ~/.gn2pg'' * si nécessaire, supprimer le dossier et recréer le lien : ''rm -fr ~/.gn2pg/; ln -s ~/data/gn2pg/config ~/.gn2pg'' * vérifier la version de Gn2pg : ''%%pipenv run gn2pg_cli --version%%'' * Vérifier/Ajuster les paramètres de config : ''vi <...>_config.toml'' * Si nécessaire, réinstaller les fichiers ''..._to_synthese.sql'' avec : ''%%pipenv run gn2pg_cli --custom-script ./data/sql/<...>_to_synthese.sql <...>_config.toml%%'' ===== Installer le Dashboard Gn2Pg ===== * Ressources : https://github.com/lpoaura/GN2PG/blob/main/docs/dashboard.rst * Ex. : https://gn2pg.biodiversite-aura.net/ * Se connecter sur le serveur //web-srv// en tant que //geonat// avec : ''ssh geonat@web--sinp'' * Créer les dossiers qui contiendront l'installation de Gn2Pg : ''mkdir -p ~/www/gn2pg/public/'' * Copier dedans les fichiers suivant : cp ~/www/geonature/frontend/src/favicon.ico ~/www/gn2pg/public/ cp ~/www/geonature/frontend/src/custom/favicon.ico ~/www/gn2pg/public/ cp ~/www/geonature/frontend/src/custom/images/logo-orb.png ~/www/gn2pg/public/ * Créer une page ''index.html'' qui contiendra les liens vers les Dashboards de Gn2Pg : ''vi ~/www/gn2pg/public/index.html'' * Pour chaque schéma abritant les tables de Gn2Pg (ou //source//), il faut cloner le dépôt Gn2Pg. Ex. pour le SINP AURA (nous avons 2 //sources// : flavia, lpo) : * Se placer dans le dossier ''gn2pg/'' avec : ''cd ~/www/gn2pg/'' * Cloner une première fois le dépôt en tant que //lpo// avec : ''%%git clone https://github.com/lpoaura/GN2PG.git lpo%%'' * Cloner une seconde fois le dépôt en tant que //flavia// avec : ''%%git clone https://github.com/lpoaura/GN2PG.git flavia%%'' * Pour chaque source, nous allons réaliser manuellement les étapes présentes dans ''install/02_install_app.sh'' (pour les adapter à notre infrastructure) : * se placer dans le dossier de la source : ''cd ~/www/gn2pg//'' * Copier le fichier settings.ini : ''cp install/settings.ini.sample install/settings.ini'' * Éditer et modifier le fichier settings.ini : ''vi install/settings.ini'' GN2PG_CONFIG_NAME="_config.toml" APPLICATION_ROOT="/" SERVER_NAME="gn2pg." GUNICORN_WORKERS=4 GUNICORN_TIMEOUT=30 GUNICORN_PORT=5050 DEBUG=true * Pour le numéro du port Gunicorn, partir de 50500 et ajouter 1 pour chaque source (50501, 50502...). * Copier le fichier de config gn2pg depuis le serveur //db-srv// : ''scp -P geonat@db--sinp:~/data/gn2pg/config/_config.toml install/_config.toml'' * Modifier le fichier de config : ''vi install/_config.toml'' * Vous pouvez garder seulement la section ''[db]'' et commenter les autres sections * Créer un fichier ''environ'' avec : ''vi environ'' GUNICORN_PROC_NAME=gn2pg- GUNICORN_PORT=5050 GUNICORN_LOG_FILE=/var/log/gn2pg/gn2pg-gunicorn-.log GUNICORN_LOG_LEVEL=debug * Installer Poetry : ''pipx install poetry'' * Installer les dépendances du Dashboard de Gn2pg avec : poetry config virtualenvs.create true --local poetry config virtualenvs.in-project true --local poetry install --extras=dashboard * Créer un fichier de service Sytemd : ''vi /etc/systemd/system/gb2pg-.service'' (voir ci-dessous) * Prendre en compte le service créé : ''systemctl daemon-reload'' * Lancer le service : ''systemctl start gn2pg-.service'' * Si nécessaire, créer un fichier Logrotate (uniquement pour la première source) : ''vi /etc/logrotate.d/gn2pg'' (voir ci-dessous) * Si nécessaire, créer un fichier de config Nginx : '' vi /etc/nginx/site-available/gn2pg.conf '' (voir ci-dessous) * Lors de la création du fichier : * Activer le nouveau fichier de config : ''nginx_ensite gn2pg.conf'' * Recharger Nginx : ''nginx-reload'' * Récupérer le certificat SSL : '' certbot -d gn2pg.'' * Pour les sources suivantes, il faut seulement compléter le fichier config en ajoutant une nouvelle "location" et son proxy. * Recharger Nginx : ''nginx-reload'' * Tester l'accès au site en https * Consulter les logs en cas de problème : ''ls /var/log/gn2pg/'' ==== Fichier Nginx par défaut ==== server { listen [::]:80 ipv6only=on; listen 80; server_name gn2pg.; root /home/geonat/www/gn2pg/public; satisfy any; allow ; deny all; auth_basic "Zone restreinte"; auth_basic_user_file /etc/nginx/.htpasswd; location / { proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; proxy_buffering off; proxy_read_timeout 30s; proxy_connect_timeout 10s; proxy_pass http://127.0.0.1:;# ATTENTION : ne rien mettre après le port pour que le chemin complet soit passé à Gunicorn } } ==== Fichier Logrotate de Gn2Pg ==== /var/log/gn2pg/*.log { su geonat geonat daily rotate 8 size 100M create compress postrotate systemctl reload gn2pg || true endscript } ==== Fichier Systemd de Gn2Pg ==== [Unit] Description=GN2PG- After=network.target #After=postgresql.service [Service] Type=simple User=geonat Group=geonat WorkingDirectory=/home/geonat/www/gn2pg// Environment=GUNICORN_PROC_NAME=gn2pg Environment=GUNICORN_NUM_WORKERS=4 Environment=GUNICORN_PORT=5001 Environment=GUNICORN_TIMEOUT=30 Environment=GUNICORN_LOG_FILE=/var/log/gn2pg/gn2pg-gunicorn.log Environment=GUNICORN_LOG_LEVEL=info EnvironmentFile=-/home/geonat/www/gn2pg//environ ExecStart=/home/geonat/www/gn2pg//.venv/bin/gunicorn gn2pg.app.app:create_app() \ --name "${GUNICORN_PROC_NAME}" --workers "${GUNICORN_NUM_WORKERS}" \ --bind "${GUNICORN_HOST}:${GUNICORN_PORT}" --timeout="${GUNICORN_TIMEOUT}" \ --log-file "${GUNICORN_LOG_FILE}" --log-level "${GUNICORN_LOG_LEVEL}" ExecReload=/bin/kill -s HUP $MAINPID TimeoutStartSec=10 TimeoutStopSec=5 PrivateTmp=true StandardOutput=append:/var/log/gn2pg/gn2pg-.log StandardError=inherit [Install] WantedBy=multi-user.target ==== Exemple de contenu pour index.html ==== Gn2Pg Dashboards Biodiv'AURA
ORB AURA

Gn2Pg dashboards

Accès aux interfaces des dashboards de Gn2Pg.