Commit 60dda3d6 authored by rg's avatar rg

Mise à jour de la doc.

parent 0520345d
# Tuileslb
Permet de monter un loadbalancer de serveur de tuiles pour [tuilesft](https://git.beta.pole-emploi.fr/open-source/tuiles/tuilesft).
Permet de monter une infrastructure de serveur de tuiles.
Ce docker ouvre un port 80 et un port 443.
***Tuilelb est une implémentation du projet opensource [tileserver](https://hub.docker.com/r/klokantech/tileserver-gl/).***
Ce document traite de :
- L'installation du load balancer de serveur de tuiles
- le parametrage
- L'installation du projet git
- Le montage d'une architecture serveur de tuiles
- des exemples de parametrage
# Installation
......@@ -19,45 +23,142 @@ Le projet peut se paramétrer au niveau des ports, token... par le biais du fich
***Pour l'installation de docker, suivre les prérequis en annexes.***
## Paramétrage
# Montage d'une architecture serveur de tuiles avec 2 serveurs + 1 load balancer
On considerera que :
- le domaine maps.domain.tld pointe le load balancer
- le domaine mapsft1.domain.tld pointe le premier serveur de tuiles
- le domaine mapsft2.domain.tld pointe le deuxième serveur de tuiles
Et on considèrera que le projet git est cloné :
```
$> git clone ssh://git@git.beta.pole-emploi.fr:23/open-source/tuiles/tuileslb.git
$> cd tuileslb
```
## Serveur de répartition de charge: load balancer à l'adresse `maps.domain.tld`
Création d'abord d'un .env :
```
SSL=letsencrypt
USE_CACHE=true
MAPS_TOKEN=0bf68e49728c59e806807d4bf9082b53f94a6c096ae33434ad4b1e2686b97efe
BALANCER_IPLIST=mapsft1.domain.tld mapsft2.domain.tld
```
Puis copie d'une map de la planete Terre dans `data/` et démarrage du conteneur :
```
tuileslb$> cp planet.mbtiles data/
tuileslb$> docker-compse up -d --build
```
## Premier serveur de tuiles
Création d'abord d'un .env : (utilisation du token du load balancer)
```
URL_DOWNLOADMAP=https://maps.domain.tld/0bf68e49728c59e806807d4bf9082b53f94a6c096ae33434ad4b1e2686b97efe/planet.mbtiles
```
Puis démarrage du conteneur :
```
tuileslb$> docker-compse up -d --build
```
## Deuxième serveur de tuiles (identique au premier)
Création d'abord d'un .env : (utilisation du token du load balancer)
```
URL_DOWNLOADMAP=https://maps.domain.tld/0bf68e49728c59e806807d4bf9082b53f94a6c096ae33434ad4b1e2686b97efe/planet.mbtiles
```
Puis démarrage du conteneur :
```
tuileslb$> docker-compse up -d --build
```
# Paramétrage
L'application peut se paramétrer par le biais d'un fichier `.env` à créer à la racine du projet :
Paramètre | Options | Defaut |
-----------------------|:-------------------------------------------|:-------------------|
DOMAIN | nom de domaine web | maps.domaine.tld |
HTTP_PORT | port http | 80 |
HTTP_PORTS | port https | 443 |
BALANCER_IPLIST | liste des IP de serveurs de tuiles | 127.0.0.1 |
SSL | true\|false\|letsencrypt | letsencrypt |
SSL_LETSENCRYPTMAIL | mail de référence letsencrypt | root@$DOMAIN |
MAPS_TOKEN | token de l'url de téléchargement de la map | (valeur aléatoire) |
Paramètre | Options | Defaut |
-----------------------|:------------------------------------------------------------------|:-------------------|
DOMAIN | nom de domaine web | maps.domaine.tld |
HTTP_PORT | port http | 80 |
HTTP_PORTS | port https | 443 |
BALANCER_IPLIST | liste des IP de serveurs de tuiles (ce qui active le repartiteur) | 127.0.0.1 |
SSL | true\|false\|letsencrypt | false |
SSL_LETSENCRYPTMAIL | mail de référence letsencrypt | root@$DOMAIN |
MAPS_TOKEN | token permettant à d'autres serveurs de télécharger la map | (valeur aléatoire) |
USE_CACHE | true (=500m)\|false\|valeur (ex: 1000m): active un cache nginx | false |
USE_MAP | nom du fichiier de la map (.mbtiles) dans /data | (vide) |
URL_DOWNLOADMAP | URL de la map a télécharger et utiliser | (vide) |
## Différentes configurations et parametrage
***Exemple de fichier `.env` en mode répartiteur de charge :***
```
MAPS_TOKEN=0bf68e49728c59e806807d4bf9082b53f94a6c096ae33434ad4b1e2686b97efe
BALANCER_IPLIST=mapsft1.domain.tld:81 mapsft2.domain.tld mapsft3.domain.tld
```
***Dans cet exemple, le conteneur sera lancé en mode repartiteur de charge vers 3 autres serveurs, dont un ouvert sur port 81***
Exemple de fichier .env:
***Autre exemple avec ssl de fichier `.env` en mode répartiteur de charge :***
```
HTTP_PORT=81
SSL=letsencrypt
HTTP_PORT=80
HTTPS_PORT=443
DOMAIN=maps.domain.tld
MAPS_TOKEN=0bf68e49728c59e806807d4bf9082b53f94a6c096ae33434ad4b1e2686b97efe
BALANCER_IPLIST=mapsft1.domain.tld:81 mapsft2.domain.tld mapsft3.domain.tld
USE_CACHE=1000m # Spécifie un cache de requete de 1 go
```
***Dans cet exemple, le répartiteur de charge va chercher un certificat ssl letsencrypt***
***Note: le [projet de frontal de tuiles](https://git.beta.pole-emploi.fr/open-source/tuiles/tuilesft) propose un serveur de tuiles capable d'être servi par le loadbalancer.***
***Le loadbalancer peut devenir serveur de dépot commun de la map grâce au paramètre MAPS_TOKEN***
Le répartiteur de charge peut se servir lui-même en ajoutant l'ip 127.0.0.1, auquel cas il devient lui aussi serveur de tuiles.
Une fois le fichier `.env` renseigné, relancer l'application par :
***Exemple simple suivant sans ssl :***
```
tuileslb$> sudo docker-compose up -d --build
DOMAIN=maps.domain.tld
MAPS_TOKEN=0bf68e49728c59e806807d4bf9082b53f94a6c096ae33434ad4b1e2686b97efe
BALANCER_IPLIST=127.0.0.1 mapsft1.domain.tld:81 mapsft2.domain.tld mapsft3.domain.tld
```
***Ici MAPS_TOKEN permet à un serveur de tuile de télécharger une map sur ce serveur***
## Configuration en serveur de tuiles
Les serveurs de tuiles servis par le répartiteur de charge peuvent être montés avec le même projet.
L'absence d'un fichier `.env` montera un simple serveur de tuiles. Toutefois il est conseillé de lui fournir quelques paramètres.
Exemple de fichier `.env` pour un noeud serveur de tuiles servi par le répartiteur de charge :
```
URL_DOWNLOADMAP=https://maps.domain.tld/0bf68e49728c59e806807d4bf9082b53f94a6c096ae33434ad4b1e2686b97efe/planet.mbtiles
```
***Dans cet exemple, le conteneur va tenter de télécharger une map sur le serveur de répartition avant de lancer le serveur de tuiles***
# Informations sur le fonctionnement
Un serveur de tuiles peut donc télécharger une carte au format `.mbtiles` via un serveur commun grâce à l'utilisation de `MAPS_TOKEN`. Ce paramètre doit rester rester secret et éviter d'utiliser des caractères alphanumériques uniquement.
Si possible utiliser pour `MAPS_TOKEN` un hash sha256.
Le serveur ouvrira alors les ports `81` et `443` (dans l'exemple) et proposera une url de téléchargement sur `https://maps.domain.tld/0bf68e49728c59e806807d4bf9082b53f94a6c096ae33434ad4b1e2686b97efe/<fichier>.mbtiles`.
Il repartira la charge sur mapsft1.domain.tld:81, mapsft2.domain.tld et mapsft3.domain.tld.
Le paramètre `URL_DOWNLOADMAP` peut être utiliser pour spécifier à un noeud de se synchnoniser avec une autre carte. (téléchargement)
La carte téléchargée par chaque noeud est d'abord comparée en taille avec celle présente sur le disque. Si la carte est absente, ou différente en taille, un nouveau téléchargement se lance avant de rendre disponible le service de tuiles.
Les cartes téléchargées sont stockées dans le répertoire `data/`. Pour réinitialiser les cartes, il faut effacer le contenu de ce répertoire.
***Fonctionnement***
> Si SSL est à false, seul le port HTTP_PORT répondra au web.
> Si SSL est à true, alors les fichiers de certificat et clef privés devront être stockés dans loadbalancer/etc/nginx/ssl sous les noms respectifs: `fullchain.pem` et `privkey.pem`.
Pour la persistence des données il est souhaitable de partager les répertoires suivants avec l'host :
- /data
- /etc/nginx/conf.d/.templates
- /etc/nginx/ssl
- /etc/letsencrypt
- /var/cache/munin/www
- /var/cache/nginx
- /var/log/nginx
- /var/lib/munin
# Annexes
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment