Arborescence des pages

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

adduser esup

Récupération des sources

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 :

apt install postgresql

Configuration

Dans /etc/postgresql/<XX>/main/pg_hba.conf ajout de :

host    all all     127.0.0.1/32    password

Redémarrage de postgresql

systemctl restart postgresql.service

Création de la base

su postgres
psql
create database esupagape;
create USER esupagape with password 'esup';
grant ALL ON DATABASE esupagape to esupagape;

Esup-Agape

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 :

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 :

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 :

<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 :

service apache2 reload

Compilation et lancement

Compilation

Après configuration, dans le dossier du dépôt :

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/) :

[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

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 :

apt-get install postgresql-contrib


Puis la création de l'extension lo se fait via un super-user:

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 : 

CREATE TRIGGER t_big_file BEFORE UPDATE OR DELETE ON big_file FOR EACH ROW EXECUTE PROCEDURE lo_manage(binary_file);
  • Aucune étiquette