...
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 groupInstallergroupInstaller !) à ce propos se résumé aux pages nommées "Installation by maturity level" :
...
.
...
...
Install the Grouper container with maturity level 1
Installation depuis les sources
...
Si tout se passe bien, l'ensemble de vos groupes et configurations sont ainsi restés compatibles avec cette nouvelle version de grouper
Web-Service, packaging, grouperInstaller et génération des images Docker de Grouper ?
Si la partie UI peut être déployée depuis les sources via quelques adaptations (cf les diffs proposés par le fork esup et la commande 'mvn dependency:copy-dependencies' notamment), la partie Web-Service devrait l'être tout autant car elle correspond +/- au même webapp a priori avec des services/librairies différentes.
Cependant le packaging sous maven n'est pas clair, il apparait en effet que tout est pensé pour une exploitation depuis les images Docker.
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 exploitants qui sont encouragés pour leur part à utiliser les images dockoer 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é ?
Migration vers une installation sous Docker
Cf l'expérimentaion ci-dessus de la mise en place de Grouper depuis les sources et si on suit la documentation officielle, il est très fortement recommandé de faire fonctionner Grouper sous docker.
La documentation à suivre à ce propos (attention à ne pas consulter de documentations obsolètes) se trouve actuellement (octobre) 2024 ici :
Quelques partis pris vis-à-vis de l'exploitation de Grouper sous Docker.
- De notre installation précédente, on conserve le aépache avec le mod_shib sur le host ainsi que la base de données postgresql :
- On fait en sorte d'avoir un minimum de configurations sous forme de fichiers de configurations à plat ; dit autrement, on importe le maximum des configurations dans la base de données.
On fait cela via l'interface graphique.
Depuis Home > Miscellaneous > Configure > Configuration files on importe les fichiers de notre répertoire conf
Seuls 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 - On fait donc tourner sous docke les services grouper à proprement parlés, avec un container par usage : 1 pour l'interface web, 1 pour le web-service et 1 pour le daemon.
- Nous proposons ici l'usage d'un simple docker-compose 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 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 à 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
Bloc de code | ||||
---|---|---|---|---|
| ||||
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 (qui permet de regrouper et mutualiser les configurations à la base de données notamment pour les 3 container grouper)
Bloc de code | ||||
---|---|---|---|---|
| ||||
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 |
slashRoot/opt/grouper/grouperWebapp/WEB-INF/classes/morphString.properties
Bloc de code | ||||
---|---|---|---|---|
| ||||
encrypt.key = 123456789azerty |
Configurations systemd
L'idée est de proposer ici un service par container pour pouvoir les relancer facilement, on utilise cependant une seule déclaration systemd puisque la définition de chaque service est similaire.
Bloc de code | ||||
---|---|---|---|---|
| ||||
[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 | ||||
---|---|---|---|---|
| ||||
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.
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 suffitEn cours...
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)
- https://github.com/EsupPortail/grouper-esup/blob/grouper-esup-5/grouper/conf/grouper-loader.properties
- https://github.com/EsupPortail/grouper-esup/blob/grouper-esup-5/grouper/conf/subject.properties
La 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).
...
Bloc de code | ||||
---|---|---|---|---|
| ||||
-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).