diff --git a/documentation/05.livraison-continue.md b/documentation/05.livraison-continue.md index ef402d4a61b7d8478db7b4d8f8a35bb4fb825936..4795800669737101715b7a017021d9f453d88f49 100644 --- a/documentation/05.livraison-continue.md +++ b/documentation/05.livraison-continue.md @@ -317,10 +317,106 @@ PORTAL_VPORT=80 ``` -J'ai créé pour la pile applicative un fichier docker-compose.yml de base reprenant les directives et options communes à tous les environnements. +J'ai créé pour la pile applicative un fichier docker-compose.yml de base reprenant les directives et options communes à tous les environnements. + +```yaml +version: '3.7' +services: + webserver: + image: nginx:latest + depends_on: + - "php-fpm" + command: ["/bin/wait-for-it.sh", "php-fpm:9000", "--", "nginx", "-g", "daemon off;"] + env_file: + - docker/nginx/nginx.env + - .env + working_dir: /var/www/portail-next + volumes: + - ./var/www/portail-next:/var/www/portail-next/ + - ./docker/wait-for-it.sh:/bin/wait-for-it.sh + - ./docker/nginx/conf.d:/etc/nginx/conf.d + - ./docker/nginx/sites:/etc/nginx/sites-enabled + - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf + php-cli: + image: private-registry:5000/drupal_phpfpm81:latest + build: + context: ./docker/php-fpm + dockerfile: dockerfile + cache_from: + - private-registry:5000/drupal_phpfpm81:latest + env_file: + - docker/php-fpm/php-fpm.env + - .env + working_dir: /var/www/portail-next + volumes: + - ./docker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini + - ./var/www/portail-next:/var/www/portail-next/ + - ./bin:/var/www/portail-next/bin + command: ["tail", "-f", "/dev/null"] + php-fpm: + image: private-registry:5000/drupal_phpfpm81:latest + build: + context: ./docker/php-fpm + dockerfile: dockerfile + cache_from: + - private-registry:5000/drupal_phpfpm81:latest + env_file: + - docker/php-fpm/php-fpm.env + - .env + working_dir: /var/www/portail-next + volumes: + - ./docker/php-fpm/php-ini-overrides.ini:/etc/php/8.1/fpm/conf.d/99-overrides.ini + - ./var/www/portail-next:/var/www/portail-next/ + - ./bin:/var/www/portail-next/bin + +``` Ensuite, pour chaque valeur d'environnement spécifique SWARM_ENV et chaque topologie SWARM_TOPO, j'ai fourni un fichier `environments/<SWARM_ENV>/docker-compose.<SWARM_TOPO>.yml` contenant les directives et options spécifiques à chaque environnement. +```yaml +# environments/prod/docker-compose.multi.yml +version: '3.7' +services: + webserver: + deploy: + mode: global + placement: + constraints: + - node.role!=manager + networks: + - portail_ntwrk + - proxy_public + volumes: + - /portail-data:/var/www/portail-next/web/sites/default/files/private + php-cli: + deploy: + replicas: 1 + placement: + constraints: + - node.role==manager + networks: + - portail_ntwrk + volumes: + - /portail-data:/var/www/portail-next/web/sites/default/files/private + php-fpm: + deploy: + mode: global + placement: + constraints: + - node.role!=manager + networks: + - portail_ntwrk + volumes: + - /portail-data:/var/www/portail-next/web/sites/default/files/private +networks: + portail_ntwrk: + driver: overlay + attachable: true + proxy_public: + name: proxy_public + external: true +``` + Enfin, j'ai créé une commande Bash (mais cela aurait pu être fait avec une commande ansible également) permettant de créer les piles applicatives, les démarrer et les arrêter en se basant sur les variables d'environnement définies pour sélectionner les bons fichiers de définition de pile. En pratique, la personne devant déployer l'application n'a plus qu'à définir les variables correspondant à l'environnement sur lequel il ou elle effectue le déploiement dans un fichier nommé `.env` et situé à la racine du répertoire de son instance du portail. Il lui suffit ensuite d'exécuter le script permettant la création de la pile et de lancer celle-ci.