-
Notifications
You must be signed in to change notification settings - Fork 102
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Séparation frontend / backend & Dockerisation #2088
Comments
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. |
Voici quelques réflexions que j'avais eu à ce sujet. Passer par une api pour récupérer la configJ'avais commencé à travailler dessus sur la branche 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
|
style="background: url({{appConfig.API_ENDPOINT}}/static/assets/custom/images/login_background.jpg) center 10% no-repeat;" |
- (voir comment changer les composants custom introduction et footer pour qu'ils puissent récupérer le html depuis le backend)
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 :
- faire un fichier
package.json
pour chaque module (contenant du code frontend)- il faut bien choisir le nom du module dans le fichier
package.json
- on pourrait par convention prefixer par gn_module (comme
gn_module_import
,gn_module_export
)
- on pourrait par convention prefixer par gn_module (comme
- la commande npm install /frontend va créer le lien symbolique vers le code frontend du module dans le dossier `geonature/frontend/node_modules/gn_module_...
- il faut bien préciser les chemin des sous-module dans les includes du fichier
tsconfig.app.json
- il faut bien choisir le nom du module dans le fichier
"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
- installer seulement le module en backend (ce qui devrait correspondre à un pip install -e
- installer seulement le module module en frontend (~ à un npm install /frontend)
- installer seulement le module en base (nécessite d'avoir le module en backend, et serait l'équivalent de
upgrade-modules-db
mais pour un seul module)
Merci Joël pour tes retours !
|
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 :
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). Ce cas s'est produit avec plusieurs clients donc n'est pas forcément isolé. Merci d'avance pour votre retour ! |
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. |
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. 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 ! |
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. |
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. |
Merci beaucoup pour vos retours ! |
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). |
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 PnX-SI/TaxHub#297 (comment), 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 ! |
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. |
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 APIon 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
Assetsconcernant 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 ( 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'installationLe but est de pouvoir mettre le frontend et le backend dans deux docker différents
on pourrait garder la possibilité d'appeler cela permettrait
|
Cette séparation a été intégrée dans la 2.12. |
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 :
Ce travail est initié sous forme de draft dans la PR Suppression du support des modules non-packagés #2081
Les images Docker pourront être généré automatiquement à chaque release, être diffusé publiquement, et servir aux tests automatiques.
Voici donc un résumé des évolutions prévus :
tsconfig.json
tsconfig.app.json
app.config.ts
au profit d’une récupération de la configuration dynamiquement à partir de l’API. L’URL de l’API devra bien évidemment continuer à être connu par le backend, mais elle sera fourni dans un fichier json, et non typescript, de manière à ne pas nécessité de rebuild du front pour la définir.external_modules
et remplacement par un lien symbolique vers le frontend des modules dans un sous-dossier du dossierfrontend
de GeoNature. Nécessaire pour des raisons techniques, et pour une meilleur gestion des dépendances node.upgrade-modules-db
pour compléter la tablet_modules
& installer / mettre à jour le schéma de base de données des modules. Actuellement, ces opérations portant sur la base de données sont fait à l’installation du module, ce qui est incompatible avec la création d’une image backend alors que la base de données n’existe pas encore.create_app
t_modules
(en lien avec le point précédent)ID_APP
au démarrage, se contenter du code applicationpackage.json
etpackage-lock.json
au niveau du backend afin d’installer ses propres modules node. Actuellement, les besoins du backend sont renseigné au niveau du frontend, et le dossiernode_modules
du frontend est symlinké au niveau du backend.The text was updated successfully, but these errors were encountered: