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.

...

  • 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

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

  • Tomcat 10 ou jetty 10 12 : à installer via le système de paquets également

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

  • Git

...

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 tomcat10-user

Installation des instances Tomcat

Création de l'utilisateur esup:

Bloc de code
languagebash
themeRDark
groupadd esup
useradd -g esup -m esup

Installer les On propose d'installer les 2 applications esup-sgc et esup-nfc-tag sur deux instances de Tomcat. L'une sera utilisée pour ESUP-SGC, l'autre pour ESUP-NFC-TAG.

Plusieurs choix sont possibles : 

...

Dans la suite de cette documentation, on choisit l'option de l'installation 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.

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

Bloc de code
languagebash
themeRDark
tomcat10-instance-create -p 8380 -c 8305 /opt/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"/>

...

apt install tomcat10 tomcat10-user

Dans l'optique d'installer les 2 tomcat pour esup-sgc et esup-nfc-tag de la même manière, on stoppe et désactive le tomcat proposé par défaut via le paquet tomcat10.

Bloc de code
languagebash
themeRDark
systemctl stop tomcat10.service
systemctl disable tomcat10.service

Le paquet tomcat10 a ajouté au passage un utilisateur tomcat qui lancera nos instances de manière sécurisée avec des provilèges limitées.

Pour que les commandes bash lancées par esup-sgc fonctionne (commande chromium notamment) il faut que l'utilisateur tomcat est son home directory d'opérationnel : créez le et affectez le à l'utilisateur tomcaet si nécessaire.

Bloc de code
languageshell
echo ~tomcat
-> /var/lib/tomcat

mkdir /var/lib/tomcat
chown tomcat /var/lib/tomcat

On créé ensuite les 2 instances des tomcat ainsi :

Bloc de code
languagebash
themeRDark
tomcat10-instance-create -p 8280 -c 8205 /opt/tomcat-esup-sgc
tomcat10-instance-create -p 8380 -c 8305 /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" address="127.0.0.1" 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" address="127.0.0.1" 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. L'installation via les paquets debian nous propose par défaut une configuration sécurisée où l'instance de tomcat est lancé par un utilisateur banalisé tomcat à qui on octroie des droits de lecture/écriture sur certains répertoires. Les librairies tomcat sont partagées et issues du sytème (et donc mis à jour au travers d'un apt update/upgrade) alors que les configurations, logs, fichiers temporaires et répertoire des applications web (webapps) sont propres à chaque instance.
Aussi le fichier systemd  à mettre en place pour chacune des 2 instances n'est pas triviale, mais il suffit de partir de celui proposé pour l'instance du tomcat par défaut (que l'on a par ailleurs désactivé plus haut) pour les obtenir :

Bloc de code
languagebash
themeRDark
cp /usr/lib/systemd/system/tomcat10.service /etc/systemd/system/tomcat-esup-sgc.service
cp /usr/lib/systemd/system/tomcat10.service /etc/systemd/system/tomcat-esup-nfc-tag.service

Pour Esup-SGC :

Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-sgc.service <<EOF
#
# Systemd unit file for Apache Tomcat
#

[Unit]
Description=Apache Tomcat ESUP-SGC Server
Documentation=https://tomcat.apache.org/tomcat-10.0-doc/index.html
After=network.target
RequiresMountsFor=/var/log/tomcat10 /var/lib/tomcat10 /opt/tomcat-esup-sgc

[Service]

# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat10"
Environment="CATALINA_BASE=/opt/tomcat-esup-sgc"
Environment="CATALINA_TMPDIR=/opt/tomcat-esup-sgc/temp"
Environment="JAVA_OPTS=-Djava.awt.headless=true"

# Lifecycle
Type=simple
ExecStart=/bin/sh /usr/libexec/tomcat10/tomcat-start.sh
SuccessExitStatus=143
Restart=on-abort

# Logging
SyslogIdentifier=tomcat-esup-sgc

# Security
User=tomcat
Group=tomcat
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=tomcat-esup-sgc
CacheDirectoryMode=750
ProtectSystem=strict
ReadWritePaths=/opt/tomcat-esup-sgc/conf/
ReadWritePaths=/opt/tomcat-esup-sgc/work/
ReadWritePaths=/opt/tomcat-esup-sgc/webapps/
ReadWritePaths=/opt/tomcat-esup-sgc/logs/
ReadWritePaths=/opt/tomcat-esup-sgc/temp/

[Install]
WantedBy=multi-user.target


Ne pas oublier de donner les droits à tomcat sur /opt/tomcat-esup-sgc et d'activer le service.

Bloc de code
languageshell
chown -R tomcat:tomcat /opt/tomcat-esup-sgc/
systemctl enable tomcat-esup-sgc.service


Même procédure pour Esup-NFC-TAG

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

Bloc de code
languagebash
themeRDark
cat > /etc/systemd/system/tomcat-esup-nfc-sgctag.service <<EOF
#
# Systemd unit file for tomcatfor Apache Tomcat
#

[Unit]
Description=Apache Tomcat Esu WebNfc Application ContainerTag Server
Documentation=https://tomcat.apache.org/tomcat-10.0-doc/index.html
After=syslognetwork.target network.target
[Service]
Type=forking
EnvironmentFile
RequiresMountsFor=/var/log/tomcat10 /var/lib/tomcat10 /opt/tomcat-esup-nfc-tag

[Service]

# Configuration
Environment="CATALINA_HOME=/usr/share/tomcat10"
Environment="CATALINA_BASE=/opt/tomcat-esup-envnfc-tag"
Environment="CATALINA_PIDTMPDIR=/opt/tomcat-esup-nfc-sgctag/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/"JAVA_OPTS=-Djava.awt.headless=true"

# Lifecycle
Type=simple
ExecStart=/bin/sh /usr/libexec/tomcat10/tomcat-start.sh
SuccessExitStatus=143
Restart=on-abort

# Logging
SyslogIdentifier=tomcat-esup-nfc-tag

# Security
User=tomcat
Group=tomcat
PrivateTmp=yes
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
CacheDirectory=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
CacheDirectoryMode=750
ProtectSystem=strict
ReadWritePaths=/opt/tomcat-esup-nfc-tag/conf/
ReadWritePaths=/opt/tomcat-esup-nfc-tag/tempwork/tomcat.pid
Environment=CATALINA_HOME
ReadWritePaths=/opt/tomcat-esup-nfc-tag/webapps/
ExecStartReadWritePaths=/opt/tomcat-esup-nfc-tag/binlogs/startup.sh
ExecStopReadWritePaths=/binopt/kill -15 $MAINPID
User=esup
Group=esuptomcat-esup-nfc-tag/temp/

[Install]
WantedBy=multi-user.target

Ne pas oublier de donner les droits à tomcat sur /opt/tomcat-esup-sgc et d'activer le service.

Bloc de code
languageshell
chown -R tomcat:tomcat /opt/tomcat-esup-nfc-tag/
EOF
 
systemctl enable tomcat-esup-nfc-tag.service

...

Bloc de code
languagebash
themeRDark
a2enmod rewrite
a2enmod ssl
a2enmod proxy_ajp
a2enmod proxy_http
a2enmod shib
a2enmod headers

...

Il reste donc à les intégrer à l'IDP, soit directement, soit en passant par la fédération d'identité., soit directement, soit en passant par la fédération d'identité.

Logs

Suivant votre installation et paramétrage, vous retrouvez les logs dans /opt/tomcat-esup-sgc/logs/ et /opt/tomcat-esup-nfc-tag/logs/

En installant les tomcat comme décrits ici, et les lançant avec systemd, vous pourrez également consulter ces logs via journalct : 

Bloc de code
languageshell
journalctl -xeu tomcat-esup-sgc.service --follow

Rotation des logs

Il est possible de mettre en place une rotation journalière des logs. La plupart des distributions fournissent logrotate. Il est donc possible de créer un fichier de config /etc/logrotate.d/esup-sgc avec, par exemple, le contenu suivant:

Bloc de code
themeRDark
/opt/tomcat-esup-sgc/logs/*log
/opt/tomcat-esup-sgc/logs/catalina.out {
        copytruncate
        daily
        missingok
        rotate 30
        compress
        delaycompress
}
/opt/tomcat-esup-nfc-tag/logs/*log
/opt/tomcat-esup-nfc-tag/logs/catalina.out {
        copytruncate
        daily
        missingok
        rotate 30
        compress
        delaycompress
}

...

Pour avoir un système de gestion de cartes fonctionnel, l'installation minimale consiste à installer :

...

consiste à installer :

  • un serveur tomcat avec l'application web esup-nfc-tag-server sgc Installation ESUP-NFC-TAG-SERVER

...

...

Pour enrôler et éventuellement encoder vos cartes vous avez également besoin d'un client esup-sgc-client : voir la documentation [archivé]

Installation materielle

...

  • -SERVER
  • un serveur tomcat avec l'application web esup-

...

L'ordre d'installation n'a pas d'importance. Toutefois, les deux applications étant dépendentes, la documentation d'installation d'ESUP-SGC comporte des configurations d'ESUP-NFC-TAG-SERVER

Pour enrôler et éventuellement encoder vos cartes vous avez également besoin d'un client esup-sgc-client : voir

Image RemovedImage Removed

Pour automatiser l'encodage des cartes il est possible d'utiliser une imprimante Zebra ZXP3. voir : Tuto robot encodeur basé sur une Zebra ZXP3

Pour plus d'informations sur les différentes possibilités d'édition, voir la page ESUP-SGC-Client et édition des cartes

...