database:sinp-aura:gn2pg

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
database:sinp-aura:gn2pg [2024/02/16 09:50] – [Mise à jour de l'installation de Gn2Pg] jpmilcentdatabase:sinp-aura:gn2pg [2024/11/20 08:46] (Version actuelle) – [Relancer un import GN2PG interrompu] jpmilcent
Ligne 15: Ligne 15:
   * Afficher la table : ''gn2pg_lpo.data_json''   * 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   * Trier les données par ordre décroissant du champ ''update_ts''. La date la plus récente devrait s'afficher en premier
-  * Le champ "id_date" contient l'id_synthese à copier.+    * 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//.   * 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.     * Ajouter/Modifier le paramètre ''filter_n_up_id_synthese'' et lui associer l'id synthese précédemment copié comme valeur.
Ligne 50: Ligne 51:
       * afficher la version actuellement installée de Pipenv via Pipx : ''pipx list''       * afficher la version actuellement installée de Pipenv via Pipx : ''pipx list''
       * mise à jour : ''pipx upgrade pipenv''       * mise à jour : ''pipx upgrade pipenv''
-      * vérifier la version de Pipenv : ''pipenv --version''+      * vérifier la version de Pipenv : ''%%pipenv --version%%''
     * Mettre à jour les dépendances des paquets Python : ''pipenv sync''     * Mettre à jour les dépendances des paquets Python : ''pipenv sync''
     * Se placer dans le dossier de gn2pg : '' cd ~/data/gn2pg/''      * Se placer dans le dossier de gn2pg : '' cd ~/data/gn2pg/'' 
Ligne 60: Ligne 61:
     * Si nécessaire, réinstaller les fichiers ''..._to_synthese.sql'' avec : ''%%pipenv run gn2pg_cli --custom-script ./data/sql/<...>_to_synthese.sql <...>_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-<region>-sinp''
 +  * Créer les dossiers qui contiendront l'installation de Gn2Pg : ''mkdir -p ~/www/gn2pg/public/''
 +  * Copier dedans les fichiers suivant :<code bash>
 +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/
 +</code>
 +  * 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/<source>/''
 +    * Copier le fichier settings.ini : ''cp install/settings.ini.sample install/settings.ini''
 +    * Éditer et modifier le fichier settings.ini : ''vi  install/settings.ini'' <code properties>
 +GN2PG_CONFIG_NAME="<source>_config.toml"
 +APPLICATION_ROOT="/<source>"
 +SERVER_NAME="gn2pg.<domaine-sinp>"
 +GUNICORN_WORKERS=4
 +GUNICORN_TIMEOUT=30
 +GUNICORN_PORT=5050<num-increment-source>
 +DEBUG=true
 +</code>
 +      * 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 <port-ssh-db-srv> geonat@db-<region>-sinp:~/data/gn2pg/config/<source>_config.toml install/<source>_config.toml'' 
 +      * Modifier le fichier de config : ''vi install/<source>_config.toml''
 +        * Vous pouvez garder seulement la section ''[db]'' et commenter les autres sections
 +    * Créer un fichier ''environ'' avec : ''vi environ'' <code properties>
 +GUNICORN_PROC_NAME=gn2pg-<source>
 +GUNICORN_PORT=5050<num-increment-source>
 +GUNICORN_LOG_FILE=/var/log/gn2pg/gn2pg-gunicorn-<source>.log
 +GUNICORN_LOG_LEVEL=debug
 +</code>
 +    * Installer Poetry : ''pipx install poetry''
 +    * Installer les dépendances du Dashboard de Gn2pg avec : <code bash>
 +poetry config virtualenvs.create true --local
 +poetry config virtualenvs.in-project true --local
 +poetry install --extras=dashboard
 +</code>
 +    * Créer un fichier de service Sytemd : ''vi /etc/systemd/system/gb2pg-<source>.service'' (voir ci-dessous) 
 +      * Prendre en compte le service créé : ''systemctl daemon-reload''
 +      * Lancer le service : ''systemctl start gn2pg-<source>.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.<domaine-sinp>''
 +      * 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 ====
 +<code nginx>
 +server {
 +    listen [::]:80 ipv6only=on;
 +    listen 80;
 +    
 +    server_name gn2pg.<domaine-sinp>;
 +    root /home/geonat/www/gn2pg/public;
 +
 +    satisfy any;
 +    allow <ip-v4-srv-web>;
 +    deny  all;
 +    auth_basic "Zone restreinte";
 +    auth_basic_user_file /etc/nginx/.htpasswd;
 +
 +    location /<source> {
 +        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:<source-port>;# ATTENTION : ne rien mettre après le port pour que le chemin complet soit passé à Gunicorn
 +    }
 +}
 +</code>
 +
 +==== Fichier Logrotate de Gn2Pg ====
 +<code>
 +/var/log/gn2pg/*.log {
 +    su geonat geonat
 +    daily
 +    rotate 8
 +    size 100M
 +    create
 +    compress
 +    postrotate
 +    systemctl reload gn2pg || true
 +    endscript
 +}
 +</code>
 +
 +==== Fichier Systemd de Gn2Pg ====
 +<code>
 +[Unit]
 +Description=GN2PG-<source>
 +After=network.target
 +#After=postgresql.service
 +
 +[Service]
 +Type=simple
 +User=geonat
 +Group=geonat
 +WorkingDirectory=/home/geonat/www/gn2pg/<source>/
 +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/<source>/environ
 +ExecStart=/home/geonat/www/gn2pg/<source>/.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-<source>.log
 +StandardError=inherit
 +
 +[Install]
 +WantedBy=multi-user.target
 +</code>
 +
 +==== Exemple de contenu pour index.html ====
 +<code html>
 +<!doctype html>
 +<html lang="fr">
 +  <head>
 +    <meta charset="utf-8">
 +    <meta name="viewport" content="width=device-width, initial-scale=1">
 +    <title>Gn2Pg Dashboards Biodiv'AURA</title>
 +    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
 +    <style>
 +      .bi {
 +        vertical-align: -.125em;
 +        fill: currentColor;
 +      }
 +    </style>
 +  </head>
 +  <body>
 +    <svg xmlns="http://www.w3.org/2000/svg" class="d-none">
 +      <symbol id="arrow-right-short" viewBox="0 0 16 16">
 +        <path fill-rule="evenodd" d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z"/>
 +      </symbol>
 +    </svg>
 +    <div class="container my-5">
 +      <div class="p-5 text-center bg-body-tertiary rounded-3">
 +        <img src="logo-orb.png" alt="ORB AURA"/>
 +        <img src="/lpo/img/src_gn2pg.png" />
 +        <h1 class="text-body-emphasis">Gn2Pg dashboards</h1>
 +        <p class="col-lg-8 mx-auto fs-5 text-muted">
 +          Accès aux interfaces des dashboards de Gn2Pg.
 +        </p>
 +        <div class="d-inline-flex gap-2 mb-5">
 +          <a class="d-inline-flex align-items-center btn btn-primary btn-lg px-4 rounded-pill" href="/lpo">
 +            LPO
 +            <svg class="bi ms-2" width="24" height="24"><use xlink:href="#arrow-right-short"/></svg>
 +          </a>
 +          <a class="d-inline-flex align-items-center btn btn-primary btn-lg px-4 rounded-pill" href="/flavia">
 +            Flavia
 +            <svg class="bi ms-2" width="24" height="24"><use xlink:href="#arrow-right-short"/></svg>
 +          </a>
 +        </div>
 +      </div>
 +    </div>
 +
 +    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
 +  </body>
 +</html>
 + 
 +</code>
  • database/sinp-aura/gn2pg.1708077021.txt.gz
  • Dernière modification : 2024/02/16 09:50
  • de jpmilcent