Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
technique:architecture_des_services [2017/05/14 11:39] – kyane | technique:architecture_des_services [Date inconnue] (Version actuelle) – supprimée - modification externe (Date inconnue) 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ======Architecture des services====== | ||
- | =====Haute disponibilité===== | ||
- | Dans le but d' | ||
- | |||
- | ===== Docker ===== | ||
- | Pour héberger les services, nous utilisons des conteneurs Docker que l'on manipulent avec Docker Compose. Pour plus d'info sur l' | ||
- | Notre infrastructure étant composé de 2 VM, chaque VM utilise un fichier '' | ||
- | |||
- | ==== Traefik ==== | ||
- | Sur chaque machine virtuelle tournent plusieurs services. Pour rediriger le flux entrant vers le bon conteneur, nous utilisons un reverse proxy orienté micro service et qui est en mesure de fonctionner avec Docker. [[https:// | ||
- | |||
- | Pour le lancer, on défini le le conteneur suivant: | ||
- | < | ||
- | traefik: | ||
- | image: traefik: | ||
- | command: --web --docker --logLevel=DEBUG --docker.watch | ||
- | container_name: | ||
- | ports: | ||
- | - " | ||
- | - " | ||
- | volumes: | ||
- | - / | ||
- | - / | ||
- | - / | ||
- | restart: always | ||
- | </ | ||
- | |||
- | Ensuite, il suffit d' | ||
- | < | ||
- | --label traefik.port=80 | ||
- | --label traefik.frontend.rule=Host: | ||
- | </ | ||
- | |||
- | Traefik.port correspond au port d' | ||
- | Traefik.frontend.rule correspond au nom de domaine du service exposé. Il faut au préalable avoir créé les entrées DNS pour que cela fonctionne.\\ | ||
- | Traefik va donc être capable de configurer à la volée les différents services sans que l'on ait à écrire le moindre fichier de configuration. Il y a également une interface de configuration que l'on peut atteindre via le port 8080 et qui montre l' | ||
- | Traefik peut aussi générer automatiquement une configuration [[https:// | ||
- | Pour cela, il faut utiliser le fichier de configuration suivant: | ||
- | < | ||
- | logLevel = " | ||
- | debug = false | ||
- | defaultEntryPoints = [" | ||
- | |||
- | [entryPoints] | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | entryPoint = " | ||
- | | ||
- | | ||
- | | ||
- | |||
- | [acme] | ||
- | email = " | ||
- | storageFile = "/ | ||
- | entryPoint = " | ||
- | onDemand = true | ||
- | |||
- | [web] | ||
- | address = ": | ||
- | </ | ||
- | |||
- | ==== Services ==== | ||
- | Une chose à prendre en compte est que les conteneurs sont placés sur un réseau privé qui est partagé entre les différents conteneurs de la machine. Une fois lancés, les conteneurs sont capables de résoudre leurs IP privées via des entrées DNS basées sur leur nom. | ||
- | |||
- | |||
- | En d' | ||
- | |||
- | =====Architecture===== | ||
- | {{: | ||
- | |||
- | Comme je le disais, les services sont donc lancés sur les deux machines virtuelles. Pour rediriger le flux entrant vers le bon conteneur, nous utilisons un reverse proxy orienté micro service et qui est en mesure de fonctionner sous swarm. Traefik, c'est son nom écoute les actions réalisées sur le démon docker. Lorsqu' | ||
- | |||
- | Pour le lancer, on créé le service suivant: | ||
- | < | ||
- | docker service create \ | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | | ||
- | --web | ||
- | </ | ||
- | |||
- | Ensuite, il suffit d' | ||
- | < | ||
- | --label traefik.port=80 | ||
- | --label traefik.frontend.rule=Host: | ||
- | </ | ||
- | |||
- | Traefik.port correspond au port d' | ||
- | Traefik.frontend.rule correspond au nom de domaine du service exposé. Il faut au préalable avoir créé les entrées DNS pour que cela fonctionne.\\ | ||
- | Traefik va donc être capable de configurer à la volée les différents services sans que l'on ait à écrire le moindre fichier de configuration. Il y a également une interface de configuration que l'on peut atteindre via le port 8080 et qui montre l' | ||
- | Traefik peut aussi générer automatiquement une configuration letsencrypt. Pour cela, il faut utiliser le fichier de configuration suivant: | ||
- | < | ||
- | defaultEntryPoints = [" | ||
- | |||
- | [entryPoints] | ||
- | | ||
- | | ||
- | | ||
- | entryPoint = " | ||
- | | ||
- | | ||
- | | ||
- | |||
- | [acme] | ||
- | email = " | ||
- | storageFile = "/ | ||
- | entryPoint = " | ||
- | onDemand = true | ||
- | |||
- | |||
- | [[acme.domains]] | ||
- | main = " | ||
- | |||
- | [web] | ||
- | address = ": | ||
- | </ | ||
- | |||
- | Au premier lancement du conteneur, Traefik va aller générer un certificat SSL auprès de letsencrypt et ensuite rediriger le service en https. | ||
- | |||
- | =====Problème des bases de données===== | ||
- | La plupart des systèmes de base de données ne gèrent pas les accès concurrents au niveau de leurs fichiers. Il faut comprendre par là qu'il n'est pas possible de lancer deux processus mysql qui pointent vers les mêmes fichiers de configuration (/ | ||
- | |||
- | * Mysql pour le service etherpad | ||
- | * PostgreSQL pour le service mattermost\\ | ||
- | |||
- | Des sauvegardes sont réalisées toutes les nuits. Cela nous permet de restaurer l' | ||
- | |||