Skip to content

Configuration docker 🐳 pour le déploiement des MicroWebServices embarquant un système de cache basé sur Varnish

Notifications You must be signed in to change notification settings

abes-esr/microwebservices-docker

Repository files navigation

microwebservices-docker

L'application MicroWebServices (cf son code source (non ouvert)) met à disposition des réseaux de l'Abes des API permettant de rechercher et récupérer les données du Sudoc via un pogramme informatique.

Ce dépôt met à disposition la configuration docker 🐳 pour déployer les microwebservices en l'associant à un système de cache basé sur le logiciel Varnish (dans un premier temps dédié aux besoins BACON).

Exemples d'API mises à disposition par les microwebservices :

Prérequis

Le code source des MicroWebService n'est pas ouvert. Ce dépôt n'est donc utilisable que par les agents de l'Abes sous VPN. Si vous êtes en local il faut donc lancez son VPN car la phase de compilation aura besoin d'accès à https://artifactory.abes.fr et la phase de déploiement/exécution aura besoin d'accès à Oracle.

Les prérequis logiciels sont :

  • docker
  • docker-compose

Installation

Préparation du répertoire contenant les configuration docker, le code source des microwebservices pour son image docker, et le répertoire où sera stocké le cache :

# personnaliser /opt/pod si besoin pour déployer l'application où vous le souhaitez
cd /opt/pod/
git clone https://github.com/abes-esr/microwebservices-docker.git
# git clone git@github.com:abes-esr/microwebservices-docker.git
cd /opt/pod/microwebservices-docker/

# récupération du code source des microwebservices pour pouvoir générer son image docker
git clone https://git.abes.fr/depots/MicroWebServices.git ./images/microwebservices-api/
# git clone git@git.abes.fr:depots/MicroWebServices.git ./images/microwebservices-api/

# préparation du répertoire qui contiendra 
# le gros fichier où varnish stockera son cache
cd /opt/pod/microwebservices-docker/
mkdir -p ./volumes/microwebservices-varnish/
chmod 777 ./volumes/microwebservices-varnish/

Configuration docker du déploiement (cf le fichier .env-dist qui contient toutes les variables personnalisables avec les explications) :

cd /opt/pod/microwebservices-docker/
cp .env-dist .env
# personnaliser alors le contenu du .env

Compilation de l'application

cd /opt/pod/microwebservices-docker/
chmod +r images/microwebservices-varnish/*
chmod +x images/microwebservices-varnish/docker-varnish-entrypoint
docker-compose build

Les images docker suivantes seront alors créées en local :

  • microwebservices-api:0.0.1-SNAPSHOT : contiendra MicroWebServices.war et un serveur tomcat9 prêt à l'emploi
  • microwebservices-varnish:7.0.2 : contiendra le varnish préconfiguré pour fonctionner avec les microwebservices

Démarrage et arrêt de l'application

Une fois la compilation de l'image docker terminée (cf section précédente) lancez ceci dans un terminal pour la démarrer :

cd /opt/pod/microwebservices-docker/
docker-compose up -d

Et lancer ceci pour la stopper :

cd /opt/pod/microwebservices-docker/
docker-compose stop

Mise à jour de l'application

Pour mettre à jour l'application :

# mise à jour de microwebservices-docker
cd /opt/pod/microwebservices-docker/
git pull

# mise à jour du code source des MicroWebServices
cd /opt/pod/microwebservices-docker/images/microwebservices-api/
git pull

# recompilation + redéploiement
cd /opt/pod/microwebservices-docker/
docker-compose build
docker-compose up -d

Supervision

Pour 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 visualiser les logs de l'appli
cd /opt/pod/microwebservices-docker/
docker-compose logs -f --tail=100

Pour consulter l'espace disque occupé par le cache de Varnish (dans cet exemple : 1,6Go sont utilisés par le cache) :

[gully@levant.abes.fr@diplotaxis-test microwebservices-docker]$ pwd
/opt/pod/microwebservices-docker
[gully@levant.abes.fr@diplotaxis-test microwebservices-docker]$ du -sh volumes/
1.6G    volumes/

Pour afficher les logs internes du système de cache microwebservice-varnish (peut être utile pour mieux comprendre comment le système de cache travail), une fois que le conteneur microwebservice-varnish est lancé, il suffit de lancer la commande suivante pour voir en temps réèl la consultation du cache (CTRL+C pour quitter) :

docker exec -it microwebservices-varnish varnishlog

Sauvegardes

Il n'est pas nécessaire de sauvegarder l'application car elle ne stock pas de données. La totalité des données de l'applications sont présentes dans la base de données Oracle.

L'unique éléments à sauvegarder est le suivant (mais ce dernier est très facile à régénérer en partant de .env-dist, cf section installation):

  • /opt/pod/microwebservices-docker/.env : contient la configuration spécifique de notre déploiement

Le contenu du répertoire /opt/pod/microwebservices-docker/volumes/microwebservices-varnish/ n'a pas besoin d'être sauvegardé. Et au contraire il est judicieux de l'exclure du système de sauvegarde car sa taille peut être grande (50Go).

Tester l'application

Les URL suivantes permettent de tester que l'application répond correctement et en particulier de tester son système de cache. A titre d'exemple, on peut observer que le package KBART LN_FRANCE_ALLTITLES-PFEDITEUR (180 000 lignes pour 180 Mo) arrive à être récupéré en environ 10 minutes sans le système de cache et arrive à être récupéré en environ 8 secondes avec le système de cache.

Ouvrez votre navigateur Web ou lancez un cURL sur les URL locale, par exemple :

Les mêmes URL sur l'environnement de dev (diplotaxis-dev pour les URL internes) :

Les mêmes URL sur l'environnement de test (diplotaxis-test pour les URL internes) :

Les mêmes URL sur l'environnement de prod (diplotaxis-prod pour les URL internes) :

Pour ne pas utiliser la mise en cache sur ces URL, conservez exactement les mêmes URL et remplacez le port 12081 par 12080 (cela appelera directement le conteneur microwebservice-api sans mise en cache)

Vider le cache

Pour vider le cache, deux façon de faire :

  1. au niveau technique on peut le vider entièrement en redémarrant le conteneur microwebservices-varnish de cette façon :
    cd /opt/pod/microwebservices-docker/
    docker-compose restart microwebservices-varnish
  2. au niveau technico-fonctionnel, on peut vider des éléments ciblés du cache en appelant la méthode HTTP PURGE sur des URL précises, exemple :
    curl -X PURGE -v "https://bacon-dev.abes.fr/package2kbart/JSTOR_COUPERIN_ARTS-AND-SCIENCES-VIII.txt"

Architecture

(cf le lien pour éditer le schéma)

A noter que la brique microwebservices-varnish met en cache les retours des requêtes HTTP de microwebservices-api en fonction de critères dans l'URL.

Benchmark

Voir le document dédié aux benchmarks.

About

Configuration docker 🐳 pour le déploiement des MicroWebServices embarquant un système de cache basé sur Varnish

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published