Configuration docker 🐳 pour déployer l'application Rafa (référentiel des annuaires fonctionnels de l'Abes).
Le code source (non opensource car vieux code) de rafa est accessible ici :
https://git.abes.fr/depots/Rafa/
Les URLs correspondantes aux déploiements en local, test et prod de rafa sont les suivantes :
- local : http://127.0.0.1:15180/
- dev : https://rafa-dev.abes.fr
- test : https://rafa-test.abes.fr
- prod : https://rafa.abes.fr
Disposer de :
docker
docker compose
Déployer la configuration docker dans un répertoire :
# adaptez /opt/pod/ avec l'emplacement où vous souhaitez déployer l'application
cd /opt/pod/
git clone https://github.com/abes-esr/rafa-docker.git
cd /opt/pod/rafa-docker/
mkdir -p images/
git clone https://git.abes.fr/depots/Rafa.git ./images/Rafa/
Configurer l'application depuis l'exemple du fichier .env-dist
(ce fichier contient la liste des variables avec des explications et des exemples de valeurs) :
cd /opt/pod/rafa-docker/
cp .env-dist .env
# personnaliser alors le contenu du .env
Initialisation de la base de données en partant du dump d'une sauvegarde, par exemple rafa-db-2023-09-07.dmp
qu'il faut préalablement déposer dans le répertoire /opt/pod/rafa-docker/volumes/rafa-db/backup/
:
cd /opt/pod/rafa-docker/
chmod 777 -R ./volumes/rafa-db/oradata/ ./volumes/rafa-db/backup/ ./volumes/rafa-db/setup-scripts/
docker compose up -d rafa-db rafa-db-dumper # a noter que le premier démarrage peut prendre jusque à 10 minutes
docker exec -it rafa-db-dumper bash
impdp system/$ORACLE_DB_DUMPER_ORACLE_PWD@//$ORACLE_DB_DUMPER_HOST:$ORACLE_DB_DUMPER_PORT/FREE \
schemas=$ORACLE_DB_DUMPER_ORACLE_SCHEMA_TO_BACKUP \
TABLE_EXISTS_ACTION=REPLACE \
directory=BACKUP_DIR \
dumpfile=rafa-db-2023-09-07.dmp logfile=rafa-db-2023-09-07.impdp.log
Au final on peut démarrer le reste de l'application comme ceci :
cd /opt/pod/rafa-docker/
docker compose up --build -d
# pour démarrer l'application (ou pour appliquer des modifications
# faites dans /opt/pod/rafa-docker/.env)
cd /opt/pod/rafa-docker/
docker compose up -d
Remarque : retirer le -d
pour voir passer les logs dans le terminal et utiliser alors CTRL+C pour stopper l'application
# pour stopper l'application
cd /opt/pod/rafa-docker/
docker compose stop
# pour redémarrer l'application
cd /opt/pod/rafa-docker/
docker compose stop
docker compose start
Point d'attention : éviter d'utiliser la commande docker compose restart
car cette dernière ne respecte pas la directive depends_on
de rafa-web
et cela provoquera une erreur 404 temporaire au démarrage du conteneur rafa-web
car son WAR n'arrivera pas à se déployer du fait que rafa-db
n'est pas encore démarré. Cette erreur 404 sera temporaire car un système automatique de redémarrage du conteneur rafa-web
a été mise en place à partir du 23/02/2024.
# pour visualiser les logs de l'appli
cd /opt/pod/rafa-docker/
docker compose logs -f --tail=100
Cela va afficher les 100 dernière lignes de logs générées par l'application et toutes les suivantes jusqu'au CTRL+C qui stoppera l'affichage temps réel des logs.
Pour configurer l'application, vous devez créer et personnaliser un fichier /opt/pod/rafa-docker/.env
(cf section Installation). Les paramètres à placer dans ce fichier .env
et des exemples de valeurs sont indiqués dans le fichier .env-dist
Les éléments suivants sont à sauvegarder:
/opt/pod/rafa-docker/.env
: contient la configuration spécifique de notre déploiement- la base de données oracle de Rafa dont les dumps sont periodiquement et automatiquement générés dans le répertoire
/opt/pod/rafa-docker/volumes/rafa-db/backup/
Réinstallez l'application rafa depuis la procédure d'installation ci-dessus et récupéré depuis les sauvegardes le fichier .env
et placez le dans /opt/pod/rafa-docker/.env
sur la machine qui doit faire repartir rafa.
Restaurez ensuite la dernière version de la base de données oracle de rafa comme ceci :
- localiser ou bien déposer le fichier à restaurer dans le répertoire
/opt/pod/rafa-docker/volumes/rafa-db/backup/
, exemple :-rw-rw----+ 1 54321 [email protected] 8376320 Dec 3 05:52 rafa-db-2023-12-03.dmp -rw-rw----+ 1 54321 [email protected] 5617 Dec 3 05:52 rafa-db-2023-12-03.log -rw-rw----+ 1 54321 [email protected] 8376320 Dec 4 05:52 rafa-db-2023-12-04.dmp -rw-rw----+ 1 54321 [email protected] 436 Dec 4 09:51 rafa-db-2023-12-04.log
- s'assurer que les conteneurs rafa-db et rafa-db-dumper sont démarrés :
docker compose up rafa-db rafa-db-dumper -d
- entrer dans le conteneur, identifiez le dump à restaurer et régler éventuellement ses droits (l'outil de restauration est très sensible aux droits positionnés sur le fichier dmp) :
docker exec -it rafa-db-dumper bash chown oracle /backup/rafa-db-2024-06-15.dmp chmod 660 /backup/rafa-db-2024-06-15.dmp
- lancer la commandes suivantes (en remplaçant le nom du fichier) :
impdp system/$ORACLE_DB_DUMPER_ORACLE_PWD@//$ORACLE_DB_DUMPER_HOST:$ORACLE_DB_DUMPER_PORT/FREE \ schemas=$ORACLE_DB_DUMPER_ORACLE_SCHEMA_TO_BACKUP \ TABLE_EXISTS_ACTION=REPLACE \ directory=BACKUP_DIR \ dumpfile=rafa-db-2023-06-15.dmp \ logfile=rafa-db-2023-06-15.impdp.log
Lancez alors toute l'application rafa et vérifiez qu'elle fonctionne bien :
cd /opt/pod/rafa-docker/
docker compose up -d
Il peut être utile de recharger depuis zéro la base de données dans le cadre d'une restauration. Pöur cela il est recommandé de nettoyer complètement la base de données en supprimant totalement le répertoire où Oracle stock ses données.
Voici comment procéder :
cd /opt/pod/rafa-docker/
docker compose down rafa-db rafa-db-dumper
rm -rf /opt/pod/rafa-docker/volumes/rafa-db/oradata/
git checkout /opt/pod/rafa-docker/volumes/rafa-db/oradata/
chmod -R 777 /opt/pod/rafa-docker/volumes/rafa-db/oradata/
TLDR : une procédure à copier coller est dispo dans la section juste après
Dans le cas où une nouvelle version de Rafa est à déployer, son code source aura été mis à jour ici : https://git.abes.fr/depots/Rafa
Il est alors nécessaire de mettre à jour le code source de Rafa dans le répertoire /opt/pod/rafa-docker/images/Rafa/
et de le caler sur la version cible (exemple: 1.18.19) :
cd /opt/pod/rafa-docker/images/Rafa/
git pull origin 1.18.19
Ensuite de mettre en cohérence ce n° de version dans la variable RAFA_VERSION dans le fichier /opt/pod/rafa-docker/.env
:
cd /opt/pod/rafa-docker/
sed -i 's#^RAFA_VERSION=.*$#RAFA_VERSION=1.18.19#g' /opt/pod/rafa-docker/.env
Puis de rebuilder les images et de redéployer les conteneurs dans cette nouvelle version :
cd /opt/pod/rafa-docker/
docker compose up --build -d
Le script suivant fait tout le travail au dessus en une seule opération en se callant sur la dernière release trouvée :
cd /opt/pod/rafa-docker/images/Rafa/
git pull
RAFA_LAST_VERSION=$(git describe --tags --abbrev=0)
git checkout $RAFA_LAST_VERSION
cd /opt/pod/rafa-docker/
sed -i "s#^RAFA_VERSION=.*\$#RAFA_VERSION=$RAFA_LAST_VERSION#g" /opt/pod/rafa-docker/.env
docker compose up --build -d
Pour cela on peut utiliser l'outil SQL developer et utiliser sa fonctionnalité Copie de base de données
:
Remarque : la copie des données de Rafa entre un Oracle 12c et un Oracle 23.2 fonctionne.
Une erreur rencontrée le 13/11/2024 était liée au mot de passe d'ORACLE qui avait expiré et qui empêchait le conteneur rafa-db-dumper de fonctionner. Ce bug était lié au réglage initial du mot de passe SYSTEM qui était réglé avec une expiration.
Voici les commandes passées pour désactiver l'expiration du mot de passe SYSTEM (remplacer "xxxxxxxxxxxxx" par le mot de passe venant de la variable RAFA_DB_ORACLE_PWD
) :
# rentrer dans le conteneur
docker exec -it rafa-db bash
# lancer le client sql d'oracle, visualiser les mdp expirés et régler les expirations des mots de passes
sqlplus /nolog
connect / as SYSDBA
SELECT username, account_status FROM dba_users WHERE ACCOUNT_STATUS LIKE '%EXPIRED%';
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
alter user SYSTEM identified by xxxxxxxxxxxxx account unlock;
commit;
Ci-dessous le lien vers notre documentation interne permettant de débloquer certaines situation non prévue dans les fonctionnalités de Rafa (ex: administrer les rôles).