PnX-SI / GeoNature

Application de saisie et de synthèse des observations faune et flore
GNU General Public License v3.0
104 stars 102 forks source link

Séparation frontend / backend & Dockerisation #2088

Closed bouttier closed 1 year ago

bouttier commented 2 years ago

Dans la version 2.11 de GeoNature, nous prévoyons un certain nombre d’évolution de nature à supprimer les liens existants actuellement entre le backend et le frontend.

Ces évolutions sont nécessaire à la mise en place d’une architecture Docker simple et classique. Cela veut dire :

Voici donc un résumé des évolutions prévus :

jpm-cbna commented 2 years ago
  • Ajout de fichier package.json et package-lock.json au niveau du backend afin d’installer ses propres modules node.

Quels sont les besoins en package Node du backend ? Je n'avais pas réalisé qu'il y avait un tel besoin...

bouttier commented 2 years ago

Quels sont les besoins en package Node du backend ? Je n'avais pas réalisé qu'il y avait un tel besoin...

Actuellement la partie administration, mais qui peut être amené à disparaître avec la gestion front des permissions.

Pour la partie backoffice / flask-admin, il y a également des fichiers servis (jquery, bootstrap, …) mais c’est géré directement par flask-admin et pas par nous.

joelclems commented 2 years ago

Voici quelques réflexions que j'avais eu à ce sujet.

Passer par une api pour récupérer la config

J'avais commencé à travailler dessus sur la branche https://github.com/PnX-SI/GeoNature/tree/feat/config2/

dans les grands principes il y avait un service de config qui récupérait la config depuis une api à l'initialisation de application

Dossier frontend/src/custom

Afin d'éviter le plus possible à a voir à rebuilder le frontend

Place du code des modules en frontend

L'idéal serait que l'installation du frontend du module se limite à un npm install <chemin vers le module>/forntend

Pour cela, il serait possible de :

  "include": [
    "main.ts",
    ...
    "../node_modules/gn_module*"

d'où l'importance de bien choisir le nom des modules dans les fichiers package.json des module et de les préfixer en gn_module_

Migration d'une base existante dans un nouvel environnement

Dans le cas de la commande upgrade-modules-db on peut mettre à jour la base pour coller aux modules installés.

On peut aussi être dans le cas ou l'on a une base qui pssède déjà les modules, mais l'applicatif n'a pas ces modules installés.

Dans ce cas on pourrait rajouter des options à la commande d'installation des modules afin de pouvoir

bouttier commented 2 years ago

Merci Joël pour tes retours !

mvergez commented 2 years ago

Salut @bouttier et @camillemonchicourt !

Merci pour cette super issue.

Je viens juste d'y penser donc je le partage tout de suite : j'ai des interrogations sur cette ligne :

Intégration de TaxHub à GeoNature

En effet, dans le cas d'une installation de GeoNature Citizen chez un client, nous devons également installer Taxhub (pour la gestion des programmes qui sont basés sur des listes taxonomiques). Donc si j'ai bien compris, vous souhaitez intégrer Taxhub dans GeoNature, ce qui voudrait dire que dans ce cas, si nous avons besoin d'installer Taxhub nous sommes obligés d'installer tout GeoNature ? Ou une installation séparée sera possible ?

Ce cas s'est produit avec plusieurs clients donc n'est pas forcément isolé.

Merci d'avance pour votre retour !

TheoLechemia commented 2 years ago

Non l'idée est bien de pouvoir toujours installer TaxHub indépendamment. Le but est que GeoNature intègre pleinement taxhub . Actuellement TaxHub est installé comme un sous module et on peut charger les modèles de TaxHub dans GN, mais on ne sert pas les routes de TaxHub dans GN. L'idée est donc que GeoNature charge les blueprint de TaxHub pour servir toutes les routes sur quelquechose comme "/geonature/api/taxhub...", donc on a plus 2 services systemd, deux confs apache etc... Pour le front, c'est un autre débat...

mvergez commented 2 years ago

Merci pour ta réponse @TheoLechemia !

A part effectivement pour se passer des services systemd, confs apache etc... Je ne vois pas vraiment l'avantage d'intégrer Taxhub à GeoNature. Surtout dans un contexte de dockerisation ou Taxhub deviendrait un service comme GeoNature dans docker-compose. Et en plus si on met flask-admin, il n'y aura pas vraiment de frontend séparé donc tout pourra être compris dans une seule image docker donc ce serait juste quelques lignes à ajouter au docker-compose. Et pas de souci de systemd confs apache etc....

Après c'est mon avis personnel mais :

Merci d'avance pour vos retours et j'espère n'être pas complètement à côté de la plaque !

lpofredc commented 2 years ago

Je confirme le besoin d'un taxhub autonome et indépendant ;) Actuellement utilisé dans plusieurs applications chez nous: BiodivTerritoires et Oiseaux de France en plus des instances GeoNature-citizen et GeoNature-atlas.

camillemonchicourt commented 2 years ago

Oui oui on a bien ces cas en tête et il n'est pas prévu de ne pouvoir installer TaxHub qu'avec GeoNature, mais de pouvoir l'intégrer pour simplifier l'architecture, éviter de dupliquer son installation, et surtout car dans ce contexte TaxHub et GeoNature ont la même BDD, donc ils sont de fait dépendants. Voir https://github.com/PnX-SI/TaxHub/issues/297#issuecomment-1291654478

mvergez commented 2 years ago

Merci beaucoup pour vos retours ! J'ai répondu directement à l'issue que tu as mentionné @camillemonchicourt, ce sera plus simple, merci !

bouttier commented 2 years ago

Je remet en avant le fait qu’en l’état, TaxHub a beau être déployé à côté de GeoNature, il n’en reste pas moins installé également dans le venv de GeoNature (pour utiliser les modèles taxonomique). L’installer qu’une fois et pas 2 est donc plutôt un gain de temps !

Cette intégration dans GeoNature restant soumise à la refonte du front en flask-admin, je pense que nous nous dirigerons dans un premier temps vers une Dockerisation de TaxHub dans sa forme actuelle.

Je réaffirme comme dit par Théo & Camille la volonté de garder la possibilité de déployer TaxHub sans GeoNature (comme les nomenclatures par exemple).

mvergez commented 2 years ago

Je suis d'accord avec vous, qu'en l'état, il vaudrait mieux l'installer avec. Tout en, comme vous l'avez dit tous les 3, le gardant installable sans GeoNature. Car, effectivement, ils sont dépendants par la base de données et Taxhub est installé dans le venv.

Avec la réponse que j'ai écrite dans le sujet https://github.com/PnX-SI/TaxHub/issues/297#issuecomment-1291654478, tout cela me fait donc me poser, peut-être à tord, la question suivante : ne se dirige-t-on pas vers un rassemblement de toutes les applications dans GeoNature qui pourrait peut-être à terme alourdir sa maintenance et ses mises à jour ? Car je me dis naïvement, qu'en séparant les choses, chacune peut évoluer indépendamment, au niveau contenu du code (tout en conservant bien sûr les liens que sont les API Rest), technologies employés (backend, frontend, bdd), librairies utilisées etc... Et cela permet aussi de séparer la charge de travail entre les différentes applications.

Mais peut-être que ces discussions sont à faire autre part ? J'ai lancé un gros sujet, j'en suis désolé s'il n'avait pas sa place ici.

Merci beaucoup en tout cas pour vos retours !

camillemonchicourt commented 2 years ago

Les 2 outils garderont leur dépôt, leur cycle de vie et de release, etc, mais il sera possible d'installer TaxHub directement avec GeoNature, comme une dépendance. GeoNature est de fait déjà dépendant de TaxHub car ils partagent la même BDD.

joelclems commented 2 years ago

Salut Elie et merci pour ta réponse

La méthode d'y aller progressivement me semble bonne, déjà pour tester sur quelques éléments (page home de geonature) pour montrer que cela marche

API

on peut faire deux api c'est peut être plus simple à maintenir

cette dernière pourrais renvoyer un dictionnaire de la forme suivant ou la config des module aurait pour clé le code du module

... (config de geonature
OCCTAX: { ... }

SYNTHESE: { ... }
OCCHAB:

Assets

concernant les images et plus globalement les assets, dans le module gn_module_monitoring, j'avais fait en sorte de passer les assets des sous-module dans le dossier static de geonature (<static>/monitoring/<code_du_sous_module>/...

cela avait l'avantage de ne pas avoir à recompiler le frontend à chaque installation de sous-module

l'idée est que le frontend est là pour rendre disponible les infos qu'il va demander au backend

commande d'installation

Le but est de pouvoir mettre le frontend et le backend dans deux docker différents Pour la partie installation du frontend des modules on pourrait

on pourrait garder la possibilité d'appeler npm install_gn_module <chemin vers le module> <module_code> dans la procédure de la commande geonature install-gn-module en le rendant optionnel

cela permettrait

camillemonchicourt commented 1 year ago

Cette séparation a été intégrée dans la 2.12. Et la dockerisation est désormais disponible depuis la 2.13.1.