docker-compose.yml

Section services

section image

    image: registry.gitlab-forge.din.developpement-durable.gouv.fr/snum/detn/genorg/nginx:#TAG#
    image: _REGISTRY_/#STACK#-nginx:#TAG#
Mots clés
  • #TAG#: est remplacé par la valeur de version (COMMIT_TAG sans le P_, le cas échéant), évite de modifier le docker-compose à chaque déploiement
  • _REGISTRY_: est remplacé la registrie du projet
  • #STACK#: est remplacé par la valeur de la stack associée au projet

section environnement

    environment:
    - http_proxy=${HTTP_PROXY:-}
    - https_proxy=${HTTPS_PROXY:-}
    - no_proxy=${NO_PROXY:-}
    - var1={data1}
    - MARIADB_DATABASE=${DB_DATABASE:-glpi}
    - S3_ACCESS=XXX
    - S3_SECRET=XXX
    - variable=valeur
Remplacements
  • http_proxy/https_proxy/no_proxy: sont remplacés sans passage de valeur dans les post-data lors du wget du .gitlab-cy.yaml avec les valeurs du datacenter
  • var1={data1}: est remplacée par la variable data1 passée en post-data --post-date=data1=${VARX} et stockée dans la variable CI/CD VARX, echec du déploiement si non présente
  • MARIADB_DATABASE=${DB_DATABASE:-glpi}: est remplacée par la variable DB_DATABASE passée en post-data --post-date=DB_DATABASE=${VARX} et stockée dans la variable CI/CD VARX, remplacement si non présente par la valeur par défaut glpi
  • S3_ACCESS/S3_SECRET: si présent, remplacé par les ID et secret pour faire du S3 avec la bucket de la stack sur B3 (litestream pour réplication de base sqlite)
  • variable=valeur: aucune substitution

section ports

ports:
    - "#PORT#:80"
    - "#WEB#:8080"
Consignes
  • Seuls les ports en 80 sont publiés au travers de traefik, #PORT# sera remplacé par la valeur déjà affectée par ConteneursFaciles lors d'un précédent déploiement,
  • #WEB# permet de publier des services HTTP exposés dans le conteneur sur un autre port que le 80, ici le 8080, mais peux être différent.
  • tout autre service que du HTTP ne peut être atteint, les autres ports que le 80 et 443 sont interdits sur la zone net-ingress du Datacenter.
Explications
  • Traefik: route le trafic HTTP/HTTPS vers les bons services en fonction des règles de routage définies. Il assure le chiffrement TLS/SSL pour sécuriser les communications, génére les certificats RMIN pour le HTTPS, équilibre la charge,
  • #PORT#:80 permet au service d'être accessible via l'url #Nom_de_la_stack#.gsil-preprod.r2.eco4.cloud.e2.rie.gouv.fr pour la Preprod, sur le domaine #Nom_de_la_stack#.gsil.r2.eco4.cloud.e2.rie.gouv.fr pour la Prod.
  • #WEB#:80 permet au service d'être accessible via l'url #Nom_de_la_stack#.gsil-preprod.r2.eco4.cloud.e2.rie.gouv.fr/path pour la Preprod, sur le domaine #Nom_de_la_stack#.gsil.r2.eco4.cloud.e2.rie.gouv.fr/path pour la Prod, /path étant défini dans Caas-Console dans la définition de la pile de service.

section volumes

    - type: bind
      source: /mnt/glusterfs/#STACK#-db-mysql
      target: /var/lib/mysql
Consignes
  • type OBLIGATOIREMENT à bind, afin d'être monté sur un volume Gluster, accessible sur tous les noeuds docker de ConteneursFacile
  • source: le dirname est forcé, la basename constitué de 3 parties, le nom de la pile (stack), le nom du service ou MUTUEL si commun à plusieurs services, le basename de target
  • /mnt/glusterfs mot clé obligé, remplacé par le volume ayant du disponible pour l'exécution du service.

section network

Information
  • la section est remplacé par un réseau externe commun, traefik-large, pour le backend et frontend
  • cela permet l'accès au base de données via adminer ou nocodb, exposés sur le réseau du ministère

section labels

Information
  • la section est complétée par les étiquettes traefik pour un prise en charge à la découverte
  • seuls, les services avec un port 80 ou identifié par #WEB# ont des étiquettes traefik

section deploy

    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: 
        - node.hostname == _AZ_
        - node.labels.az
Information
  • la section est écrasée, il est cependant possible de demander pour chacun de vos services à être placé:
  • node.hostname: sur un même noeud docker
  • node.labels.az: dans la même zone de disponibilité du datacenter (alimentation électrique/réseaux, AZ = Avibility Zone) Le but est d'améliorer les latences durant les flux réseau entre services en simplifiant les cheminements, avec une perte de résilience ou de continuité d'activité, malheureusement.

Fichier résultat

Il est bien sûr très différent de votre fichier d'origine. Vous pouvez y accèder via l'écran "Mes Projet", il est disponible avec les logs du lancement de votre pile de services (stack). C'est réservé au profil "utilisateur avancé"


Paramètres d’affichage

Choisissez un thème pour personnaliser l’apparence du site.