From 46f90f1b0cf2d1382ee926ed0cfd2e47099e1f49 Mon Sep 17 00:00:00 2001 From: Quentin Dufour Date: Sat, 3 Oct 2015 16:24:11 +0200 Subject: [PATCH] Add a new article --- _posts/2014-10-15-web.markdown | 2 +- _posts/2015-10-02-ansible.markdown | 114 ++++++++++++++++++++++ assets/images/posts/ansible-agentless.png | Bin 0 -> 7248 bytes assets/images/posts/ansible-deploy.png | Bin 0 -> 20559 bytes assets/images/posts/ansible-template.png | Bin 0 -> 14024 bytes 5 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 _posts/2015-10-02-ansible.markdown create mode 100644 assets/images/posts/ansible-agentless.png create mode 100644 assets/images/posts/ansible-deploy.png create mode 100644 assets/images/posts/ansible-template.png diff --git a/_posts/2014-10-15-web.markdown b/_posts/2014-10-15-web.markdown index e16269f..0764bcb 100755 --- a/_posts/2014-10-15-web.markdown +++ b/_posts/2014-10-15-web.markdown @@ -2,7 +2,7 @@ layout: post slug: web status: published -title: L'histoire du web +title: L'histoire des technos du web en 2 minutes description: Aperçu rapide des lib et frameworks web categories: - web diff --git a/_posts/2015-10-02-ansible.markdown b/_posts/2015-10-02-ansible.markdown new file mode 100644 index 0000000..7e60018 --- /dev/null +++ b/_posts/2015-10-02-ansible.markdown @@ -0,0 +1,114 @@ +--- +layout: post +slug: ansible +status: published +title: Automatisez votre déploiement avec Ansible +description: Un fichier pour les gouverner tous +categories: +- web +tags: +--- + +Ansible est un outil en ligne de commande pour automatiser vos déploiements. L'objectif de cet article est bien évidemment de vous convaincre de son utilité. Avant d'entrer dans le vif du sujet, revenons sur les différentes façons de déployer votre code sur un serveur. + +## L'âge de pierre + +### A la main + +Le niveau zéro de l'administration système consiste à vous connecter en SSH sur le serveur distant, taper des commandes jusqu'à ce que vous obteniez le résultat désiré. Même si cette méthode peut convenir pour apprendre, elle trouve assez vite ses limites au fil du temps : comment faire quand vous avez plusieurs serveurs, quand vous devez faire une mise à jour, quand vous êtes plusieurs à gérer ces serveurs, quand un serveur crash et que vous devez le réinstaller ? + +### Écrire un script + +Afin de pouvoir redéployer votre configuration autant de fois que vous voulez, vous avez peut-être déjà pensé à écrire un script bash qui regroupe l'ensemble des commandes pour déployer votre code. Mais vous vous doutez bien que tout n'est pas parfait. + +En effet, comment gérer le cas où vous devez cloner un dépôt git à la première installation, mais à chaque réexécution du script vous voulez vous contenter de le mettre à jour ? Vous pouvez écrire deux scripts, un d'installation et un de mise à jour, mais comment faire quand ce genre de cas se reproduit plusieurs fois, et que lors d'une mise à jour il faut créer un nouveau fichier une seule fois ? Vous allez devoir créer un troisième fichier, et executer le bon script sur le bon serveur. + +Une seconde approche est de faire les tests directement dans le script. Ce dernier d'adaptera donc à votre environnement. Mais certains tests sont complexes, et votre script va s'alourdir considérablement. C'est là où Ansible va vous faciliter considérabkement la vie, en réalisant ces tests de manière totalement invisible. + +## Fonctionnement d'Ansible + +### Des étâts plutôt que des commandes + +Ansible fonctionne par étât, vous décrivez donc dans quel étât vous voulez qu'une chose soit. Par exemple, je ne vais pas demander de cloner ou de mettre à jour mon dépôt git sur ma machine. Je vais demander à Ansible que mon projet git soit à jour. Si le dossier existe déjà, Ansible va le mettre à jour. Si il n'existe pas, Ansible va le cloner. + +### Un fonctionnement sans agent + +![Schema Ansible : Sans Agent](../assets/images/posts/ansible-agentless.png) + +Ansible fonctionne sans agent sur le serveur. Et alors ? En fait, vous n'avez pas besoin d'installer ansible sur votre serveur. Tout se passe sur votre client. Votre serveur aura juste besoin de python2 (et avec un peu de chance il sera déjà installé). Ansible va se connecter au serveur en SSH, récupérer les informations dont il a besoin, puis générer la commande qui correspond à votre requête en fonction de l'état de ce dernier. +### Les templates + +![Schema Ansible : Les Templates](../assets/images/posts/ansible-template.png) + +Les templates vous permettent d'adapter vos fichiers de configuration avec des variables propres à chaque serveur. Imaginons que vous vouliez lancer un logiciel sur x serveurs, ayant chacun dans leur configuration le nom d'hôte du serveur. Lors de l'envoi de mon fichier de configuration sur le serveur, Ansible va prendre le template et remplacer les variables par les bonnes valeurs. + + +### Sous le capot + +Ansible est écrit en python2. Chaque commande à un module Ansible, et son utilisation est décrite dans la documentation. Il va se connecter en SSH au serveur, envoyer une charge utile en python, qu'il va exécuter, et va envoyer son retour. + +### Versionner + +En créant des fichiers de configuration sur votre ordinateur, vous pouvez les versionner, dans git par exemple. Ce qui vous permet de : + + * Travailler à plusieurs sur le déploiement de votre application + * Redéployer une ancienne version de votre application + * Avoir un script de déploiement pour develop, master, etc. et le gérer comme votre code. (#DevOps :p) + +### Les alternatives + +Je vous présente un peu Ansible comme l'alternative miracle. Rassurez-vous, le monde est vaste, et ce n'est pas la seule option possible. Le plus important c'est de trouver l'outil qui vous convient. Il existe des outils de déploiement avec agent, comme Chef. D'autres consiste à empaqueter vos modifications dans une machine virtuelle, comme Puppet ou Vagrant. Enfin, une autre approche, semblable à la précédente, utilise des conteneurs comme Docker ou Rocket. + +## Place à la pratique + +Si je ne vous ai pas montré des bouts de fichier tout de suite, c'est que je voulais être sûr que vous compreniez bien le fonctionnement d'Ansible, et surtout pourquoi ça peut vous aider. Je ne vous ferai pas de long tutoriel sur son installation, tout se trouve sur [la page d'installation de la documentation officielle](http://docs.ansible.com/ansible/intro_installation.html). En général ça se résume à l'installation via votre gestionnaire de dépendance (dnf, apt, pacman...). + +### Prise en main + +Tout d'abord, Ansible utilise un fichier hosts, un peu particulier, qui n'est pas versionné. Vous pourrez le trouver en général ici : `/etc/ansible/hosts`. + +En effet, dans vos fichiers de déploiement, vous ne mettez pas directement le nom du serveur distant, mais juste un nom, et les paramètres seront définis dans votre fichiers hosts. Ca permet de décoreller votre déploiement de vos serveurs. + +Voici à quoi ressemble ce fichier (toutes les informations ne sont pas obligatoires): +``` +server1 ansible_ssh_port=22 ansible_ssh_host=192.168.1.1 ansible_ssh_user=root +server2 ansible_ssh_port=22 ansible_ssh_host=192.168.1.2 ansible_ssh_user=john +``` + +_Note : Dans le premier cas, on utilise l'identifiant root, qui est donc super utilisateur. On pourra donc faire tout ce que l'on veut, mais ce n'est pas très sécurisé d'authoriser les connexions directement depuis root. Dans le second cas on se connecte avec un compte non privilégié, c'est plus sécurisé mais on ne pourra rien installer. Sauf si john est dans les sudoers, et dans ce cas là, vous devrez rajouter l'argument `--ask-sudo-pass` à Ansible. C'est la solution à préférer pour la production !_ + +### Votre premier "playbook" + +Un playbook est un fichier au format YML qui décrit les différentes étapes de votre déploiement. Choissisez un nom (par exemple `git-test.yml`), et créez un nouveau fichier avec votre éditeur de texte préféré : + +```yml +--- +- hosts: server1 + tasks: + - name: Install git + apt: name=git state=present + + - name: Clone git repository + git: repo=https://github.com/ansible/ansible-examples.git dest=/src/ansible-example +``` + +### Executer votre playbook + +Après avoir ajouté votre fichier à un dépôt git, vous êtes prêt à l'exécuter. + +```bash +ansible-playbook git-test.yml +``` + +Si tout se passe bien, vous devriez obtenir un résultat semblable : +![Capture Ansible : le déploiement](../assets/images/posts/ansible-deploy.png) + +_Ici on voit que git était déjà installé, c'est pour ça qu'il est OK en vert, il est dans l'état que nous souhaitons, rien n'a été modifié. Par contre, le dépôt n'était pas cloné, une action a donc été réalisée, d'où le "changed"._ + +### Aller plus loin + +Vous avez certainement vu le "Gathering Fact" sur la capture précédente. Cette étape permet à Ansible de récupérer beaucoup d'informationssur votre serveur, que vous pourrez réexploiter dans vos scripts. + +Vous aurez aussi besoin assez vite des handlers. Imaginons que vous modifiez le fichier de configuration du serveur web nginx. Pour que cette modification soit prise en compte, nginx doit être redémarré. Mais vous ne voulez pas redémarrer nginx à chaque fois. Les handlers sont là pour ça ! + +Ce billet touche à sa fin, Ansible devrait quand même vous réserver encore plein de (bonnes) surprises. Mais ne vous inquiétez pas, vous devriez maintenant avoir toutes les clés pour bien déployer vos projets ! Bon courage ! diff --git a/assets/images/posts/ansible-agentless.png b/assets/images/posts/ansible-agentless.png new file mode 100644 index 0000000000000000000000000000000000000000..03337cc8ff62996edfa85ed88eaf069c5cc57a74 GIT binary patch literal 7248 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 Tt+@aGQ>dn_tyFx^3jO~8)LK@P literal 0 HcmV?d00001 diff --git a/assets/images/posts/ansible-deploy.png b/assets/images/posts/ansible-deploy.png new file mode 100644 index 0000000000000000000000000000000000000000..334fd9e17c57701600e7886f1d2a8f7be033e26e GIT binary patch literal 20559 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 literal 0 HcmV?d00001 diff --git a/assets/images/posts/ansible-template.png b/assets/images/posts/ansible-template.png new file mode 100644 index 0000000000000000000000000000000000000000..0d2d87f728392e3c512b08dce1d50b5f66d54cf5 GIT binary patch literal 14024 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 literal 0 HcmV?d00001