| Info |
|---|
Cette page décrit l'installation effectuée à l'Université de Rouen sur un serveur en Debian 11 (2 CPU, 2 Go RAM). Le serveur comporte une instance de PROD et une de TEST. Le serveur comporte le frontal Apache, les 2 bases de données PostgreSQL ainsi que les deux applications (prod et test) |
Prérequis
- OpenJDK 1.7+
- Maven 3.6.x+
- PostgreSQL 13+
- Apache 2
- Serveur CAS et/ou IDP Shibboleth
- LDAP SUPANN
- Serveur SMTP
En option :
- Apogée (pour la synchro/récupération des étudiants en situation de handicap)
- Esup-signature (pour la signature des aménagements)
Création d'un utilisateur pour compiler et lancer l'application
Récupération des sources
| Bloc de code |
|---|
|
cd /opt/
git clone https://github.com/EsupPortail/esup-agape.git
sudo chown esup:esup esup-agape -R
cd esup-agape |
Configuration
PosgreSQL
Installation
Exemple sous debian :
| Bloc de code |
|---|
|
apt install postgresql |
Configuration
Dans /etc/postgresql/<XX>/main/pg_hba.conf ajout de :
| Bloc de code |
|---|
|
host all all 127.0.0.1/32 password |
Redémarrage de postgresql
| Bloc de code |
|---|
|
systemctl restart postgresql.service |
Création de la base
| Bloc de code |
|---|
|
su postgres
psql
create database esupagape;
create USER esupagape with password 'esup';
grant ALL ON DATABASE esupagape to esupagape; |
Esup-Agape
| Info |
|---|
Pour connaître le détail de l'impact de la configuration, rdv sur la page Fonctionnement De plus, les différents paramètres sont documentés directement dans le code source ici `src/main/java/org/esupportail/esupagape/config/ApplicationProperties.java` et ici `src/main/java/org/esupportail/esupagape/config/ldap/LdapProperties.java` |
La configuration s’effectue dans le fichier `src/main/resources/application.properties`.
Voici un exemple de configuration :
| Bloc de code |
|---|
|
application.display-photo-uri-pattern=https://<lien où trouver la photo de l'étudiant>/{0}
application.mapping-photo-id-to-ldap-field=eduPersonPrincipalName
application.code-etab=<code établissement>
application.anonymise-delay=4
application.filigrane=Plateforme de PROD
#application.models-path=
application.signatures-path=/opt/images/
application.activate-send-emails=true
application.test-email=testeur@univ-ville.fr
application.enable-scheduler-amenagement=true
application.enable-scheduler-anonymise=false
#application.enable-scheduler-esup-signature=true
application.enable-scheduler-individu=false
#application.esup-signature-url=https://esup-signature-test.univ-ville.fr
#application.esup-signature-avis-workflow-id=???
#application.esup-signature-certificats-workflow-id=???
#application.esup-signature-valideurs-emails=valideur@univ-ville.fr
spring.thymeleaf.servlet.produce-partial-output-while-processing=false
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.username=esupagape
spring.datasource.password=esup
spring.datasource.url=jdbc:postgresql://localhost:5432/esupagape
spring.jpa.hibernate.ddl-auto=update
spring.jpa.open-in-view=false
spring.ldap.urls=ldap://ldap.univ-ville.fr
spring.ldap.base=dc=univ-ville,dc=fr
spring.ldap.username=cn=userldap,dc=univ-ville,dc=fr
spring.ldap.password=xxxxxxxx
spring.mail.host=smtp.univ-ville.fr
spring.mvc.hiddenmethod.filter.enabled=true
server.port=8080
server.tomcat.max-swallow-size=-1
cas.url=https://cas.univ-ville.fr
cas.service=https://esup-agape.univ-ville.fr/login/cas
ldap.search-base=ou=people
ldap.group-search-base=ou=groups
ldap.group-search-filter=member={0}
ldap.user-id-search-filter=(uid={0})
ldap.member-search-filter=(&(uid={0})({1}))
#ldap.affectation-principale-ref-id-prefix-from-apo={APOGEE}
#ldap.affectation-principale-ref-id-prefix-from-rh={SIHAM}
ldap.scolarite-member-of-search=cn=<nom du groupe des personnels des scolarités>,ou=groups,dc=univ-ville,dc=fr
security.mapping-groups-roles.<nom du groupe des admins>=ROLE_ADMIN
security.mapping-groups-roles.<nom du groupe des gestionnaires>=ROLE_MANAGER
security.mapping-groups-roles.<nom du groupe des médecins>=ROLE_MEDECIN
security.mapping-groups-roles.<nom du groupe des personnels administratifs>=ROLE_ADMINISTRATIF
security.mapping-groups-roles.<nom du groupe des personnels des scolarités>=ROLE_SCOLARITE
#apogee.etu-url=https://apogee.univ-ville.fr/apowsInscportal/services/EtudiantMetier
#apogee.administratif-url=https://apogee.univ-ville.fr/apowsInscportal/services/AdministratifMetier
#apogee.pedago-url=https://apogee.univ-ville.fr/apowsInscportal/services/PedagogiqueMetier
#individu-source.data-sources.APOGEE.type=com.zaxxer.hikari.HikariDataSource
#individu-source.data-sources.APOGEE.driver-class-name=oracle.jdbc.OracleDriver
#individu-source.data-sources.APOGEE.password=xxxxxxxx
#individu-source.data-sources.APOGEE.url=jdbc:oracle:thin:@apogee.univ-ville.fr:1522/APOGEE
#individu-source.data-sources.APOGEE.username=web
#individu-source.data-sources.APOGEE.name=APO
#logging.level.root=DEBUG
#logging.level.org.apache.pdfbox=error
|
Forntal Apache
Afin de publier esup-agape de manière securisée, il est possible de mettre un frontal Apache à l'aide du module mod_proxy.
Pour ce faire, installer apache puis activer le mod_proxy. Voici un exemple sous debian :
| Bloc de code |
|---|
|
apt install apache2
a2enmod proxy proxy_http |
Voici maintenant un exemple de configuration apache qui va rediriger les requêtes http vers https puis faire proxy vers l'application esup-agape :
| Bloc de code |
|---|
|
<VirtualHost *:80>
ServerName esup-agape.univ-ville.fr
ServerAlias esup-agape
ServerAdmin system@univ-ville.fr
ServerSignature Off
RewriteEngine On
RewriteRule ^(.*) https://esup-agape.univ-ville.fr$1 [L,R]
</VirtualHost>
<VirtualHost *:443>
ServerName esup-agape.univ-ville.fr
ServerAlias esup-agape
ServerAdmin systeme@univ-ville.fr
ServerSignature Off
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/crt
SSLCertificateKeyFile /etc/pki/tls/private/key
SSLCertificateChainFile /etc/pki/tls/certs/cacert
SSLverifyclient none
ProxyPreserveHost On
ProxyPass / http://localhost:8080/ ttl=10 timeout=3600 loadfactor=100 retry=1
RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
RequestHeader set "X-Forwarded-SSL" expr=%{HTTPS}
ProxyPreserveHost On
</VirtualHost> |
Enfin, recharger la configuration Apache :
| Bloc de code |
|---|
|
service apache2 reload |
Compilation et lancement
Compilation
Après configuration, dans le dossier du dépôt :
| Bloc de code |
|---|
|
su esup
cd /opt/esup-agape
mvn clean package |
Création d'un service
Voici un exemple de configuration de systemd pour chaque "mode" de démarrage d'esup-signature (à mettre un fichier esup-agape.service dans /etc/systemd/system/) :
| Bloc de code |
|---|
|
[Unit]
Description=esup-agape
[Service]
User=esup
Group=esup
Environment=JAVA_OPTS=--add-exports=java.base/sun.security.pkcs=ALL-UNNAMED -Xms1024m -Xmx1024m
WorkingDirectory=/opt/esup-agape
ExecStart=/opt/esup-agape/target/esup-agape.jar
[Install]
WantedBy=multi-user.target
|
Ajustements après installation
Ajout du trigger pour les larges objects
L'application a été développée avec la fonction de lecture/écriture des blobs dans une transaction par streaming de PostgreSQL. CF https://www.postgresql.org/docs/11/static/lo.html
Pour une bonne gestion des blobs de cette application, il faut ajouter dans PostgreSQL un trigger sur la base de données sur la table big_file. La fonction lo_manage est nécessaire ici.
Sous debian :
| Bloc de code |
|---|
|
apt-get install postgresql-contrib |
Puis la création de l'extension lo se fait via un super-user:
| Bloc de code |
|---|
|
su postgres
psql
\c esupagape
CREATE EXTENSION lo; |
Enfin, seulement après avoir démarré une première fois esup-signature, ajouter le trigger à l'aide du script suivant :
| Bloc de code |
|---|
|
CREATE TRIGGER t_big_file BEFORE UPDATE OR DELETE ON big_file FOR EACH ROW EXECUTE PROCEDURE lo_manage(binary_file); |
Import des tables de correspondances
Les tables de correspondances apogee, sise, ldap doivent être renseignées dans la table postgresql "DataMapping". Voici un premier jeu de données issues de l'instance de l'université de Rouen :
https://github.com/EsupPortail/esup-agape/blob/main/src/main/resources/data_mapping.sql
Il est à ajouter en fonction de vos données. Pour l'instant (vesion 0.0.23-SNAPSHOT), il n'y a pas d'interface admin pour gérer cette table. Pour vous aider, voici une version excel :
| View file |
|---|
| name | data_mapping.xlsx |
|---|
| height | 250 |
|---|
|