...
- 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 | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
apt install tomcat10 tomcat10-user |
Installation des instances Tomcat
Création de l'utilisateur esup:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
<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 | ||||
|---|---|---|---|---|
| ||||
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 | ||
|---|---|---|
| ||
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 | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
<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 | ||||
|---|---|---|---|---|
| ||||
<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 |
|---|
|
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 | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
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 | ||
|---|---|---|
| ||
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 | ||||
|---|---|---|---|---|
| ||||
<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 |
|---|
|
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 | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
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 | ||
|---|---|---|
| ||
chown -R tomcat:tomcat /opt/tomcat-esup-nfc-tag/ EOF systemctl enable tomcat-esup-nfc-tag.service |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
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 | ||
|---|---|---|
| ||
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 | ||
|---|---|---|
| ||
/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-
...
- nfc-tag-server : ESUP-NFC-TAG-SERVER
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
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
...
