technique:infrastructure:archi

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
technique:infrastructure:archi [2020/02/14 21:34] qduchemitechnique:infrastructure:archi [2020/09/04 15:03] (Version actuelle) – supprimée qduchemi
Ligne 1: Ligne 1:
-======Présentation de l'architecture des services (Docker, Traefik)====== 
-=====Haute disponibilité===== 
-Dans le but d'avoir une architecture avec une haute disponibilité, nous avons décidé d'avoir deux machines virtuelles hébergeant les services. Chaque machine se trouve sur une machine physique différente. Les services sont répartis entre ces deux machines virtuelles. Les backups réguliers permettent une reprise, en cas de panne d'une machine physique, sans perte de données. 
- 
-===== Docker ===== 
-Pour héberger les services, nous utilisons des conteneurs Docker que l'on manipule avec Docker Compose. Pour plus d'info sur l'installation de Docker voir [[https://docs.docker.com/install/linux/docker-ce/debian/|cette partie de la documentation officielle]], et pour des explications sur l'utilisation de Docker Compose voir [[https://docs.docker.com/compose/|cette autre partie de la documentation officielle]]. 
-Notre infrastructure étant composé de 2 VM, chaque VM utilise un fichier ''docker-compose.yml'' pour définir les services qui sont lancés. 
- 
- 
-===== 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://traefik.io/|Traefik]], c'est son nom écoute les actions réalisées sur le démon Docker. Lorsqu'il détecte un conteneur lancé avec certaines variables d'environnement, il génère une configuration pour rediriger et répartir la charge vers l'un ou l'autre des conteneurs. 
- 
-Pour le lancer, on défini le le conteneur suivant: 
-<code yaml> 
-  traefik: 
-    image: traefik:latest 
-    container_name: traefik 
-    ports: 
-      - "80:80" 
-      - "443:443" 
-    volumes: 
-      - /var/run/docker.sock:/var/run/docker.sock 
-      - /DATA/docker/traefik/traefik.toml:/traefik.toml 
-      - /DATA/docker/traefik/certs:/certs 
-    restart: always 
-</code> 
- 
-Ensuite, il suffit d'ajouter les étiquettes suivantes aux conteneurs pour générer la configuration adéquate 
-<code yaml> 
---label traefik.port=80  
---label traefik.enable=true  
---label traefik.frontend.rule=Host:team.picasoft.net  
-</code> 
- 
-''traefik.port'' correspond au port d'écoute de notre service dans le conteneur. 
- 
-''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'état des services et différentes statistiques, mais nous ne l'avons pas exposé depuis l'extérieur. 
- 
-Traefik peut aussi générer automatiquement une configuration [[https://letsencrypt.org/|Let's Encrypt]]. 
- 
-Pour cela, il faut utiliser le fichier de configuration suivant:  
-<code yaml> 
-logLevel = "WARN" 
-debug = false 
-defaultEntryPoints = ["http", "https"] 
- 
-[docker] 
- endpoint = "unix:///var/run/docker.sock" 
- watch = true 
- exposedbydefault = false 
- 
-[entryPoints] 
- [entryPoints.http] 
-  address = ":80" 
-  compress = false 
-  [entryPoints.http.redirect] 
-   entryPoint = "https" 
- [entryPoints.https] 
-  address = ":443" 
-  compress = false 
-  [entryPoints.https.tls] 
-   # Accept only TLS1.1 and 1.2 
-   MinVersion = "VersionTLS11" 
-   # Accept all ciphers excepting TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA and TLS_RSA_WITH_3DES_EDE_CBC_SHA 
-   # CipherSuites = ["TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA","TLS_RSA_WITH_AES_128_GCM_SHA256","TLS_RSA_WITH_AES_256_GCM_SHA384","TLS_RSA_WITH_AES_128_CBC_SHA","TLS_RSA_WITH_AES_256_CBC_SHA" ] 
-   # Keep only ECDHE : 
-   CipherSuites = ["TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA","TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" ] 
- 
-[acme] 
- email = "picasoft@assos.utc.fr" 
- storage = "/certs/acme.json" 
- entryPoint = "https" 
- onHostRule = true 
- [acme.httpChallenge] 
-  entryPoint = "http" 
- 
-[web] 
- address = ":8080" 
-</code> 
- 
-==== 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. Docker Compose permet de faire en sorte que, une fois lancés, les conteneurs soient capables de résoudre leurs IP privées via des entrées DNS basées sur leur nom. Par exemple définissons un service Etherpad avec sa base de données : 
-<code yaml> 
-  etherpad: 
-    image: registry.picasoft.net:5000/pica-etherpad:2.2 
-    container_name: etherpad-app 
-    links: 
-      - etherpad-db:mysql 
-    environment: 
-      - ETHERPAD_ADMIN_PASSWORD=passwordadmin 
-      - ETHERPAD_DB_NAME=etherpad-lite 
-      - ETHERPAD_DB_USER=etherpad 
-      - ETHERPAD_DB_PASSWORD=bddetherpadpassword 
-      - MYSQL_PORT_3306_TCP_ADDR=mysql 
-    labels: 
-      - "traefik.frontend.rule=Host:pad.picasoft.net" 
-      - "traefik.port=80" 
-      - "traefik.enable=true" 
-    restart: always 
- 
-  etherpad-db: 
-    image: mysql:latest 
-    container_name: etherpad-db 
-    volumes: 
-      - /DATA/pica01/etherpad/etherpad-db/data:/var/lib/mysql 
-    environment: 
-      - MYSQL_ROOT_PASSWORD=mysqlrootpassword 
-      - MYSQL_USER=etherpad 
-      - MYSQL_PASSWORD=bddetherpadpassword 
-      - MYSQL_DATABASE=etherpad-lite 
-    restart: always 
-</code> 
- 
-Ici l'instruction ''links'' du service ''etherpad'' permet au service de contacter le conteneur de ''etherpad-db'' via le hostname ''mysql'' 
  
  • technique/infrastructure/archi.1581712449.txt.gz
  • de qduchemi