SlideShare une entreprise Scribd logo
1  sur  29
Télécharger pour lire hors ligne
Environnements de dév
Drupal automatisés avec
LXC et Ansible
Meetup Drupal Lyon, 5 juillet 2016
Qui suis-je ?
Senior Technical Solutions Analyst @Acquia
● Drupaliste depuis 2007
● Membre de la communauté Drupal et communauté lyonnaise depuis 2010
En ligne
● www.drupalfacile.org
● @DrupalFacile
● anavarre.net
● @AurelienNavarre
Première partie
LXC, containers jetables en 3 commandes
Préambule
● Si vous utilisez Windows ou Mac OS, Docker est probablement plus adapté
● Pour tester les containers*, vous pouvez installer Linux dans une machine
virtuelle, même sous Windows ou Mac OS
● Si vous utilisez Linux sur vos serveurs, pensez containers et services isolés,
plutôt qu’une infrastructure monolithique traditionnelle (tout dans une VM)
* containers et non conteneurs. On utilisera ici le terme anglais communément employé
Pourquoi les containers ? Pourquoi LXC ?
● Un ordinateur n’est pas un environnement isolé (et maîtrisé) de travail
● VMware, Parallels, Virtualbox / Vagrant, QEMU ou encore Boxes ne
répondent pas à tous les besoins
● LXC est - idéalement - fait pour des environnements de dév jetables
● LXC est plus bas niveau que Docker
● LXC ne nécessite aucune sur-couche tierce et/ou propriétaire
● LXC prend très peu de place sur votre système
● LXD pour aller plus loin (hyperviseur complet)
Installer LXC
Ubuntu / Debian
$ sudo apt-get install lxc libvirt-bin ebtables dnsmasq
Pour Red Hat / CentOS / Fedora, remplacez apt-get par yum/dnf
Quelle version de LXC utilisez-vous ?
$ sudo lxc-ls --version
1.1.5
Quelques commandes importantes
Les exécutables LXC se trouvent sous /usr/bin
● lxc-create : créer un container
● lxc-ls : lister les containers
● lxc-info : obtenir l’état du container (démarré / arrêté)
● lxc-start : démarrer un container
● lxc-attach : se connecter à un container
● lxc-stop : stopper un container
● lxc-clone : cloner un container
● lxc-destroy : détruire un container
Créer un premier container
Quel template choisir ?
$ ls /usr/share/lxc/templates
lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-ubuntu
(etc.)
Créer un container
$ sudo lxc-create -t debian -n drupal
● -t pour passer le nom d’un template à utiliser
● -n pour personnaliser le nom du container
Quelles interfaces sont disponibles ?
$ ifconfig -s | awk {'print $1'}
Iface lo vethUMI8 virbr0 wlp1s0
$ virsh net-start default si virbr0 n’apparaît pas
Configuration minimaliste du réseau dans /var/lib/lxc/drupal/config
lxc.network.type = veth type de virtualisation réseau
lxc.network.link = virbr0 lien de connexion vers l'hôte
lxc.network.flags = up activer le réseau
Ou mieux, globalement depuis /etc/lxc/default.conf
Configurer le réseau
Démarrer le container
Quel est l’état du container ?
$ sudo lxc-info -n drupal | grep State
State: STOPPED
Démarrer le container
$ sudo lxc-start -n drupal
Confirmer le changement d’état
$ sudo lxc-info -n drupal | grep State
State: RUNNING
Première connexion au container
Changer immédiatement le mot de passe root avant de se connecter
$ sudo chroot /var/lib/lxc/drupal/rootfs passwd
Connexion au container
$ sudo lxc-attach -n drupal
Avec root, créer un utilisateur lxc et l’ajouter dans les sudoers
$ usermod -aG sudo lxc
Pour Red Hat / CentOS / Fedora, taper $ adduser lxc -G wheel
Préparer la connexion SSH au container
Vérifier l’adresse IP attribuée au container
$ hostname -I
192.168.124.125
Utiliser une clé SSH plutôt qu’un mot de passe lors de la prochaine connexion
$ ssh-copy-id lxc@192.168.124.125
lxc@192.168.124.125's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'lxc@192.
168.124.125'"
Tester la connexion SSH au container
$ ssh lxc@192.168.124.125
lxc@192.168.124.125's password:
Last login: Sat Jun 23 12:59:02 2016 from 192.168.124.1
● Le container démarre et se connecte au réseau
● On peut s’y connecter sans mot de passe via SSH
● On a un compte utilisateur autre que root disponible
● Nous sommes désormais prêts pour l’orchestration via Ansible
Le petit plus : LXC Web Panel
La ligne de commande c’est bien, mais une GUI c’est pas mal non plus.
$ wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash
Accès à l’interface via http://localhost:5000 (admin/admin)
Deuxième partie
Ansible, l’orchestration pour tous
Pourquoi l’orchestration ? Pourquoi Ansible ?
● L’orchestration permet de simplifier et d’automatiser toutes les taches
d’administration système pour 1 ou 1000 serveurs à la fois
● Les principaux concurrents d’Ansible sont Puppet et Chef
● Ansible n’installe pas de daemon (une connexion SSH suffit)
● Ansible est simple d’apprentissage (quasi exclusivement du YAML)
● Ansible est Open Source
● Ansible est là pour rester (racheté par Red Hat en 2015)
● Si vous changez de technologie (Vagrant/Virtualbox, LXC, Docker...) pour vos
environnements de dév, vous conservez quand même votre orchestration !
Installer Ansible
Ubuntu / Debian
$ sudo apt-get install ansible python-simplejson
Pour Red Hat / CentOS / Fedora, remplacez apt-get par yum/dnf
Quelle version d’Ansible utilisez-vous ?
$ ansible --version
ansible 1.9.4
Définir les hôtes à orchestrer
Le fichier /etc/ansible/hosts sert à créer des groupes logiques
[lxc]
192.168.124.125
[rackspace]
203.0.113.2
[aws]
203.0.113.10
203.0.113.11
203.0.113.12
Tester une connexion au container via Ansible
On a donc crée un groupe logique LXC dans /etc/ansible/hosts
[lxc]
192.168.124.125
Ce qui permet d’envoyer un ping sur le groupe (tous les hôtes) plutôt que les IPs
$ ansible lxc -m ping -u lxc
192.168.124.125 | success >> {
"changed": false,
"ping": "pong"
}
Le concept de playbook
● Le playbook est à Ansible ce que le livre de cuisine est au cuisinier : un
recueil de recettes pour préparer des environnements de développement
personnalisés avec un certain nombre “d’ingrédients”
Comment exécuter un playbook ?
$ ansible-playbook lxc.yml --user=lxc --ask-become-pass
Exemple de playbook minimaliste
---
- hosts: lxc
sudo: yes
handlers:
- include: handlers.yml
vars_files:
- vars.yml
tasks:
- include:system.yml tags=system
- include:lamp.yml tags=lamp
- include:drupal.yml tags=drupal
Exemple : installer Apache
---
- name: Install Apache
apt:
name: "{{ item }}"
state: present
with_items:
- apache2
- apache2-utils
Pour Red Hat / CentOS / Fedora, remplacez apt par yum/dnf
Depuis Ansible 2.0, le module package permet d’abstraire le système de packaging.
Comprendre les handlers
Les handlers ne sont exécutés que si une tâche Ansible envoie un évènement
notify
---
- name: Restart Apache Nom du handler
service:
name: apache2
state: restarted
---
- name: Enable mod_rewrite
apache2_module:
name: rewrite
state: present
notify: Restart Apache
Invocation du handler
dans une tâche
Comprendre les variables
user: lxc
drupal_version: 8.1.3
drush_path: /usr/local/bin/drush
Une variable en action
---
- name: Check if Drush is installed
stat:
path: "{{ drush_path }}"
register: drush
Comprendre les ‘tasks’
Les tâches dans un playbook pointent vers des fichiers YAML qui définissent -
idéalement - des tâches logiques à exécuter sur le/les hôte(s)
tasks:
- include:system.yml
- name: Install system packages
package:
name: "{{ item }}"
state: present
with_items:
- git
- vim
- wget Fichier system.yml
Quelques exemples de modules Ansible
package Gestionnaire de paquets générique (apt, yum...)
service Gestionnaire de services (lancer, arrêter, redémarrer...)
stat Récupére le statut d’un fichier/dossier dans le système de fichiers
file Crée des fichiers/dossiers ou spécifie leurs attributs (chmod, chown...)
command Exécute une commande Shell sur le/les hôte(s)
get_url Télécharge des fichiers via HTTP, HTTPs ou FTP
copy Copie de fichiers vers le/les hôtes
replace Remplace une chaîne de caractères dans un fichier (utilise regex)
http://docs.ansible.com/ansible/list_of_all_modules.html
Démo
A retenir
● Etudiez LXC mais misez sur Docker pour la portabilité des containers
● En dév, la technologie de virtualisation est intéressante, mais n’est finalement
qu’un prétexte pour parler d’orchestration
● Pas besoin d’être développeur pour avoir sa ceinture noire en orchestration
● Depuis Drupal 8, YAML ne vous fait de toute façon plus peur ;-)
Merci. Questions ?

Contenu connexe

Tendances

Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Jérôme Petazzoni
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...adri1s
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinLudovic Piot
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsWeb à Québec
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Jérôme Petazzoni
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur webNoël
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linuxKhalid ALLILI
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSmartnSkilled
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.ioNicolas Hennion
 
Introduction à Docker et Gaudi
Introduction à Docker et GaudiIntroduction à Docker et Gaudi
Introduction à Docker et GaudiEmmanuel Quentin
 
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...Silicon Comté
 
Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec DockerLuis Lopez
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOpsJeoffrey Bauvin
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?Membré Guillaume
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013Stephane Manciot
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Cédric Leblond
 
Journée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tousJournée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tousPublicis Sapient Engineering
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express jsAbdoulaye Dieng
 

Tendances (20)

Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
Docker : quels enjeux pour le stockage et réseau ? Paris Open Source Summit ...
 
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
Docker nice meetup #1   construire, déployer et exécuter vos applications, ...Docker nice meetup #1   construire, déployer et exécuter vos applications, ...
Docker nice meetup #1 construire, déployer et exécuter vos applications, ...
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Julien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printempsJulien Maitrehenry - Docker, ça mange quoi au printemps
Julien Maitrehenry - Docker, ça mange quoi au printemps
 
Docker en Production (Docker Paris)
Docker en Production (Docker Paris)Docker en Production (Docker Paris)
Docker en Production (Docker Paris)
 
Ansib formation-ansible
Ansib formation-ansibleAnsib formation-ansible
Ansib formation-ansible
 
08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web08 01 mise en place d'un serveur web
08 01 mise en place d'un serveur web
 
PostgreSQL sous linux
PostgreSQL sous linuxPostgreSQL sous linux
PostgreSQL sous linux
 
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec DockerSupport formation vidéo : Construire et administrer vos conteneurs avec Docker
Support formation vidéo : Construire et administrer vos conteneurs avec Docker
 
Introduction à docker.io
Introduction à docker.ioIntroduction à docker.io
Introduction à docker.io
 
Introduction à Docker et Gaudi
Introduction à Docker et GaudiIntroduction à Docker et Gaudi
Introduction à Docker et Gaudi
 
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...
 
Déploiements avec Docker
Déploiements avec DockerDéploiements avec Docker
Déploiements avec Docker
 
Puppet, la philosophie DevOps
Puppet, la philosophie DevOpsPuppet, la philosophie DevOps
Puppet, la philosophie DevOps
 
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
CI, CD, pipelines, conteneurs : la cohabitation est elle possible ?
 
Squid
SquidSquid
Squid
 
De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013De Maven à SBT ScalaIO 2013
De Maven à SBT ScalaIO 2013
 
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
Retour d'expérience Docker: Puissance et simplicité de VSTS, déploiement sur ...
 
Journée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tousJournée DevOps : Puppet, un outil pour les installer tous
Journée DevOps : Puppet, un outil pour les installer tous
 
Initiation à Express js
Initiation à Express jsInitiation à Express js
Initiation à Express js
 

En vedette

L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tousAurelien Navarre
 
Meetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalMeetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalAurelien Navarre
 
Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Aurelien Navarre
 
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015Stephane Manciot
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerThibaut Marmin
 
Des principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreDes principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreStephane Manciot
 
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011Henri Gomez
 
Export procedures for agro based products
Export procedures for agro based productsExport procedures for agro based products
Export procedures for agro based productsDiraviam Jayaraj
 
REX déploiement Ansible et Utilisation avec Docker
REX déploiement Ansible et Utilisation avec DockerREX déploiement Ansible et Utilisation avec Docker
REX déploiement Ansible et Utilisation avec DockerYannig Perre
 

En vedette (12)

L'integration continue pour tous
L'integration continue pour tousL'integration continue pour tous
L'integration continue pour tous
 
Meetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupalMeetup Drupal Lyon - Sécuriser un site drupal
Meetup Drupal Lyon - Sécuriser un site drupal
 
Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13Industrialiser la gestion des fichiers multimedia #dcparis13
Industrialiser la gestion des fichiers multimedia #dcparis13
 
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
Packaging et déploiement d'une application avec Docker et Ansible @DevoxxFR 2015
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
Des principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvreDes principes de la démarche DevOps à sa mise en oeuvre
Des principes de la démarche DevOps à sa mise en oeuvre
 
Présentation Docker
Présentation DockerPrésentation Docker
Présentation Docker
 
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
DevOps - Retour d'expérience - MarsJug du 29 Juin 2011
 
Export procedures for agro based products
Export procedures for agro based productsExport procedures for agro based products
Export procedures for agro based products
 
REX déploiement Ansible et Utilisation avec Docker
REX déploiement Ansible et Utilisation avec DockerREX déploiement Ansible et Utilisation avec Docker
REX déploiement Ansible et Utilisation avec Docker
 
Démo puppet et état du projet
Démo puppet et état du projetDémo puppet et état du projet
Démo puppet et état du projet
 
Build Features, Not Apps
Build Features, Not AppsBuild Features, Not Apps
Build Features, Not Apps
 

Similaire à Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ansible

5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...AbdellahELMAMOUN
 
docker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugdocker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugamine17157
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide
 
Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Julien Maitrehenry
 
Comment remplacer cygwin par docker
Comment remplacer cygwin par dockerComment remplacer cygwin par docker
Comment remplacer cygwin par dockerNicolas Trauwaen
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation dockerOlivier Eeckhoutte
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linuxKhalid ALLILI
 
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdfoptimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdfPascal Ponzoni
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natifHenri Gomez
 
formation docker.pdf
formation docker.pdfformation docker.pdf
formation docker.pdfMohammedHdi1
 
A la découverte de docker, 2ème partie
A la découverte de docker, 2ème partieA la découverte de docker, 2ème partie
A la découverte de docker, 2ème partieSamuel Desseaux
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Smile I.T is open
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOSgcatt
 
Install oracle 11g sous RedHat
Install oracle 11g sous RedHatInstall oracle 11g sous RedHat
Install oracle 11g sous RedHatTaoufik AIT HSAIN
 

Similaire à Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ansible (20)

5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
5390997 Support formation : Construire et administrer vos conteneurs avec Doc...
 
docker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyugdocker-workshop-by-rbk.pdf jhuhiuguigugyug
docker-workshop-by-rbk.pdf jhuhiuguigugyug
 
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassinOxalide Workshop #4 - Docker, des tours dans le petit bassin
Oxalide Workshop #4 - Docker, des tours dans le petit bassin
 
Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?Docker, mais qu’est-ce que c’est ?
Docker, mais qu’est-ce que c’est ?
 
Comment remplacer cygwin par docker
Comment remplacer cygwin par dockerComment remplacer cygwin par docker
Comment remplacer cygwin par docker
 
Midi technique - présentation docker
Midi technique - présentation dockerMidi technique - présentation docker
Midi technique - présentation docker
 
Mysql Apche PHP sous linux
Mysql Apche PHP sous linuxMysql Apche PHP sous linux
Mysql Apche PHP sous linux
 
Présentation devops&puppet 04112014
Présentation devops&puppet 04112014 Présentation devops&puppet 04112014
Présentation devops&puppet 04112014
 
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdfoptimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
optimadata.nl-Comment exécuter Postgres sur Docker partie 1.pdf
 
What is Docker
What is Docker What is Docker
What is Docker
 
Docker@linuq
Docker@linuqDocker@linuq
Docker@linuq
 
20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif20111220 lyon jug-packaging-natif
20111220 lyon jug-packaging-natif
 
SDN OpenDaylight
SDN OpenDaylightSDN OpenDaylight
SDN OpenDaylight
 
formation docker.pdf
formation docker.pdfformation docker.pdf
formation docker.pdf
 
Jenkins
JenkinsJenkins
Jenkins
 
A la découverte de docker, 2ème partie
A la découverte de docker, 2ème partieA la découverte de docker, 2ème partie
A la découverte de docker, 2ème partie
 
docker.pdf
docker.pdfdocker.pdf
docker.pdf
 
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?Webinar Smile : Comment industrialiser votre SI avec Ansible ?
Webinar Smile : Comment industrialiser votre SI avec Ansible ?
 
Présentation CoreOS
Présentation CoreOSPrésentation CoreOS
Présentation CoreOS
 
Install oracle 11g sous RedHat
Install oracle 11g sous RedHatInstall oracle 11g sous RedHat
Install oracle 11g sous RedHat
 

Meetup Drupal Lyon 2016 - Environnements de dév Drupal automatisés LXC et Ansible

  • 1. Environnements de dév Drupal automatisés avec LXC et Ansible Meetup Drupal Lyon, 5 juillet 2016
  • 2. Qui suis-je ? Senior Technical Solutions Analyst @Acquia ● Drupaliste depuis 2007 ● Membre de la communauté Drupal et communauté lyonnaise depuis 2010 En ligne ● www.drupalfacile.org ● @DrupalFacile ● anavarre.net ● @AurelienNavarre
  • 3. Première partie LXC, containers jetables en 3 commandes
  • 4. Préambule ● Si vous utilisez Windows ou Mac OS, Docker est probablement plus adapté ● Pour tester les containers*, vous pouvez installer Linux dans une machine virtuelle, même sous Windows ou Mac OS ● Si vous utilisez Linux sur vos serveurs, pensez containers et services isolés, plutôt qu’une infrastructure monolithique traditionnelle (tout dans une VM) * containers et non conteneurs. On utilisera ici le terme anglais communément employé
  • 5. Pourquoi les containers ? Pourquoi LXC ? ● Un ordinateur n’est pas un environnement isolé (et maîtrisé) de travail ● VMware, Parallels, Virtualbox / Vagrant, QEMU ou encore Boxes ne répondent pas à tous les besoins ● LXC est - idéalement - fait pour des environnements de dév jetables ● LXC est plus bas niveau que Docker ● LXC ne nécessite aucune sur-couche tierce et/ou propriétaire ● LXC prend très peu de place sur votre système ● LXD pour aller plus loin (hyperviseur complet)
  • 6. Installer LXC Ubuntu / Debian $ sudo apt-get install lxc libvirt-bin ebtables dnsmasq Pour Red Hat / CentOS / Fedora, remplacez apt-get par yum/dnf Quelle version de LXC utilisez-vous ? $ sudo lxc-ls --version 1.1.5
  • 7. Quelques commandes importantes Les exécutables LXC se trouvent sous /usr/bin ● lxc-create : créer un container ● lxc-ls : lister les containers ● lxc-info : obtenir l’état du container (démarré / arrêté) ● lxc-start : démarrer un container ● lxc-attach : se connecter à un container ● lxc-stop : stopper un container ● lxc-clone : cloner un container ● lxc-destroy : détruire un container
  • 8. Créer un premier container Quel template choisir ? $ ls /usr/share/lxc/templates lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-ubuntu (etc.) Créer un container $ sudo lxc-create -t debian -n drupal ● -t pour passer le nom d’un template à utiliser ● -n pour personnaliser le nom du container
  • 9. Quelles interfaces sont disponibles ? $ ifconfig -s | awk {'print $1'} Iface lo vethUMI8 virbr0 wlp1s0 $ virsh net-start default si virbr0 n’apparaît pas Configuration minimaliste du réseau dans /var/lib/lxc/drupal/config lxc.network.type = veth type de virtualisation réseau lxc.network.link = virbr0 lien de connexion vers l'hôte lxc.network.flags = up activer le réseau Ou mieux, globalement depuis /etc/lxc/default.conf Configurer le réseau
  • 10. Démarrer le container Quel est l’état du container ? $ sudo lxc-info -n drupal | grep State State: STOPPED Démarrer le container $ sudo lxc-start -n drupal Confirmer le changement d’état $ sudo lxc-info -n drupal | grep State State: RUNNING
  • 11. Première connexion au container Changer immédiatement le mot de passe root avant de se connecter $ sudo chroot /var/lib/lxc/drupal/rootfs passwd Connexion au container $ sudo lxc-attach -n drupal Avec root, créer un utilisateur lxc et l’ajouter dans les sudoers $ usermod -aG sudo lxc Pour Red Hat / CentOS / Fedora, taper $ adduser lxc -G wheel
  • 12. Préparer la connexion SSH au container Vérifier l’adresse IP attribuée au container $ hostname -I 192.168.124.125 Utiliser une clé SSH plutôt qu’un mot de passe lors de la prochaine connexion $ ssh-copy-id lxc@192.168.124.125 lxc@192.168.124.125's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'lxc@192. 168.124.125'"
  • 13. Tester la connexion SSH au container $ ssh lxc@192.168.124.125 lxc@192.168.124.125's password: Last login: Sat Jun 23 12:59:02 2016 from 192.168.124.1 ● Le container démarre et se connecte au réseau ● On peut s’y connecter sans mot de passe via SSH ● On a un compte utilisateur autre que root disponible ● Nous sommes désormais prêts pour l’orchestration via Ansible
  • 14. Le petit plus : LXC Web Panel La ligne de commande c’est bien, mais une GUI c’est pas mal non plus. $ wget http://lxc-webpanel.github.io/tools/install.sh -O - | bash Accès à l’interface via http://localhost:5000 (admin/admin)
  • 16. Pourquoi l’orchestration ? Pourquoi Ansible ? ● L’orchestration permet de simplifier et d’automatiser toutes les taches d’administration système pour 1 ou 1000 serveurs à la fois ● Les principaux concurrents d’Ansible sont Puppet et Chef ● Ansible n’installe pas de daemon (une connexion SSH suffit) ● Ansible est simple d’apprentissage (quasi exclusivement du YAML) ● Ansible est Open Source ● Ansible est là pour rester (racheté par Red Hat en 2015) ● Si vous changez de technologie (Vagrant/Virtualbox, LXC, Docker...) pour vos environnements de dév, vous conservez quand même votre orchestration !
  • 17. Installer Ansible Ubuntu / Debian $ sudo apt-get install ansible python-simplejson Pour Red Hat / CentOS / Fedora, remplacez apt-get par yum/dnf Quelle version d’Ansible utilisez-vous ? $ ansible --version ansible 1.9.4
  • 18. Définir les hôtes à orchestrer Le fichier /etc/ansible/hosts sert à créer des groupes logiques [lxc] 192.168.124.125 [rackspace] 203.0.113.2 [aws] 203.0.113.10 203.0.113.11 203.0.113.12
  • 19. Tester une connexion au container via Ansible On a donc crée un groupe logique LXC dans /etc/ansible/hosts [lxc] 192.168.124.125 Ce qui permet d’envoyer un ping sur le groupe (tous les hôtes) plutôt que les IPs $ ansible lxc -m ping -u lxc 192.168.124.125 | success >> { "changed": false, "ping": "pong" }
  • 20. Le concept de playbook ● Le playbook est à Ansible ce que le livre de cuisine est au cuisinier : un recueil de recettes pour préparer des environnements de développement personnalisés avec un certain nombre “d’ingrédients” Comment exécuter un playbook ? $ ansible-playbook lxc.yml --user=lxc --ask-become-pass
  • 21. Exemple de playbook minimaliste --- - hosts: lxc sudo: yes handlers: - include: handlers.yml vars_files: - vars.yml tasks: - include:system.yml tags=system - include:lamp.yml tags=lamp - include:drupal.yml tags=drupal
  • 22. Exemple : installer Apache --- - name: Install Apache apt: name: "{{ item }}" state: present with_items: - apache2 - apache2-utils Pour Red Hat / CentOS / Fedora, remplacez apt par yum/dnf Depuis Ansible 2.0, le module package permet d’abstraire le système de packaging.
  • 23. Comprendre les handlers Les handlers ne sont exécutés que si une tâche Ansible envoie un évènement notify --- - name: Restart Apache Nom du handler service: name: apache2 state: restarted --- - name: Enable mod_rewrite apache2_module: name: rewrite state: present notify: Restart Apache Invocation du handler dans une tâche
  • 24. Comprendre les variables user: lxc drupal_version: 8.1.3 drush_path: /usr/local/bin/drush Une variable en action --- - name: Check if Drush is installed stat: path: "{{ drush_path }}" register: drush
  • 25. Comprendre les ‘tasks’ Les tâches dans un playbook pointent vers des fichiers YAML qui définissent - idéalement - des tâches logiques à exécuter sur le/les hôte(s) tasks: - include:system.yml - name: Install system packages package: name: "{{ item }}" state: present with_items: - git - vim - wget Fichier system.yml
  • 26. Quelques exemples de modules Ansible package Gestionnaire de paquets générique (apt, yum...) service Gestionnaire de services (lancer, arrêter, redémarrer...) stat Récupére le statut d’un fichier/dossier dans le système de fichiers file Crée des fichiers/dossiers ou spécifie leurs attributs (chmod, chown...) command Exécute une commande Shell sur le/les hôte(s) get_url Télécharge des fichiers via HTTP, HTTPs ou FTP copy Copie de fichiers vers le/les hôtes replace Remplace une chaîne de caractères dans un fichier (utilise regex) http://docs.ansible.com/ansible/list_of_all_modules.html
  • 27. Démo
  • 28. A retenir ● Etudiez LXC mais misez sur Docker pour la portabilité des containers ● En dév, la technologie de virtualisation est intéressante, mais n’est finalement qu’un prétexte pour parler d’orchestration ● Pas besoin d’être développeur pour avoir sa ceinture noire en orchestration ● Depuis Drupal 8, YAML ne vous fait de toute façon plus peur ;-)