ESUPSGC

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.

...


Schéma d’architecture de la solution

Pre-requis

Logiciels

  • Linux : nous recommandons l'usage d'un debian/trixie (debian 13)
  • Java : nous recommandons l'usage d'openjdk 

    • pour la partie serveur les versions 17 à 25 (généralement présentes dans les distributions) conviennent, 

    • pour la partie cliente vous pouvez utiliser openjdk et openjfx en version 17 ou supérieur également.

  • Maven (dernière version 3.x) : le mieux est de l'installer via le système de paquets de votre linux - http://maven.apache.org/download.cgi

  • Postgresql : le mieux est de l'installer via le système de paquets de votre linux.

  • Tomcat 10 : https://tomcat.apache.org/download-10.cgi ( ou jetty 10 ): à installer via le système de paquets également

  • Apache + libapache2-mod-shib2 (par paquets)

  • Git

Les deux applications serveurs doivent être « shibbolethisées » - voir la documentation renater : https://services.renater.fr/federation/docs/installation/sp

...

Il est également nécessaire d'avoir un JDK d'installé (OpenJDK [installation par paquet]).De même il vous faudra maven, que vous pouvez soit installer par paquet (apt install maven), soit manuellement depuis http://maven.apache.org/download.cgiOpenJDK) et maven

Bloc de code
languagebash
themeRDark
apt install openjdk-21-jdk-headless maven

Et enfin le paquet tomcat10, avec l'utilitaire tomcat10-instance-create permettant de facilitier la mise en place de plusieurs instances sur le même serveur : 

Bloc de code
languagebash
themeRDark
apt install tomcat10 openjdk-21-jdk-headless maventomcat10-user

Installation des instances Tomcat

...

Dans la suite de cette documentation, on choisit l'option de l'installation manuelle car celle-ci a le mérite d'être indépendante du système utilisé ; l'installation par paquet peut toutefois être préférable s'appuyant sur le système de paquets pour profiter des mises à jour facilitées par votre distribution (apt sous debian) - c'est d'ailleurs cette option qui a été mise en place dans la VM ESUP-SGC de démonstration.

Bloc de code
languagebash
themeRDark
cdtomcat10-instance-create -p 8380 -c 8305 /opt/
wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.48/bin/apache-tomcat-10.1.48.tar.gz
tar xzvf apache-tomcat-10.1.48.tar.gz
mv apache-tomcat-10.1.48 apache-tomcat-10.1.48-esup-nfc-tag

tar xzvf apache-tomcat-10.1.48.tar.gz
mv apache-tomcat-10.1.48 apache-tomcat-10.1.48-esup-sgc

ln -s apache-tomcat-10.1.48-esup-nfc-tag tomcat-esup-nfc-tag
ln -s apache-tomcat-10.1.48-esup-sgc tomcat-esup-sgc

rm -Rf /opt/tomcat-esup-sgc/webapps/*
mkdir /opt/tomcat-esup-sgc/webapps/ROOT/
rm -Rf /opt/tomcat-esup-nfc-tag/webapps/*
mkdir /opt/tomcat-esup-nfc-tag/webapps/ROOT/

chown -R esup:esup /opt/apache-tomcat-10.1.48-esup-sgc/
chown -R esup:esup /opt/apache-tomcat-10.1.48-esup-nfc-tag/

Note : Le contenu du dossier webapps est impérativement à supprimer, si vous ne le faites pas l'interface d'administration d'esup-sgc ne s'affichera pas. l'URL /manager rentrera en conflit avec la webapp manager de tomcat livrée par défaut lors du déploiement du serveur tomcat.

tomcat-esup-sgc
tomcat10-instance-create -p 8280 -c 8205 /opt/tomcat-esup-nfc-tag

On modifie ensuite les fichiers server.xml pour activer l'AJP, tomcat10-instance-create ne permettant pas cette option directement.

Pour l'instance d'Esup-SGC, éditer /opt/tomcat-esup-sgc/conf/server.xml afin de configurer le port 8205 et un connecteur AJP sur le port 8209.

Les connecteurs HTTP et HTTPS (ports 8080 et 8443 par défaut) doivent être commentés (ou être configurés sur un autre port pour éviter les conflits avec la seconde instance Tomcat)

Bloc de code
languagexml
themeRDark
<Server port="8205" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/>


Idem pour l'instance d'Esup-NFC-TAG qui utilisera les ports 8305 et 8309.

Bloc de code
languagexml
themeRDark
<Server port="8305" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/>


Info
  • Le tomcatAuthentication à false est indispensable pour que l'authentification shibboleth via le frontal apache et mod_shib fonctionne.
  • L'attribut asyncTimeout est donné en milli-secondes (1200000 pour 20 minutes) - esup-sgc et esup-nfc-tag utilisent la technique de long polling lors du badgeage de cartes ; c'est aussi ce qui explique le fait que l'on mette un timeout de 3600 secondes au niveau des ProxyPass Apache (les timeout des ProxyPass Apache doivent être plus grands que les asyncTimeout des tomcat).



Ces deux instances seront démarrées via Systemd. On peut donc créer et activer ces deux services:

Pour Esup-SGC (TODO : à revoir) :Les options Java étant les mêmes pour les deux instances, on peut créer un fichier commun qui sera lu lors du démarrage des tomcat.

Bloc de code
languagebash
themeRDark
cat > /etc/optsystemd/system/tomcat-esup-envsgc.service <<EOF
#!/bin/sh
JAVA_OPTS="-Xms256m -Xmx512m"
EOF

Note: si vous devez utiliser des certificats dont les autorités de certifications ne sont pas reconnus par le trustore par défaut de votre JVM (certificats autosignés par exemple), vous pouvez à ce niveau préciser dans JAVA_OPTS un trustore spécifique (que vous créez vous même) intégrant les autorités de certificats utilisés par les VirtualHosts Apache (ou encore serveurs ldaps).

Bloc de code
themeRDark
JAVA_OPTS="-Xms256m -Xmx512m -Djavax.net.ssl.trustStore=/opt/esup.univ-ville.jks -Djavax.net.ssl.trustStorePassword=esupesup"

Ces deux instances seront démarrées via Systemd. On peut donc créer et activer ces deux services:

Pour Esup-SGC:

Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-sgc.service <<EOF
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/opt/esup-env
Environment=CATALINA_PID=/opt/tomcat-esup-sgc/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat-esup-sgc
ExecStart=/opt/tomcat-esup-sgc/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=esup
Group=esup
[Install]
WantedBy=multi-user.target
EOF
 
systemctl enable tomcat-esup-sgc.service

...

Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-nfc-tag.service <<EOF
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/opt/esup-env
Environment=CATALINA_PID=/opt/tomcat-esup-nfc-tag/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat-esup-nfc-tag
ExecStart=/opt/tomcat-esup-nfc-tag/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=esup
Group=esup
[Install]
WantedBy=multi-user.target
EOF
 
systemctl enable tomcat-esup-nfc-tag.service

Configuration des Tomcat

Pour l'instance d'Esup-SGC, éditer /opt/tomcat-esup-sgc/conf/server.xml afin de configurer le port 8205 et un connecteur AJP sur le port 8209.

Les connecteurs HTTP et HTTPS (ports 8080 et 8443 par défaut) doivent être commentés (ou être configurés sur un autre port pour éviter les conflits avec la seconde instance Tomcat)

Bloc de code
languagexml
themeRDark
<Server port="8205" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/>

...

 Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/opt/esup-env
Environment=CATALINA_PID=/opt/tomcat-esup-sgc/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat-esup-sgc
ExecStart=/opt/tomcat-esup-sgc/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=esup
Group=esup
[Install]
WantedBy=multi-user.target
EOF
 
systemctl enable tomcat-esup-sgc.service



Pour Esup-NFC-TAG:


Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-nfc-tag.service <<EOF
# Systemd unit file for tomcat
[Unit]
Description=Apache Tomcat Web Application Container
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/opt/esup-env
Environment=CATALINA_PID=/opt/tomcat-esup-nfc-tag/temp/tomcat.pid
Environment=CATALINA_HOME=/opt/tomcat-esup-nfc-tag
ExecStart=/opt/tomcat-esup-nfc-tag/bin/startup.sh
ExecStop=/bin/kill -15 $MAINPID
User=esup
Group=esup
[Install]
WantedBy=multi-user.target
EOF
 
systemctl enable tomcat-esup-nfc-tag.service
Bloc de code
languagexml
themeRDark
<Server port="8305" shutdown="SHUTDOWN">
<!-- (...) -->
<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8" secretRequired="false"/>
Info
  • Le tomcatAuthentication à false est indispensable pour que l'authentification shibboleth via le frontal apache et mod_shib fonctionne.
  • L'attribut asyncTimeout est donné en milli-secondes (1200000 pour 20 minutes) - esup-sgc et esup-nfc-tag utilisent la technique de long polling lors du badgeage de cartes ; c'est aussi ce qui explique le fait que l'on mette un timeout de 3600 secondes au niveau des ProxyPass Apache (les timeout des ProxyPass Apache doivent être plus grands que les asyncTimeout des tomcat).

    Configuration d'Apache

    Activer les modules suivants:

    ...