...
Installer les paquets nécessaires
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
apt-get install wget apache2 libapache2-mod-shib2 git apt-get install postgresql postgresql-contrib |
...
Création de l'utilisateur esup:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
groupadd esup useradd -g esup -m esup |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
cd /opt/ wget http://apache.crihan.fr/dist/tomcat/tomcat-8/v8.5.24/bin/apache-tomcat-8.5.24.tar.gz tar xzvf apache-tomcat-8.5.24.tar.gz mv apache-tomcat-8.5.24 apache-tomcat-8.5.24-esup-nfc-tag tar xzvf apache-tomcat-8.5.24.tar.gz mv apache-tomcat-8.5.24 apache-tomcat-8.5.24-esup-sgc ln -s apache-tomcat-8.5.24-esup-nfc-tag tomcat-esup-nfc-tag ln -s apache-tomcat-8.5.24-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-8.5.24-esup-sgc/ chown -R esup:esup /opt/apache-tomcat-8.5.24-esup-nfc-tag/ |
...
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 | ||||
|---|---|---|---|---|
| ||||
cat > /opt/esup-env <<EOF #!/bin/sh JAVA_HOME=/opt/jdk #GRADLE_HOME=/usr/local/gradle-2.14.1 #ANDROID_HOME=/usr/local/android-sdk JAVA_OPTS="-Xms256m -Xmx512m" EOF |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
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 | ||||
|---|---|---|---|---|
| ||||
<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"/> |
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" redirectPort="8443" asyncTimeout="1200000" tomcatAuthentication="false" scheme="https" secure="true" URIEncoding="UTF-8"/> |
...
Créer un fichier de configuration pour le VirtualHost esup-sgc.univ-ville.fr /etc/apache2/sites-available/esup-sgc.univ-ville.fr.conf
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<VirtualHost *:80>
ServerName esup-sgc.univ-ville.fr
ServerAdmin webmaster@univ-ville.fr
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
RewriteRule ^/(.*)$ https://esup-sgc.univ-ville.fr/$1 [L,R]
</VirtualHost>
<VirtualHost *:443>
ServerName esup-sgc.univ-ville.fr
ServerAdmin webmaster@univ-ville.fr
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/certs/esup-sgc.crt
SSLCertificateKeyFile /etc/apache2/certs/esup-sgc.key
SSLCACertificateFile /etc/apache2/certs/CA.crt
ProxyPass /Shibboleth.sso !
ProxyPass /secure !
ScriptAlias /secure /var/www/printenv.pl
ShibCompatValidUser Off
<Location /Shibboleth.sso>
SetHandler shib
AuthType None
Require all granted
</Location>
<Location /shibboleth-sp>
AuthType None
Require all granted
</Location>
Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css
<Location /secure>
AuthType shibboleth
ShibRequestSetting requireSession 1
require shib-session
ShibUseHeaders On
ShibRequestSetting applicationId default
</Location>
<Location />
AuthType shibboleth
ShibRequestSetting requireSession 1
require shib-session
ShibUseHeaders On
ShibRequestSetting applicationId default
</Location>
<Location "/resources">
Require all granted
ShibRequireSession Off
</Location>
<Location "/wsrest">
Require all granted
ShibRequireSession Off
</Location>
<Location "/payboxcallback">
Require all granted
ShibRequireSession Off
</Location>
ProxyPass / ajp://localhost:8209/ ttl=10 timeout=3600 retry=1
<LocationMatch "^/(resources|webjars)">
ExpiresActive On
ExpiresByType text/css "access plus 1 hour"
ExpiresByType text/javascript "access plus 1 hour"
ExpiresByType application/javascript "access plus 1 hour"
ExpiresByType image/gif "access plus 1 hour"
ExpiresByType image/png "access plus 1 hour"
ExpiresByType image/jpg "access plus 1 hour"
ExpiresByType image/jpeg "access plus 1 hour"
ExpiresByType application/x-shockwave-flash "access plus 1 hour"
ExpiresByType image/x-icon "access plus 1 hour"
</LocationMatch>
CacheRoot /var/cache/httpd/esup-sgc
CacheDirLevels 2
CacheDirLength 1
CacheEnable disk /resources
AddOutputFilterByType DEFLATE text/plain text/html text/css text/javascript application/x-javascript application/javascript application/json image/svg+xml
</VirtualHost> |
...
Penser à intégrer ces certificats au keystore des tomcat. Par exemple:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
keytool -genkey -alias mon_cert -keyalg RSA -keystore /opt/esup.univ-ville.jks keytool -delete -alias mon_cert -keystore /opt/esup.univ-ville.jks keytool -import -file /etc/apache2/certs/esup-sgc.crt -alias sgc -trustcacerts -keystore /opt/esup.univ-ville.jks keytool -import -file /etc/apache2/certs/esup-nfc-tag.crt -alias nfctag -trustcacerts -keystore /opt/esup.univ-ville.jks |
...
Activer les sites:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
a2dissite 000-default.conf a2ensite esup-sgc.univ-ville.fr a2ensite esup-nfc-tag.univ-ville.fr |
...
Générer une nouvelle clé:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
shib-keygen |
Cette commande permet de générer les fichiers sp-key.pem et sp-cert.pem dans /etc/shibboleth/
...
Avant la balise ApplicationDefaults, ajouter un RequestMap avec le nom des deux virtualhost:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<RequestMapper type="Native">
<RequestMap applicationId="default">
<Host name="esup-nfc-tag.univ-ville.fr" applicationId="esup-nfc-tag" authType="shibboleth" requireSession="false"/>
<Host name="esup-sgc.univ-ville.fr" applicationId="esup-sgc" authType="shibboleth" requireSession="false"/>
</RequestMap>
</RequestMapper> |
...
Configurer la balise SSO pour utiliser le WAYF de Renater (ou un Idp par défaut sinon, cf variante en commentaires) :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<ApplicationDefaults entityID="https://esup-sgc.univ-ville.fr" ...>
<Sessions ...>
<!--
<SSO entityID="https://idp.univ-ville.fr/idp/shibboleth">
SAML2 SAML1
</SSO>
-->
<SSO location="/"
discoveryProtocol="SAMLDS" discoveryURL="https://discovery.renater.fr/renater">
SAML2 SAML1
</SSO> |
...
Et enfin, avant la fermeture de la balise ApplicationDefaults, rajoutez un ApplicationOverride. Dans notre cas, le VirtualHost esup-sgc.univ-ville.fr utilisera le default, on utilisera un id spécifique pour esup-nfc-tag:
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<ApplicationOverride id="esup-nfc-tag" entityID="https://esup-nfc-tag.univ-ville.fr/shibboleth"/> |
...
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/catalina.out {
copytruncate
daily
missingok
rotate 30
compress
delaycompress
}
/opt/tomcat-esup-nfc-tag/logs/catalina.out {
copytruncate
daily
missingok
rotate 30
compress
delaycompress
} |
...
Sous Debian, il est également possible d'éditer le fichier /var/lib/logrotate/status pour déterminer plus précisément la date de rotation (ceci est utile dans le cas d'une utilisation de lvm2 par exemple).
Installation
Éléments requis
...