SlideShare una empresa de Scribd logo
1 de 47
Descargar para leer sin conexión
Infrastructure as code Drupal
Christophe Villeneuve
@hellosct1
@hellosct1@mamot.fr
Meetup Programmez #24 – le 5 Avril 2022
Atos open source - afup – lemug.fr – mariadb – drupal – mozilla - firefox – lemugfr - sumo – webextensions – VR – AR – XR - Cause commune 93.1 FM - TechSpeaker - Lizard - eyrolles – editions eni – programmez – linux pratique – webriver – elephpant - CommonVoice – Sécurité -
Cybersécurité
Christophe Villeneuve
●
Consultant Open Source
●
Dresseur animaux
@hellosct1 – Programmez #24 -
Aujourd’hui
●
IaC.. Qu’est ce ?
●
IaC et Drupal
●
Iac Drupal Contenu
●
IaC.. Qu’est ce ?
●
IaC et Drupal
●
Iac Drupal Contenu
@hellosct1 – Programmez #24 -
IaC : Qu’est ce ? (1/2)
●
IaC = Infrastructure as code (IaC)
– Infrastructure programmable (en FR)
●
Ensemble de mécanismes permettant de gérer
– Par des fichiers descripteurs
– Des scripts (code informatique)
– Une infrastructure (informatique) virtuelle
●
S'inscrit dans la mouvance plus générale du DevOps
– Objectif d'unifier
le développement logiciel et l'administration système
@hellosct1 – Programmez #24 -
IaC : Qu’est ce ? (2/2)
●
Constitue une réponse aux besoins des entreprises
– En termes de mise à l'échelle des applications axée
●
Automatisation et simplification
de l'infrastructure de projets informatiques
●
Permettre au(x) développeur(s)
– de gérer l'infrastructure avec du code
– souvent avec des fichiers de configurations ou de scripts
@hellosct1 – Programmez #24 -
Couche basse
●
Couche basse du système d'information
– comme le serveur, le réseau ou le stockage
●
d'écrire avec du code la configuration voulu avec du code
●
Les outils IaC vont automatisés
– provisionning
– configuration
– deploiement
@hellosct1 – Programmez #24 -
Outils IaC
@hellosct1 – Programmez #24 -
Outils ?
●
Instancé 1 ou plusieurs VM
●
Les configurer
●
Installer
– une Base de données
– un serveur web
– un serveur d'application
●
Les isolés au niveau réseau
●
Réaliser des comptes administrateurs, utilisateurs, de services
●
Mettre en place un load balancer pour la répartition de charge
●
Pousser des certificats...
@hellosct1 – Programmez #24 -
Exemple : Ansible
- hosts: localhost
gather_facts: False
vars_files:
- credentials.yml
tasks:
- name: Provision EC2 Instance
ec2:
aws_access_key: "{{aws_access_key}}"
aws_secret_key: "{{aws_secret_key}}"
key_name: web_server_test_key
group: test
instance_type: t3.small
image: "ami-0123456"
wait: true
count: 1
region: us-west-1
instance_tags:
Name: Web_Server
register: ec2
@hellosct1 – Programmez #24 -
Mais… Pour faire simple
●
Déployer et détruire
– à la volé les ressources dans le cloud
●
Redéployer
– cette même infrastructure suivant le besoin
●
Fournir
– des environnements stables à grandes échelles
●
Gagner
– en disponibilité et flexibilité
@hellosct1 – Programmez #24 -
Plusieurs types d’IaC
●
Impératif
– Ressources (instances, réseaux, etc.) sont déclarées
●
par une liste formelles d'instructions,
●
suivies dans un ordre précis,
●
pour obtenir le résultat attendu.
●
Fonctionnel
– Ressources sont déclarées de manière
●
que la configuration finale de celles-ci soit celles attendues.
●
L'ordre en lui-même n'a pas d'importance majeure.
●
Basé sur l'environnement
– Ressources sont déclarées de manière que
●
leur configuration finale et leur état
– soit en cohérence avec le reste de l'environnement qui l'entoure.
●
Il s'agit de la version la plus élaborée et celle vers laquelle
@hellosct1 – Programmez #24 -
En résumé
●
Infrastructure as code :
– Définissez toute votre infrastructure dans des fichiers,
jusqu'au niveau de l'interface réseau.
– Déploiement continu
●
Faire des déploiements de production une corvée.
Petits, fréquents, automatiques.
●
IaC.. Qu’est ce ?
●
IaC et Drupal
●
Iac Drupal Contenu
@hellosct1 – Programmez #24 -
Drupal : Qu’est ce...
●
CMS/F Content Management System / Framework
– Administrer vos contenus sans toucher au code 
●
Open Source
– Gratuit, +30000 développeurs, +25000 modules, millions de pages de documentation
●
Flexible et modulaire
– Utilisation des modules de contribution et développement à façon
●
Moderne
– multilingue, responsive, RGAA, rapide, webservice, headless, caches
●
Performant
– Coeur léger, robuste, permet des développements poussés sans l’effet usine à gaz
– Cache natif pouvant être couplé à des solutions externes, Varnish, APC, Memcached,
MongoDB
●
Abstraction
– Approche entités plutôt que pages (types de contenu, taxonomie)
●
API
@hellosct1 – Programmez #24 -
Drupal : Roadmap
@hellosct1 – Programmez #24 -
Drupal : Roadmap Dépendances
@hellosct1 – Programmez #24 -
TOP 50 des sites français
@hellosct1 – Programmez #24 -
Déploiement Workflow : Principe
@hellosct1 – Programmez #24 -
Workflow : Déroulement
name: Build, push, and verify image
run: |
echo ${{ secrets.PACKAGES_TOKEN }} | docker login docker.pkg.github.com -u juampynr --password-stdin
docker build --tag docker.pkg.github.com/juampynr/drupal8-do/app:${GITHUB_SHA} .
docker push docker.pkg.github.com/juampynr/drupal8-do/app:${GITHUB_SHA}
docker pull docker.pkg.github.com/juampynr/drupal8-do/app:${GITHUB_SHA}
@hellosct1 – Programmez #24 -
Workflow complet
@hellosct1 – Programmez #24 -
Automatiser les tâches Drupal
●
Automatiser toutes ces tâches
– Flux de travail du déploiement de Drupal
– Appliquer les techniques de codage éprouvées à la façon dont
vous configurez et organisez votre infrastructure ?
●
Maintenant, pensez à la commodité de disposer d'un outil
qui transformerait les API en fichiers de configuration
déclaratifs que votre équipe pourrait facilement utiliser :
– Partager
– Modifier
– Version
– Revoir
@hellosct1 – Programmez #24 -
Automatiser les tâches dans votre flux de travail
●
Contraintes :
– "jongler" avec plusieurs environnements
– Synchroniser les changements de code ou de configuration
●
Obligations
– Appliquer une modification spécifique sur l'environnement
de développement
– l'exporter vers un fichier à stocker dans le contrôle de version
– Valider les changements de code/configuration dans le
contrôle de version
– Synchroniser ce fichier avec le serveur live
@hellosct1 – Programmez #24 -
Implémentation de l'IaC dans Drupal
●
Automatiser votre processus de déploiement
- Comment tiré parti de
l'infrastructure as code
- pour automatiser mon flux de
déploiement Drupal ?
@hellosct1 – Programmez #24 -
Déploiement (playbooks ansible)
●
Les étapes :
– Mise à jour de la base de données à l'aide de Drush
– Mise en place du système.
●
La liste des tâches de "mise en place" comprendrait :
●
la création d'un répertoire pour la persistance des fichiers de la base de
données
– pour stocker les sauvegardes des fichiers
– pour le stockage des sauvegardes de la base de données
●
Alors que (certaines) des tâches axées sur la mise en place et le déploiement
seraient les suivantes :
– cloner le code correct
– importation de la configuration à partir de fichiers
– vider le cache
– création du fichier .env
@hellosct1 – Programmez #24 -
Playbook ansible (1/2)
---
- hosts: haproxy
become: true
roles:
- role: maintenance_haproxy
vars:
maintenance: true
Site1 : true
Site2 : false
- hosts: drupal
become: true
roles:
- role: install_site1
- hosts: varnish
become: true
roles:
- role: reload_varnish
- hosts: drupal
become: true
roles:
- remove_livraison
- hosts: haproxy
become: true
roles:
- role: maintenance_haproxy
vars:
maintenance: false
site1: true
site2: false
@hellosct1 – Programmez #24 -
Lancer le script
ansible-playbook -i inventory/$1 install_site1.yml --extra-vars version=$2
@hellosct1 – Programmez #24 -
En résumé
●
Automatisation consiste à documenter et à disposer d'un script pour chaque
étape
1 - La configuration du système, comme la création de répertoires de
sauvegarde de la base de données.
2 - Exécuter les mises à jour de la base de données via Drush
●
Il est important de sécuriser vos serveurs avant le déploiement de
l'application.
●
Ansible aide à stocker les informations sensibles de manière chiffrée,
– Les identifiants à la base de données
– la paire de clés SSH
– Informations d'identification de l'utilisateur du serveur.
●
Cette configuration vous permet de construire facilement
– des répliques de production ou un environnement de non-production.
●
IaC.. Qu’est ce ?
●
IaC et Drupal
●
Iac Drupal Contenu
@hellosct1 – Programmez #24 -
Drupal contenu (1/
●
Type de contenu
@hellosct1 – Programmez #24 -
Drupal contenu (2/
●
Contenu
@hellosct1 – Programmez #24 -
Drupal contenu (3/
●
Vue (views)
@hellosct1 – Programmez #24 -
Déployé automatiquement !!!
●
Type de contenu
●
View
●
Entity
●
…
●
BDD : Behat
Drush
Module
- Deploy
- Deploy Content
-
@hellosct1 – Programmez #24 -
Modules !!!
●
Deploy
– Contenu
– D8 & (partiellement D9)
●
https://www.drupal.org/project/deploy
●
Content Sync Module
– Contenu
– D8 & D9
●
https://www.drupal.org/project/content_sync
●
Entity share
– D8 & D9
– Répond à une certaine attente (type de champs)
– https://www.drupal.org/project/entity_share
@hellosct1 – Programmez #24 -
Mobule : Default Content Deploy
https://www.drupal.org/project/default_content_deploy
@hellosct1 – Programmez #24 -
Utilisations (1/4)
●
default-content-deploy:export (dcde)
– Exporte une seule entité ou un groupe d'entités
●
default-content-deploy:export-with-references (dcder)
– Exporte une seule entité avec des références
●
default-content-deploy:export-site (dcdes)
– Exporte le contenu d'un site entier
@hellosct1 – Programmez #24 -
Utilisations (2/4)
●
default-content-deploy:export-aliases (dcdea)
– Exporte les alias d'url du site
●
default-content-deploy:import (dcdi)
– Importe tout le contenu défini dans un répertoire de contenu
●
default-content-deploy:import-aliases (dcdia)
– Importe les alias d'url de site
@hellosct1 – Programmez #24 -
Utilisations (3/4)
●
default-content-deploy:uuid-info (dcd-uuid-info)
– Obtenir le site système actuel, les UUIDs des administrateurs
et des anonymes, le nom de l'administrateur
●
default-content-deploy:entity-list (dcd-entity-list)
– Liste les types d'entités de contenu actuels
●
default-content-deploy:import (dcdi)
– Importe tout le contenu défini dans un répertoire de contenu
@hellosct1 – Programmez #24 -
Utilisations (4/4)
●
default-content-deploy:import-aliases (dcdia)
– Importe les alias d'url de site
●
default-content-deploy:uuid-info (dcd-uuid-info)
– Obtenir le site système actuel, les UUIDs des administrateurs
et des anonymes, le nom de l'administrateur
●
default-content-deploy:entity-list (dcd-entity-list)
– Liste les types d'entités de contenu actuels
@hellosct1 – Programmez #24 -
Importation
●
L'entité importée est déterminée par son UUID
– Nouvelle ou mise à jour
●
L'ID d'une entité n'est pas conservé
– Changement ID pour éviter les conflits.
●
Les références par l'ID de l'entité seront corrigées
pendant l'importation sur la base des UUID.
●
L'entité existante n'est mise à jour
que si l'entité importée est plus récente.
●
L'entité importée dont l'heure est identique ou antérieure
à celle de l'entité existante actuelle est ignorée.
Ce comportement peut être modifié par le paramètre --force-update
@hellosct1 – Programmez #24 -
Exemples
●
drush dcde node
– Export all nodes.
●
drush dcde node --folder='../content'
– Export all nodes from the specified folder.
●
drush dcde node --bundle=page
– Export all nodes with bundle (content type) page.
●
drush dcde node --bundle=page,article --entity_id=2,3,4
– Export all nodes with bundle page or article plus nodes with entity id 2, 3 and 4.
●
drush dcde node --bundle=page,article --skip_entities=5,7
– Export all nodes with bundle page or article
and skip nodes with entity id 5 and 7
●
drush dcde node –skip_entities=5,7
– Export all nodes and skip nodes with entity id 5 and 7
@hellosct1 – Programmez #24 -
Export node
@hellosct1 – Programmez #24 -
Export UI (1/
@hellosct1 – Programmez #24 -
Export UI (2/
@hellosct1 – Programmez #24 -
Import
drush dcim <content module name>
@hellosct1 – Programmez #24 -
En résumé
●
Avec les modules et l’API
– Le déploiement de contenu est facilité
@hellosct1 – Programmez #24 -
Merci
Christophe Villeneuve
@hellosct1
@hellosct1@mamot.fr

Más contenido relacionado

La actualidad más candente

How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with Airflow
PyData
 

La actualidad más candente (20)

Building infrastructure as code using Terraform - DevOps Krakow
Building infrastructure as code using Terraform - DevOps KrakowBuilding infrastructure as code using Terraform - DevOps Krakow
Building infrastructure as code using Terraform - DevOps Krakow
 
Réplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden GateRéplication de base de données oracle avec Golden Gate
Réplication de base de données oracle avec Golden Gate
 
Scylla on Kubernetes: Introducing the Scylla Operator
Scylla on Kubernetes: Introducing the Scylla OperatorScylla on Kubernetes: Introducing the Scylla Operator
Scylla on Kubernetes: Introducing the Scylla Operator
 
Introduction To Terraform
Introduction To TerraformIntroduction To Terraform
Introduction To Terraform
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with Airflow
 
What we've learned from running a PostgreSQL managed service on Kubernetes
What we've learned from running a PostgreSQL managed service on KubernetesWhat we've learned from running a PostgreSQL managed service on Kubernetes
What we've learned from running a PostgreSQL managed service on Kubernetes
 
Spark autotuning talk final
Spark autotuning talk finalSpark autotuning talk final
Spark autotuning talk final
 
Accelerating with Ansible
Accelerating with AnsibleAccelerating with Ansible
Accelerating with Ansible
 
Managing Terraform Module Versioning and Dependencies
Managing Terraform Module Versioning and Dependencies Managing Terraform Module Versioning and Dependencies
Managing Terraform Module Versioning and Dependencies
 
Troubleshooting Tips and Tricks for Database 19c - EMEA Tour Oct 2019
Troubleshooting Tips and Tricks for Database 19c - EMEA Tour  Oct 2019Troubleshooting Tips and Tricks for Database 19c - EMEA Tour  Oct 2019
Troubleshooting Tips and Tricks for Database 19c - EMEA Tour Oct 2019
 
rpm package 를 이용한 MySQL 설치자동화
rpm package 를 이용한 MySQL 설치자동화rpm package 를 이용한 MySQL 설치자동화
rpm package 를 이용한 MySQL 설치자동화
 
Terraform: An Overview & Introduction
Terraform: An Overview & IntroductionTerraform: An Overview & Introduction
Terraform: An Overview & Introduction
 
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...
 
Terraform 101: What's infrastructure as code?
Terraform 101: What's infrastructure as code?Terraform 101: What's infrastructure as code?
Terraform 101: What's infrastructure as code?
 
Exadata
ExadataExadata
Exadata
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Terraform
TerraformTerraform
Terraform
 
How to Secure Your Scylla Deployment: Authorization, Encryption, LDAP Authent...
How to Secure Your Scylla Deployment: Authorization, Encryption, LDAP Authent...How to Secure Your Scylla Deployment: Authorization, Encryption, LDAP Authent...
How to Secure Your Scylla Deployment: Authorization, Encryption, LDAP Authent...
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Airflow presentation
Airflow presentationAirflow presentation
Airflow presentation
 

Similar a Infrastructure as code drupal

Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
boulonvert
 

Similar a Infrastructure as code drupal (20)

Rex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantesRex docker en production meeutp-docker-nantes
Rex docker en production meeutp-docker-nantes
 
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
Sébastien Coutu: Copy this Meetup Devops - microservices - infrastructure imm...
 
Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019Construire un data lake managé - GDG Paris - Juin 2019
Construire un data lake managé - GDG Paris - Juin 2019
 
REX Ansible
REX AnsibleREX Ansible
REX Ansible
 
Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)Drupal7 - Bonnes Pratiques (Partie 1)
Drupal7 - Bonnes Pratiques (Partie 1)
 
Cours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdfCours Devops Sparks.pptx.pdf
Cours Devops Sparks.pptx.pdf
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !Javascript as a first programming language : votre IC prête pour la révolution !
Javascript as a first programming language : votre IC prête pour la révolution !
 
Arte utilise Acquia Cloud pour héberger ses plateformes web
Arte utilise Acquia Cloud pour héberger ses plateformes webArte utilise Acquia Cloud pour héberger ses plateformes web
Arte utilise Acquia Cloud pour héberger ses plateformes web
 
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
Gestion de projet Drupal : quelques outils indispensables - OWS - Drupalcamp ...
 
Rmll2010 admin sys-panelgzw-fr
Rmll2010 admin sys-panelgzw-frRmll2010 admin sys-panelgzw-fr
Rmll2010 admin sys-panelgzw-fr
 
Scub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libreScub Foundation, usine logicielle Java libre
Scub Foundation, usine logicielle Java libre
 
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
Introduction à Docker et utilisation en production /Digital apéro Besançon [1...
 
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
Checklist pour concevoir une application dans le cloud.10 conseils à l'attent...
 
Catalogue PFE 2019
Catalogue PFE 2019Catalogue PFE 2019
Catalogue PFE 2019
 
Deployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDaysDeployer PHP et MariaDB dans Azure - TechDays
Deployer PHP et MariaDB dans Azure - TechDays
 
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans AzureDéployez votre site PHP / MariaDB, simplement et rapidement dans Azure
Déployez votre site PHP / MariaDB, simplement et rapidement dans Azure
 
Acquia et Arte : Drupal Camp Paris 2013
Acquia et Arte : Drupal Camp Paris 2013Acquia et Arte : Drupal Camp Paris 2013
Acquia et Arte : Drupal Camp Paris 2013
 
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
Hug france - Administration Hadoop et retour d’expérience BI avec Impala, lim...
 
Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009Hadoop MapReduce - OSDC FR 2009
Hadoop MapReduce - OSDC FR 2009
 

Más de Christophe Villeneuve

Más de Christophe Villeneuve (20)

MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 
La boîte à outils de développements dans Firefox
La boîte à outils de développements dans FirefoxLa boîte à outils de développements dans Firefox
La boîte à outils de développements dans Firefox
 
pister les pisteurs
pister les pisteurspister les pisteurs
pister les pisteurs
 
controler vos donnees éthiques dans le web
controler vos donnees éthiques dans le webcontroler vos donnees éthiques dans le web
controler vos donnees éthiques dans le web
 
Mariadb une base de données NewSQL
Mariadb une base de données NewSQLMariadb une base de données NewSQL
Mariadb une base de données NewSQL
 
Open Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnanteOpen Source et contribution : Une association gagnante
Open Source et contribution : Une association gagnante
 
Pentest bus pirate
Pentest bus piratePentest bus pirate
Pentest bus pirate
 
Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?Peur de la migration vers l’open source ?
Peur de la migration vers l’open source ?
 
La sécurité applicative par le design
La sécurité applicative par le designLa sécurité applicative par le design
La sécurité applicative par le design
 
Foxfooding semaine 3
Foxfooding semaine 3Foxfooding semaine 3
Foxfooding semaine 3
 
Foxfooding
FoxfoodingFoxfooding
Foxfooding
 
Accessibilite web wcag rgaa
Accessibilite web wcag rgaaAccessibilite web wcag rgaa
Accessibilite web wcag rgaa
 
Mozilla french speaking community activites
Mozilla french speaking community activitesMozilla french speaking community activites
Mozilla french speaking community activites
 
Monitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et MicrosoftMonitoring dynamique : Grafana et Microsoft
Monitoring dynamique : Grafana et Microsoft
 
Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?Etes vous-pret pour php8 ?
Etes vous-pret pour php8 ?
 
Le futur de l'authentification webAuthn
Le futur de l'authentification webAuthnLe futur de l'authentification webAuthn
Le futur de l'authentification webAuthn
 
Send large files with addons
Send large files with addonsSend large files with addons
Send large files with addons
 
Tests d'accessibilite par la pratique
Tests d'accessibilite par la pratiqueTests d'accessibilite par la pratique
Tests d'accessibilite par la pratique
 
Donnez la voix aux machines
Donnez la voix aux machinesDonnez la voix aux machines
Donnez la voix aux machines
 
La réalité mélangée dans vos applications
La réalité mélangée dans vos applicationsLa réalité mélangée dans vos applications
La réalité mélangée dans vos applications
 

Infrastructure as code drupal

  • 1. Infrastructure as code Drupal Christophe Villeneuve @hellosct1 @hellosct1@mamot.fr Meetup Programmez #24 – le 5 Avril 2022
  • 2. Atos open source - afup – lemug.fr – mariadb – drupal – mozilla - firefox – lemugfr - sumo – webextensions – VR – AR – XR - Cause commune 93.1 FM - TechSpeaker - Lizard - eyrolles – editions eni – programmez – linux pratique – webriver – elephpant - CommonVoice – Sécurité - Cybersécurité Christophe Villeneuve ● Consultant Open Source ● Dresseur animaux
  • 3. @hellosct1 – Programmez #24 - Aujourd’hui ● IaC.. Qu’est ce ? ● IaC et Drupal ● Iac Drupal Contenu
  • 4. ● IaC.. Qu’est ce ? ● IaC et Drupal ● Iac Drupal Contenu
  • 5. @hellosct1 – Programmez #24 - IaC : Qu’est ce ? (1/2) ● IaC = Infrastructure as code (IaC) – Infrastructure programmable (en FR) ● Ensemble de mécanismes permettant de gérer – Par des fichiers descripteurs – Des scripts (code informatique) – Une infrastructure (informatique) virtuelle ● S'inscrit dans la mouvance plus générale du DevOps – Objectif d'unifier le développement logiciel et l'administration système
  • 6. @hellosct1 – Programmez #24 - IaC : Qu’est ce ? (2/2) ● Constitue une réponse aux besoins des entreprises – En termes de mise à l'échelle des applications axée ● Automatisation et simplification de l'infrastructure de projets informatiques ● Permettre au(x) développeur(s) – de gérer l'infrastructure avec du code – souvent avec des fichiers de configurations ou de scripts
  • 7. @hellosct1 – Programmez #24 - Couche basse ● Couche basse du système d'information – comme le serveur, le réseau ou le stockage ● d'écrire avec du code la configuration voulu avec du code ● Les outils IaC vont automatisés – provisionning – configuration – deploiement
  • 8. @hellosct1 – Programmez #24 - Outils IaC
  • 9. @hellosct1 – Programmez #24 - Outils ? ● Instancé 1 ou plusieurs VM ● Les configurer ● Installer – une Base de données – un serveur web – un serveur d'application ● Les isolés au niveau réseau ● Réaliser des comptes administrateurs, utilisateurs, de services ● Mettre en place un load balancer pour la répartition de charge ● Pousser des certificats...
  • 10. @hellosct1 – Programmez #24 - Exemple : Ansible - hosts: localhost gather_facts: False vars_files: - credentials.yml tasks: - name: Provision EC2 Instance ec2: aws_access_key: "{{aws_access_key}}" aws_secret_key: "{{aws_secret_key}}" key_name: web_server_test_key group: test instance_type: t3.small image: "ami-0123456" wait: true count: 1 region: us-west-1 instance_tags: Name: Web_Server register: ec2
  • 11. @hellosct1 – Programmez #24 - Mais… Pour faire simple ● Déployer et détruire – à la volé les ressources dans le cloud ● Redéployer – cette même infrastructure suivant le besoin ● Fournir – des environnements stables à grandes échelles ● Gagner – en disponibilité et flexibilité
  • 12. @hellosct1 – Programmez #24 - Plusieurs types d’IaC ● Impératif – Ressources (instances, réseaux, etc.) sont déclarées ● par une liste formelles d'instructions, ● suivies dans un ordre précis, ● pour obtenir le résultat attendu. ● Fonctionnel – Ressources sont déclarées de manière ● que la configuration finale de celles-ci soit celles attendues. ● L'ordre en lui-même n'a pas d'importance majeure. ● Basé sur l'environnement – Ressources sont déclarées de manière que ● leur configuration finale et leur état – soit en cohérence avec le reste de l'environnement qui l'entoure. ● Il s'agit de la version la plus élaborée et celle vers laquelle
  • 13. @hellosct1 – Programmez #24 - En résumé ● Infrastructure as code : – Définissez toute votre infrastructure dans des fichiers, jusqu'au niveau de l'interface réseau. – Déploiement continu ● Faire des déploiements de production une corvée. Petits, fréquents, automatiques.
  • 14. ● IaC.. Qu’est ce ? ● IaC et Drupal ● Iac Drupal Contenu
  • 15. @hellosct1 – Programmez #24 - Drupal : Qu’est ce... ● CMS/F Content Management System / Framework – Administrer vos contenus sans toucher au code  ● Open Source – Gratuit, +30000 développeurs, +25000 modules, millions de pages de documentation ● Flexible et modulaire – Utilisation des modules de contribution et développement à façon ● Moderne – multilingue, responsive, RGAA, rapide, webservice, headless, caches ● Performant – Coeur léger, robuste, permet des développements poussés sans l’effet usine à gaz – Cache natif pouvant être couplé à des solutions externes, Varnish, APC, Memcached, MongoDB ● Abstraction – Approche entités plutôt que pages (types de contenu, taxonomie) ● API
  • 16. @hellosct1 – Programmez #24 - Drupal : Roadmap
  • 17. @hellosct1 – Programmez #24 - Drupal : Roadmap Dépendances
  • 18. @hellosct1 – Programmez #24 - TOP 50 des sites français
  • 19. @hellosct1 – Programmez #24 - Déploiement Workflow : Principe
  • 20. @hellosct1 – Programmez #24 - Workflow : Déroulement name: Build, push, and verify image run: | echo ${{ secrets.PACKAGES_TOKEN }} | docker login docker.pkg.github.com -u juampynr --password-stdin docker build --tag docker.pkg.github.com/juampynr/drupal8-do/app:${GITHUB_SHA} . docker push docker.pkg.github.com/juampynr/drupal8-do/app:${GITHUB_SHA} docker pull docker.pkg.github.com/juampynr/drupal8-do/app:${GITHUB_SHA}
  • 21. @hellosct1 – Programmez #24 - Workflow complet
  • 22. @hellosct1 – Programmez #24 - Automatiser les tâches Drupal ● Automatiser toutes ces tâches – Flux de travail du déploiement de Drupal – Appliquer les techniques de codage éprouvées à la façon dont vous configurez et organisez votre infrastructure ? ● Maintenant, pensez à la commodité de disposer d'un outil qui transformerait les API en fichiers de configuration déclaratifs que votre équipe pourrait facilement utiliser : – Partager – Modifier – Version – Revoir
  • 23. @hellosct1 – Programmez #24 - Automatiser les tâches dans votre flux de travail ● Contraintes : – "jongler" avec plusieurs environnements – Synchroniser les changements de code ou de configuration ● Obligations – Appliquer une modification spécifique sur l'environnement de développement – l'exporter vers un fichier à stocker dans le contrôle de version – Valider les changements de code/configuration dans le contrôle de version – Synchroniser ce fichier avec le serveur live
  • 24. @hellosct1 – Programmez #24 - Implémentation de l'IaC dans Drupal ● Automatiser votre processus de déploiement - Comment tiré parti de l'infrastructure as code - pour automatiser mon flux de déploiement Drupal ?
  • 25. @hellosct1 – Programmez #24 - Déploiement (playbooks ansible) ● Les étapes : – Mise à jour de la base de données à l'aide de Drush – Mise en place du système. ● La liste des tâches de "mise en place" comprendrait : ● la création d'un répertoire pour la persistance des fichiers de la base de données – pour stocker les sauvegardes des fichiers – pour le stockage des sauvegardes de la base de données ● Alors que (certaines) des tâches axées sur la mise en place et le déploiement seraient les suivantes : – cloner le code correct – importation de la configuration à partir de fichiers – vider le cache – création du fichier .env
  • 26. @hellosct1 – Programmez #24 - Playbook ansible (1/2) --- - hosts: haproxy become: true roles: - role: maintenance_haproxy vars: maintenance: true Site1 : true Site2 : false - hosts: drupal become: true roles: - role: install_site1 - hosts: varnish become: true roles: - role: reload_varnish - hosts: drupal become: true roles: - remove_livraison - hosts: haproxy become: true roles: - role: maintenance_haproxy vars: maintenance: false site1: true site2: false
  • 27. @hellosct1 – Programmez #24 - Lancer le script ansible-playbook -i inventory/$1 install_site1.yml --extra-vars version=$2
  • 28. @hellosct1 – Programmez #24 - En résumé ● Automatisation consiste à documenter et à disposer d'un script pour chaque étape 1 - La configuration du système, comme la création de répertoires de sauvegarde de la base de données. 2 - Exécuter les mises à jour de la base de données via Drush ● Il est important de sécuriser vos serveurs avant le déploiement de l'application. ● Ansible aide à stocker les informations sensibles de manière chiffrée, – Les identifiants à la base de données – la paire de clés SSH – Informations d'identification de l'utilisateur du serveur. ● Cette configuration vous permet de construire facilement – des répliques de production ou un environnement de non-production.
  • 29. ● IaC.. Qu’est ce ? ● IaC et Drupal ● Iac Drupal Contenu
  • 30. @hellosct1 – Programmez #24 - Drupal contenu (1/ ● Type de contenu
  • 31. @hellosct1 – Programmez #24 - Drupal contenu (2/ ● Contenu
  • 32. @hellosct1 – Programmez #24 - Drupal contenu (3/ ● Vue (views)
  • 33. @hellosct1 – Programmez #24 - Déployé automatiquement !!! ● Type de contenu ● View ● Entity ● … ● BDD : Behat Drush Module - Deploy - Deploy Content -
  • 34. @hellosct1 – Programmez #24 - Modules !!! ● Deploy – Contenu – D8 & (partiellement D9) ● https://www.drupal.org/project/deploy ● Content Sync Module – Contenu – D8 & D9 ● https://www.drupal.org/project/content_sync ● Entity share – D8 & D9 – Répond à une certaine attente (type de champs) – https://www.drupal.org/project/entity_share
  • 35. @hellosct1 – Programmez #24 - Mobule : Default Content Deploy https://www.drupal.org/project/default_content_deploy
  • 36. @hellosct1 – Programmez #24 - Utilisations (1/4) ● default-content-deploy:export (dcde) – Exporte une seule entité ou un groupe d'entités ● default-content-deploy:export-with-references (dcder) – Exporte une seule entité avec des références ● default-content-deploy:export-site (dcdes) – Exporte le contenu d'un site entier
  • 37. @hellosct1 – Programmez #24 - Utilisations (2/4) ● default-content-deploy:export-aliases (dcdea) – Exporte les alias d'url du site ● default-content-deploy:import (dcdi) – Importe tout le contenu défini dans un répertoire de contenu ● default-content-deploy:import-aliases (dcdia) – Importe les alias d'url de site
  • 38. @hellosct1 – Programmez #24 - Utilisations (3/4) ● default-content-deploy:uuid-info (dcd-uuid-info) – Obtenir le site système actuel, les UUIDs des administrateurs et des anonymes, le nom de l'administrateur ● default-content-deploy:entity-list (dcd-entity-list) – Liste les types d'entités de contenu actuels ● default-content-deploy:import (dcdi) – Importe tout le contenu défini dans un répertoire de contenu
  • 39. @hellosct1 – Programmez #24 - Utilisations (4/4) ● default-content-deploy:import-aliases (dcdia) – Importe les alias d'url de site ● default-content-deploy:uuid-info (dcd-uuid-info) – Obtenir le site système actuel, les UUIDs des administrateurs et des anonymes, le nom de l'administrateur ● default-content-deploy:entity-list (dcd-entity-list) – Liste les types d'entités de contenu actuels
  • 40. @hellosct1 – Programmez #24 - Importation ● L'entité importée est déterminée par son UUID – Nouvelle ou mise à jour ● L'ID d'une entité n'est pas conservé – Changement ID pour éviter les conflits. ● Les références par l'ID de l'entité seront corrigées pendant l'importation sur la base des UUID. ● L'entité existante n'est mise à jour que si l'entité importée est plus récente. ● L'entité importée dont l'heure est identique ou antérieure à celle de l'entité existante actuelle est ignorée. Ce comportement peut être modifié par le paramètre --force-update
  • 41. @hellosct1 – Programmez #24 - Exemples ● drush dcde node – Export all nodes. ● drush dcde node --folder='../content' – Export all nodes from the specified folder. ● drush dcde node --bundle=page – Export all nodes with bundle (content type) page. ● drush dcde node --bundle=page,article --entity_id=2,3,4 – Export all nodes with bundle page or article plus nodes with entity id 2, 3 and 4. ● drush dcde node --bundle=page,article --skip_entities=5,7 – Export all nodes with bundle page or article and skip nodes with entity id 5 and 7 ● drush dcde node –skip_entities=5,7 – Export all nodes and skip nodes with entity id 5 and 7
  • 42. @hellosct1 – Programmez #24 - Export node
  • 43. @hellosct1 – Programmez #24 - Export UI (1/
  • 44. @hellosct1 – Programmez #24 - Export UI (2/
  • 45. @hellosct1 – Programmez #24 - Import drush dcim <content module name>
  • 46. @hellosct1 – Programmez #24 - En résumé ● Avec les modules et l’API – Le déploiement de contenu est facilité
  • 47. @hellosct1 – Programmez #24 - Merci Christophe Villeneuve @hellosct1 @hellosct1@mamot.fr