Arborescence des pages

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

On se place ici dans le cadre d'un établissement qui fonctionne avec la version 2.3 de Grouper et qui souhaite opérer une mise à jour de celui-ci.

Avertissement

Cette documentation et les procédures qui s'y rapportent sont en cours de développement et mise au point.

Sommaire

Apports de Grouper 5.x par rapport à  la 2.3

Par rapport à la version 2.3 que l'on avait documenté documentée en 2017, la dernière version de Grouper (5.13.0 à l'heure où l'on début débute cette documentation) profite d'un certain nombre d'améliorations :

  • Une interface web unifiée : l'ensemble des manipulations (configuration des 'loaders' comprise) se fait depuis une seule et même interface  ; en 2.3 nous devions encore jonglé jongler avec l'ancienne interface (voire , l'interface light également) et fichiers de configuration ;
  • Une interface Web qui permet de  quasiment de tout configurer en base de données, là où en 2.3 nous devions éditer un certain nombre de fichiers de configurations ;
  • Une synchronisation des groupes vers le ldap (provisioning) s'appuyant sur les possibilités primitives de grouper via le Grouper Daemon ; nous n'avons plus besoin de PSP et de scripts supplémentaires associés .;

Modes d'installation

  • Une installation simplifiée via des images Docker que l'on met à jour simplement ; toutes les configurations étant en base de données dont le schéma est mise à jour automatiquement via des DDL.

Modes d'installation

Si la documentation officielle recommande très fortement l'Si la documentation officielle recommande très fortement l'usage de docker (et docker-compose) pour installer un Grouper dans un environnement fonctionnel, dans un premier temps nous sommes partis des sources afin de rester dans un environnement similaire à la version 2.3 tout en nous familarisant avec cette nouvelle version de Grouper. Pour ce faire, nous avons fait une ou 2 modifications réalisées sur le fork ESUP - https://github.com/EsupPortail/grouper-esup/tree/grouper-esup-5 

Nous avons ensuite procédé à une migration vers un environnement sous docker, de manière conforme à ce qui est décrit dans la documentation de Grouper vis-à-vis de son installation.

Octobre 2024, la documentation à jour (attention, un certain nombre de procédures données dans le wiki internet 2 sont obsolètes, notamment autour de groupInstaller groupInstaller !) à ce propos se résumé résume aux pages nommées "Installation by maturity level".

Installation depuis les sources

Environnement technique

On utilise une debian bookworm avec :

Nous avons laissé cette partie de la documentation car elle reprend la démarche que l'on (université de rouen) a suivi pour aboutir finalement à une installation sous docker.
Pour les exploitants recherchant une documentation rapide expliquant la   mise en place d'un grouper via docker, passez directement au paragraphe Migration vers une installation sous Docker.

Environnement technique

On utilise une debian bookworm avec :

  1. openjdk 17 installé par paquet
  2. apache-maven-3.9.9 installé manuellement
  3. tomcat9 installé manuellement
  4. postgresql 15 installé par paquet
  5. apache
  6. openjdk 17 installé par paquet
  7. apache-maven-3.9.9 installé manuellement
  8. tomcat9 installé manuellement
  9. postgresql 15 installé par paquet
  10. apache et le mod_shib par paquet

...

Récupération des données et configurations de l'installation de Grouper 2.3

Configurations

...

Vous pouvez récupérer l'essentiel de vos configurations via simples copies des fichiers properties donnés dans le répertoire grouper/conf

...

Dans le fork esup, nous proposons ces fichiers d'exemple à modifier pour s'adapter à votre ldap notamment :

Base de données

Un dump et restore postgresql de la base grouper doit pouvoire fonctionner.

...

L'ensemble du packaging se fait sans doute au travers de tâches appelant le GrouperInstaller qui ne doit cependant plus être directement utilisé par els les exploitants qui sont encouragés pour leur part à utiliser les images dockoer docker officielles proposées sur le hub docker : https://hub.docker.com/r/i2incommon/grouper

La question de la possibilité de reconstruire ces images docker depuis les sources peut se poser, a priori il n'y a pas de documentation à ce sujet ou nous ne l'avons pas trouvé trouvée ?

Migration vers une installation sous Docker

...

La documentation à suivre à ce propos (attention à ne pas consulter de documentations obsolètes) se trouve actuellement (octobre 2024) 2024 ici :

Quelques partis pris vis-à-vis de l'exploitation de Grouper sous Docker.

  1. De notre installation précédente, on conserve le

    aépache

    apache avec le mod_shib sur le host ainsi que la base de données postgresql

    :

    .

  2. On fait en sorte d'avoir un minimum de configurations sous forme de fichiers de configurations à plat ; dit autrement, on importe

    le maximum des

    toutes les configurations dans la base de données.
    On fait cela via l'interface graphique. 
    Depuis Home > Miscellaneous > Configure > Configuration

    files 

    files on importe les fichiers de notre répertoire conf

    Seuls

    Seul le fichier morphString.properties restera en fichier à plat pour y indiquer une clef de chiffrement ; en plus de cette configuration, le grouper n'a besoin en configuration docker que des paramètres de connexion à la base de données

  3. On fait donc tourner sous

    docke

    docker les services grouper à proprement

    parlés

    parler, avec un container par usage : 1 pour l'interface web, 1 pour le web-service et 1 pour le daemon.

  4. Nous proposons ici l'usage d'un simple docker-compose.yml afin de tout consolider dans un seul fichier (mais on aurait pu se contenter d'appeler directement du docker simplement), un établissement ayant une infrastructure de

    containerisation

    conteneurisation se passera du docker-compose pour privilgier son orchestrateur en place.

    Exemple d'installation via du docker-compose

Configurations Docker compose des services Grouper

En suivant les documentations officielles et en adoptant l'adaptant à un docker-compose, on a finalement un répertoire de travail /opt/grouperContainer contenant simplement 4 fichiers :!

  • docker-compose.yml
  • grouper.env
  • logo_univrouen.png
  • slashRoot/opt/grouper/grouperWebapp/WEB-INF/classes/morphString.properties

docker-compose.yml

On déclare l'ensemble des services grouper dans ce même fichier.

Bloc de code
languageyml
themeRDark
services:

  grouper-ui:
    image: "i2incommon/grouper:5.13.1"
    restart: always
    ports:
      - '8009:8009'
    command:
      - ui
    env_file: "grouper.env"
    environment:
     - GROUPER_TOMCAT_AJP_PORT=8009
    volumes:
      - ./slashRoot:/opt/grouper/slashRoot
      - /var/log/grouper-ui-logs:/opt/grouper/logs
      - ./logo_univrouen.png:/opt/grouper/grouperWebapp/grouperExternal/public/assets/images/logo_univrouen.png
      
  grouper-ws:
    image: "i2incommon/grouper:5.13.1"
    restart: always
    ports:
      - '7009:7009'
    command:
      - ws
    env_file: "grouper.env"
    environment:
     - GROUPER_TOMCAT_AJP_PORT=7009
    volumes:
      - ./slashRoot:/opt/grouper/slashRoot
      - /var/log/grouper-ws-logs:/opt/grouper/logs      

  grouper-daemon:
    image: "i2incommon/grouper:5.13.1"
    restart: always
    command:
      - daemon
    env_file: "grouper.env"
    volumes:
      - ./slashRoot:/opt/grouper/slashRoot      
      - /var/log/grouper-daemon-logs:/opt/grouper/logs

grouper.env

permet de regrouper et mutualiser les configurations à la base de données notamment pour les 3 container grouper

Bloc de code
themeRDark
GROUPER_DATABASE_PASSWORD=esup
GROUPER_DATABASE_USERNAME=grouper
GROUPER_DATABASE_URL=jdbc:postgresql://grosville:5432/grouper
GROUPER_AUTO_DDL_UPTOVERSION=v5.*.*
GROUPER_TOMCAT_HTTPS_PORT=-1
GROUPER_WS_GROUPER_AUTH=true
GROUPER_LOG_TO_HOST=true
GROUPER_UI_CONFIGURATION_EDITOR_SOURCEIPADDRESSES=192.168.0.3


slashRoot/opt/grouper/grouperWebapp/WEB-INF/classes/morphString.properties

pour définir une clef de chiffrement simplement

Bloc de code
themeRDark
encrypt.key = 123456789azerty

...

Bloc de code
themeRDark
[Unit]
Description=Grouper %i service with docker compose
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=true
WorkingDirectory=/opt/grouperContainer
ExecStart=/usr/bin/docker compose up grouper-%i -d --remove-orphans
ExecStop=/usr/bin/docker compose down grouper-%i

[Install]
WantedBy=multi-user.target

On active donc un service par container : 

Bloc de code
languagetext
themeRDark
systemctl enable grouper-docker-compose@ui
systemctl enable grouper-docker-compose@ws
systemctl enable grouper-docker-compose@daemon

Conclusion

L'installation est ainsi extrêmement simplifié via Docker.

...

WantedBy=multi-user.target

On active donc un service par container : 

Bloc de code
languagetext
themeRDark
systemctl enable grouper-docker-compose@ui
systemctl enable grouper-docker-compose@ws
systemctl enable grouper-docker-compose@daemon

Conclusion

L'installation est ainsi extrêmement simplifiée via Docker.

La mise à jour est théoriquement également très simplifiée : le simple changement du numéro de version de grouper dans le fichier docker-compose.yml et un redémarrage des services suffit.

Les configurations peuvent être exportées/importées depuis l'IHM, ou directement modifiées via le formulaire de configuration.

Exemple de modification de la configuration permettant de changer le logo de l'application : 

Image Added

Astuce Migration

Si vous êtes passés par l'étape d'installation de grouper depuis les sources, vous avez pu mettre à jour la base deonnées via l'IHM avant de passer en docker ; sinon, vous êtes confrontés au fait qu'il faut configurer dans l'IHM les sources de données pour pouvoir s'authentifier dans l'application... mais que pour s'authentifier, il faut aoir au préalable configuré les sources de données.

Dans ce cas là, et dans un premier temps, modifiez le docker-compose / service grouper-ui pour y apposer des configurations fichiers de subject.properties et grouper-loader.properties via les volumes :

Bloc de code
themeRDark
      - ./subject.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/subject.properties
      - ./grouper-loader.properties:/opt/grouper/grouperWebapp/WEB-INF/classes/grouper-loader.properties

Un exemple de ces fichiers est donné sur le github esup : 

Dès que vous aurez accés à l'interface web vous pourrez importer directement les configurations de ces fichiers en base et ne plus avoir besoin de monter ces configurations en tant que volume (pour l'import, votre IP doit référencée dans  la variable d'environnement GROUPER_UI_CONFIGURATION_EDITOR_SOURCEIPADDRESSES - cf le fichier grouper.env donnéé ci-dessus).

Dans la phase de migration, pensez au passage à ne démarrer que grouper-ui pour tout mettre au point, et ne lancez le daemon qu'une fois que tout est bien (re)paramétré en base.

Le premier démarrage va passer toutes les DDL de manière automatique, grâce à la variable d'environnement GROUPER_AUTO_DDL_UPTOVERSION=v5.. ; vous devrez aussi ensuite lancer la mise à jour de la base de données via l'interface web.

Image Added


Pour les Web Services, afin de pouvoir les utiliser via un simple login/password, on allume un gsh depuis un container docker puis on lance une commande gsh : 


Bloc de code
themeRDark
docker ps
docker exec -it dc48872f813a bash
sudo -u tomcat /bin/bash
./bin/gsh.sh
new GrouperPasswordSave().assignApplication(GrouperPassword.Application.WS).assignUsername("monGrouperWsUser").assignPassword("monGrouperWsPassword").save();

Ldap Provisionning

Passage de PSP au Ldap Provisionning

Une partie des configurations Ldap sont données dans les fichiers (à importer en base de données)données)

Comme dit ci-dessus, la logique des nouvelles versions de Grouper est de privilégier les configurations en base de données (permettant ainsi de tout avoir en base et de faciliter les montées de version en passant d'un container docker à un autre proposant une version plus à jour de grouper).

Aussi l'interface graphique permet de saisir l'ensemble des configurations permettant cette synchro grouper→ldap depuis le menu Home > Miscellaneous > Provisioning.

La configuration est cependant assez ardue, même en utilisant la facilité du "Ldap 'start with'" lorsqu'on ajoute un provisionner.

Si vous avez une configuration qui suit les recommandations supann et ce qu'on présentatit dans la documentation à propos de la version de grouper 2.3 (usage de groupOfNames, groupes à plat, overlay pour le memberOf, ...), le "start with" avec "flatGroupsWithMembershipDNs" aide grandement mais quelques subtilités restent à préciser.

Aussi nous proposons ici une configuration que l'on a exportée et que vous pouvez importer via l'interface web depuis Home > Configure >  Configuration files : grouper-loader.properties

Une fois le group-loader.properties importée, vous retrouvez dans  Home > Miscellaneous > Provisioning le provisionner ldapGroups.

Image Removed

N'hésitez pas alors à lancer l'outil de "Dignostics".

Image Removed

Daemons de synchro → ldap

2 daemons doivent être définis : CHANGE_LOG_consumer_ldapGroupgSyncInc et OTHER_JOB_ldapGroupgSyncFull - si ce n'est pas le cas aoutez les 

  • le premier, de type edu.internet2.middleware.grouper.app.provisioning.ProvisioningConsumer, permet de faire la synchro régulière toutes les minutes 
  • le deuxième, de type edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningFullSyncJob,
     permet de consolider au besoin l'enseble

Image Removed

Configuration des dossiers à provisionner

Comme dit ci-dessus, la logique des nouvelles versions de Grouper est de privilégier les configurations en base de données (permettant ainsi de tout avoir en base et de faciliter les montées de version en passant d'un container docker à un autre proposant une version plus à jour de grouper).

Aussi l'interface graphique permet de saisir l'ensemble des configurations permettant cette synchro grouper→ldap depuis le menu Home > Miscellaneous > Provisioning.

La configuration est cependant assez ardue, même en utilisant la facilité du "Ldap 'start with'" lorsqu'on ajoute un provisionner.

Si vous avez une configuration qui suit les recommandations supann et ce qu'on présentatit dans la documentation à propos de la version de grouper 2.3 (usage de groupOfNames, groupes à plat, overlay pour le memberOf, ...), le "start with" avec "flatGroupsWithMembershipDNs" aide grandement mais quelques subtilités restent à préciser.

Aussi nous proposons ici une configuration que l'on a exportée et que vous pouvez importer via l'interface web depuis Home > Configure >  Configuration files : grouper-loader.properties

Une fois le group-loader.properties importée, vous retrouvez dans  Home > Miscellaneous > Provisioning le provisionner ldapGroups.

Image Added

N'hésitez pas alors à lancer l'outil de "Dignostics".

Image Added

Daemons de synchro → ldap

2 daemons doivent être définis : CHANGE_LOG_consumer_ldapGroupgSyncInc et OTHER_JOB_ldapGroupgSyncFull - si ce n'est pas le cas ajoutez les 

  • le premier, de type edu.internet2.middleware.grouper.app.provisioning.ProvisioningConsumer, permet de faire la synchro régulière toutes les minutes (en production, nous avons finalement opté pour toutes les 10sec.) ;
  • le deuxième, de type edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningFullSyncJob, permet de consolider au besoin l'ensemble.

Image Added

Configuration des dossiers à provisionner

Pour chaque dossier 'racine', vous pouvez indiquer que l'ensemble de leurs groupes enfant doivent être reversés dans votre LDAP.
Attention, suivant la configuration de votre provisioning, ne pas indiquer de groupes à 'provisioner' peut revenir à dire à grouper de supprimer tous les groupes du ldap (cf la propriété provisioner.ldapGroups.deleteGroupsIfNotExistInGrouper=true donnée dans le fichier grouper-loader.properties )Pour chaque dossier 'racine', vous pouvez indiquer qu'ils doivent être reversés dans votre LDAP.

Copies d'écran d'interfaces indiquant que les daemons jobs ldap sont fonctionnels

...

Bloc de code
languagebash
themeRDark
-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n 

Sous docker, la mise en place de cela demandera un peu plus de modifications : surcharge de configurations voire de fichiers et exposition du port (4000 ici).

Consommation CPU

Par rapport à une installation 2.3, qui utilisait notamment PSP pour mettre à jour les groupes vers ldap, la consommation CPU est moindre, alors même que les synchronisations de groupes sont plus réactives.

Sur le graphe ci-dessous, la migration de Grouper 2.3 vers 5 (sous docker) a été opérée le 23 octobre.

La migration de Grouper 2.3 vers 5 (sous docker) a été opérée le 23 octobre, le graphe montre que la consommation cpu est moindre à partir de cette date (divisée par 3 voir 4).Image AddedSous docker, la mise en place de cela demandera un peu plus de modifications : surcharge de configurations voire de fichiers et exposition du port (4000 ici).