Script d'initialisation du serveur - (init.sh)
Script de lancement de l'instance - (start.sh)
Mise à jour de la base de données
Ce dépôt a pour vocation à préparer, le plus automatiquement possible, un serveur pour en faire une machine de géocodage.
L'API de géocodage sera exposée sur l'URL : http://server_ip/addok/search/
Exemple : http://server_ip/addok/search/?q=14+rue+Gerty+Archim%C3%A8de+75012+Paris&limit=1
Un serveur UNIX (testé sous Debian), avec un accès Internet et une exposition du port 80.
Il faut prévoir suffisamment de CPU pour permettre de faire s'exécuter l'ensemble des conteneurs.
Il faut prévoir autant de RAM qu'il y aura d'instances de Redis lancées, qui chargeront la base de données.
Recommandations minimales :
- 8 CPU
- 12 GB de RAM
Permettant de faire tourner (à titre indicatif) :
- 1 instance Traefik,
- 1 instance Redis,
- 8-16 instances Addok.
En l'état actuel, il n'est possible de lier les conteneurs addok qu'à un seul conteneur redis.
Toute aide et/ou compétence sur le sujet est la bienvenue.
Afin de vérifier que les resources matérielles sont utilisées le plus optimalement possible sans saturation, il est intéressant de monitorer le serveur ainsi que les conteneurs Docker.
htop
Permet de voir l'utilisation de la RAM, l'utilisation de l'ensemble des CPU.
Lors du lancement de l'instance de géocodage, il est possible de constater le chargement en RAM par Redis de la base de données BAN.
La commande docker stats, permet de voir, pour chaque conteneur lancé, l'utilisation de la RAM, du CPU, le trafic réseau, les IO.
Cela permet de vérifier entre autres le niveau d'utilisation des conteneurs.
docker stats
# Exemple
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
86f162f2c545 addok_addok_4 0.05% 577.7MiB / 28.76GiB 1.96% 18.6GB / 43.2GB 0B / 401kB 11
6b3debd7317b addok_addok_1 0.08% 579.8MiB / 28.76GiB 1.97% 18.6GB / 43GB 8.19kB / 0B 11
5844727417c2 addok_addok_2 0.19% 578.9MiB / 28.76GiB 1.97% 18.5GB / 43GB 8.19kB / 73.7kB 11
e0ec7b335f8c addok_addok_3 0.15% 579.4MiB / 28.76GiB 1.97% 18.5GB / 42.8GB 0B / 0B 11
b4b7399edd6f addok_addok-redis_1 0.12% 5.007GiB / 28.76GiB 17.41% 282GB / 108GB 0B / 0B 4
ce34d9209ff5 traefik_proxy_1 0.03% 15.98MiB / 28.76GiB 0.05% 306GB / 323GB 23.9MB / 0B 28
La commande docker ps permet de lister les conteneurs avec leur id, leur nom, leur status ...
docker ps
# Exemple
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86f162f2c545 etalab/addok "/bin/sh -c docker-e…" 2 days ago Up 2 days 7878/tcp addok_addok_4
6b3debd7317b etalab/addok "/bin/sh -c docker-e…" 2 days ago Up 2 days 7878/tcp addok_addok_1
5844727417c2 etalab/addok "/bin/sh -c docker-e…" 2 days ago Up 2 days 7878/tcp addok_addok_2
e0ec7b335f8c etalab/addok "/bin/sh -c docker-e…" 2 days ago Up 2 days 7878/tcp addok_addok_3
b4b7399edd6f etalab/addok-redis "docker-entrypoint.s…" 2 days ago Up 2 days 6379/tcp addok_addok-redis_1
ce34d9209ff5 traefik:latest "/traefik --docker -…" 4 months ago Up 4 months 0.0.0.0:80->80/tcp traefik_proxy_1
Script de préparation du serveur (installation des paquets nécessaires, téléchargement des données et des fichiers de config).
Exécuter les commandes suivantes afin de télécharger le script sur le serveur :
wget -O ~/init.sh https://raw.githubusercontent.com/ARCEP-dev/geocodage_ban/master/init.sh
chmod u+x ./init.sh
./init.sh
- Téléchargement du script de vérification de l'environnement
- Vérification que OVERLAY FS soit bien activé
- Mise à jour des dépôts et installations
- Ajout du dépôt docker
- Mise à jour des dépôts et installation de docker
- Ajouter le service au démarrage
- Ajout de l'utilisateur au groupe docker
- Vérification de la version de Docker
- Création des répertoires pour l'instance de géocodage
- Téléchargement de la dernière version des données BAN
- Téléchargement des docker-compose à la sauce Arcep
- Téléchargement du script de lancement de l'instance de géocodage
- Redémarrage du serveur
Il est nécessaire de fermer et rouvrir sa session pour que les changements de droits soient effectifs. La solution que j'ai choisie est de redémarrer le serveur en fin de script.
Script de lancement de l'instance de géocodage.
- Aucune
./start.sh nbr_redis nbr_addok
- nbr_redis : Nombre de conteneurs Redis (Base de données In Memory)
- nbr_addok : Nombre de conteneurs Addok (API de géocodage)
- Lancement de traefik, qui fait fonction de load balancer
- Lancement des conteneurs addok & redis
Il faut veiller à avoir le rapport Redis/Addok correct. Mes tests empiriques donnent 1 pour 16.
Il peut être nécessaire de mettre à jour l'instance de géocodage avec des données plus récentes de la BAN. Pour ce faire, il faut :
- stopper l'instance en cours,
- télécharger la nouvelle base de données,
- relancer l'instance.
docker-compose -f /opt/geocoding/addok/addok-compose.yml down
# Téléchargement de la base de données
wget -O /tmp/addok-france-bundle.zip https://adresse.data.gouv.fr/data/ban/adresses/AAAA-MM-JJ/addok/addok-france-bundle.zip
# Création d'un répertoire de désarchivage
mkdir /tmp/data
unzip -d /tmp/data /tmp/addok-france-bundle.zip
# Déplacement des fichiers dans le répertoire de l'instance
sudo mv /tmp/data/* /opt/geocoding/addok/addok-data/
sudo chown debian:root /opt/geocoding/addok/addok-data/*
# Suppression de l'archive
rm /tmp/addok-france-bundle.zip
Il y a deux façons de faire.
Si l'instance a été stoppée via :
docker-compose -f /opt/geocoding/addok/addok-compose.yml down
alors, le réseau traefik existe toujours (car il est externe) et le conteneur traefik est toujours en fonctionnement, ce qui peut se vérifier via
docker ps
dans ce cas, il faut utiliser la commande :
docker-compose -f /opt/geocoding/addok/addok-compose.yml up --scale addok=X --scale addok-redis=Y -d
où X et Y sont les nombres de conteneurs, respectivement d'addok et de redis.
Dans le cas-où, traefik ne fonctionnerait plus et que son réseau ne serait plus existant, il faut utiliser le script start.sh.
Par défaut chaque requête reçue par l'API est loggée par Docker. Pour désactiver ce comportement, modifier le fichier addok/addok-compose.yml :
services:
environment:
- LOG_QUERIES=0
Puis redemarrer l'intance.