| Sommaire |
|---|
Pré-requis
- Java OpenJdk 8 ou 11 17 (jusqu'à 25) : le mieux est de l'installer via le système de paquets de votre linux.
- Maven : le mieux est de l'installer via le système de paquets de votre linux.
- Postgresql 9 ou > : le mieux est de l'installer via le système de paquets de votre linux.
- Tomcat (Tomcat 9) : http://tomcat.apache.org/10 ou Jetty 10 (éventuellement via système de paquets également)
- Apache + libapache2-mod-shib2 : https://services.renater.fr/federation/documentation/guides-installation/index#installer_un_sp_shibboleth [la documentation ci-avant reprend également cette partie]
- Git
PostgreSQL
L'ensemble des données est stocké dans une base de données, photos comprises, cela nous a ammené à utiliser PostgreSQL (et non MySQL) pour ses possibilités de streaming sur les blobs.
Sous debian :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
apt-get install postgresql |
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
su postgres
psql
create database esupsgc;
create USER esupsgc with password 'esup';
grant ALL ON DATABASE esupsgc to esupsgc;
ALTER DATABASE esupsgc OWNER TO esupsgc; |
Cette application a été dévelopée en utilisant Spring ROO et donc ses technologies associées.
...
Puis la création de l'extension lo se fait via un super-user:
avec postgresql 9 et supérieur :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
apt-get install postgresql-contrib psql \c esupsgc CREATE EXTENSION lo; |
...
CF https://www.postgresql.org/docs/9.4/static/lo.html
Vous devez donc démarrer l'application une première fois avec dans src/main/resources/META-INF/persistence.xml, la propriété hibernate.hbm2ddl.autp valuée à create, cela permettra de créer les différentes tables en base de données.
Ne pas oublier ensuite, pour ne pas écraser la base au à chaque redémarrage, de modifier src/main/resources/META-INF/persistence.xml : create-> update - cf ci-dessous.
Ajouter Ajoutez éventuellement la contrainte postgresql supplémentaires supplémentaire :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
alter table card_desfire_ids ADD CONSTRAINT unique_desfire_ids_desfire_ids_key UNIQUE (desfire_ids, desfire_ids_key); |
...
Si les configurations par défaut de PostgreSQL peuvent suffirsuffire, il peut être toutefois intéressant de les adapter pour que PostgreSQL puisse mettre à profit les ressources matérielles de votre serveur.
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
11 12,19,23 * * * postgres rm -f /opt/pg-backup/esupnfctag-`date +\%A-\%HH`.dump.bz2 && pg_dump -f /opt/pg-backup/esupnfctag-`date +\%A-\%HH`.dump esupnfctag && bzip2 /opt/pg-backup/esupnfctag-`date +\%A-\%HH`.dump 21 00 * * * postgres rm -rf /opt/pg-backup/esupsgc-dump && pg_dump -b -F d -f /opt/pg-backup/esupsgc-dump esupsgc |
Mise à jour de PostgreSQL :
Comme on recommande d'utiliser la version de postgresql de votre distribution (debian par exemple), la mise à jour de PostgreSql se fait simplement via la mise à jour de paquets.
Lors d'une mise à jour de version de votre distribution cependant (apt dist-upgrade), si vous souhaitez profiter de la nouvelle version de postgresql, il faut effectuer des commandes de mises à jour supplémentaires.
debian propose en effet nativement et par défaut la gestion des postgresql en cluster via les commandes pg_ ; pg_lsclusters permet par exemple de lister les clusters en place. Aussi lors d'une mise à jour de distribution, la version de PostgreSQL est amené à changer, Debian fait alors cohabiter les deux installations sur le même serveur.
| Bloc de code | ||
|---|---|---|
| ||
# pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
13 main 5432 online postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
15 main 5433 online postgres /var/lib/postgresql/15/main /var/log/postgresql/postgresql-15-main.log |
Le cluster lié à la nouvelle version de postgresql est disponible et opérationnel et en écoute en 5433, le cluster utilisé jusque-là écoute toujours en 5432. Si la possibilité de cluster postgresql peut permettre d'utiliser plusieurs postgresql indépendants sur un même serveur, ici souvent on souhaitera simplement migrer le cluster jusque-là utilisé dans sa nouvelle version, càd pour reprendre l'exemple ci-dessus, supprimer ce nouveau cluster 15 (non utilisé) et migrer de version le cluster en version 13 vers la version 15.
Voici les commandes permettant de réaliser cette opération :
- supprimer le cluster postgres 15 créé par défaut :
| Bloc de code | ||
|---|---|---|
| ||
pg_dropcluster --stop 15 main |
- mettre à jour le postgres 13 (vers 15)
| Bloc de code | ||
|---|---|---|
| ||
pg_upgradecluster --method=upgrade --link 13 main |
Cette procédure est très explicite et vous avertira en cas d'erreurs. Si à la fin de la procédure vous n'avez pas d'erreurs, PostgreSQL 15 a dû automatiquement prendre le relais sur PostgreSQL 13 (les fichiers de configurations ont été copiés vers la nouvelle version, la base également) et écoute sur le port 5432 (pas de changement).
| Bloc de code | ||
|---|---|---|
| ||
# pg_lsclusters
Ver Cluster Port Status Owner Data directory Log file
13 main 5433 down postgres /var/lib/postgresql/13/main /var/log/postgresql/postgresql-13-main.log
15 main 5432 online postgres /var/lib/postgresql/15/main /var/log/postgresql/postgresql-15-main.log |
Suite à cette mise à jour, le postgresql 13 a été conservé mais éteint (et a pris un nouveau port d'écoute en 5433).
Durant la procédure, une information indique que vous devez passer un script d'optimisation
Pensez effectivement à le lancer en tant qu'utilisateur postgres.
| Bloc de code | ||
|---|---|---|
| ||
postgres@dgs-13-5912-1752:/usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages |
- supprimer le “backup” PostgreSQL 13 ; une fois que vous avez bien vérifié que tout fonctionne bien avec la version nouvellement mise à jour (15 ici donc):
| Bloc de code | ||
|---|---|---|
| ||
pg_dropcluster 13 main |
Une telle mise à jour d'un postgresql 13 vers un postgresql 15 proposant une base de données esup-sgc avec 100.000 cartes/photos stockées en base de données (~20GB de données) est opérée par ce biais en moins d'1 minute.
Paramétrage mémoire JVM :
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
rm -rf /opt/tomcat-esup-sgc/webapps/ROOT && cp -rf /opt/esup-sgc/target/sgc-13.30.0 /opt/tomcat-esup-sgc/webapps/ROOT |
...
- Logs : src/main/resources/log4j.properties
- Base de données :
- src/main/resources/META-INF/spring/database.properties pour paramètres de connexion
- src/main/resources/META-INF/persistence.xml pour passage de create à update après premier lancement (création + initialisation de la base de données)
...
| Bloc de code | ||
|---|---|---|
| ||
git pull origin esup-sgc-13.30.0 |
mise à jour depuis un tag
...