Cette page décrit une l'installation effecuté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 connaitre 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.yml`.
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 requetes 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-agapr.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 blob 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, ajout du 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);