Introduction à Vagrant
Vagrant est un outil permettant de créer et de gérer des environnements de machines virtuelles dans un seul flux de travail. Avec un flux de travail convivial et centré sur l’automatisation, Vagrant réduit le temps de configuration de l’environnement de développement, augmente la parité de production et fait du “travail sur ma machine” un prétexte du passé.
Si vous êtes déjà familiarisé avec les bases de Vagrant, la documentation fournit une meilleure construction de référence pour toutes les fonctionnalités internes disponibles.
Pourquoi Vagrant ?
Vagrant fournit des environnements de travail faciles à configurer, reproductibles et portables, basés sur une technologie standard et contrôlés par un seul flux de travail cohérent, afin de maximiser la productivité et la flexibilité de votre équipe.
Pour réaliser sa magie, Vagrant se tient sur les épaules de géants. Les machines sont configurées sur VirtualBox, VMware, AWS ou tout autre fournisseur disponible. Ensuite, les outils de provisioning standard tels que les scripts shell, Chef ou Puppet peuvent installer et configurer automatiquement les logiciels sur la machine virtuelle.
Pour les développeurs
Si vous êtes développeur, Vagrant isolera les dépendances et leur configuration dans un seul environnement cohérent et jetable, sans sacrifier les outils avec lesquels vous avez l'habitude de travailler (éditeurs, navigateurs, débogueurs, etc.). Une fois que vous ou quelqu'un d'autre créez un seul fichier Vagrant “Vagrantfile”, il vous suffit de faire “vagrant up” et tout est installé et configuré pour que vous puissiez travailler. Les autres membres de votre équipe créent leurs environnements de développement à partir de la même configuration. Ainsi, que vous travailliez sous Linux, Mac OS X ou Windows, tous les membres de votre équipe exécutent du code dans le même environnement, avec les mêmes dépendances, tous configurés de la même manière. Dites au revoir aux bugs “travaille sur ma machine”.
Pour les opérateurs
Si vous êtes un ingénieur d'exploitation ou un ingénieur DevOps, Vagrant vous fournit un environnement jetable et un flux de travail cohérent pour le développement et le test de scripts de gestion d'infrastructure. Vous pouvez rapidement tester des éléments tels que les scripts shell, les Cookbooks Chef, les modules Puppet, etc. à l'aide de la virtualisation locale telle que VirtualBox ou VMware. Ensuite, avec la même configuration, vous pouvez tester ces scripts sur des clouds distants tels qu'AWS ou RackSpace avec le même flux de travail. Amenez vos scripts personnalisés à recycler les instances EC2, arrêtez de jongler avec les invites SSH sur différentes machines et commencez à utiliser Vagrant pour améliorer votre santé mentale.
Pour les designers
Si vous êtes un concepteur, Vagrant définira automatiquement tout ce qui est requis pour votre application afin que vous puissiez vous concentrer sur ce que vous faites le mieux: la conception. Une fois qu'un développeur a configuré Vagrant, vous n'avez plus à vous soucier de la manière de faire fonctionner cette application. Ne dérangez plus les autres développeurs pour vous aider à réparer votre environnement afin que vous puissiez tester les conceptions. Il suffit pour cela de consulter le code, faire un “vagrant up”, et commencer à concevoir.
Pour tout le monde
Vagrant est conçu pour tout le monde comme le moyen le plus simple et le plus rapide de créer un environnement virtualisé!
Prérequis
- disposer de Vagrant : http://www.vagrantup.com/downloads.html
- disposer de VirtualBox : https://www.virtualbox.org/wiki/Downloads
- disposer d'un client ssh (cygwin sur windows par exemple : https://cygwin.com/install.html)
Installation de Vagrant
L'installation de Vagrant est extrêmement facile. Rendez-vous sur la page des téléchargements Vagrant et procurez-vous le programme d'installation ou le package approprié pour votre plate-forme. Installez le package en utilisant les procédures standard pour votre système d'exploitation.
Le programme d'installation ajoutera automatiquement “vagrant” à votre chemin système pour qu'il soit disponible dans les terminaux. Si ce n'est pas le cas, essayez de vous déconnecter puis de vous reconnecter à votre système (cela est particulièrement nécessaire parfois pour Windows).
Attention:
Vous recherchez via la commande : gem install ? Vagrant 1.0.x avait la possibilité d'être installé en tant que RubyGem. Cette méthode d'installation n'est plus prise en charge. Si vous avez une ancienne version de Vagrant installée via Rubygems, supprimez-la avant d'installer les nouvelles versions de Vagrant.
Attention:
Méfiez-vous des gestionnaires de paquets système ! Certaines distributions de systèmes d'exploitation incluent un paquet vagrant dans leurs dépôts de paquets en amont. Veuillez ne pas installer Vagrant de cette manière. En règle générale, ces packages ne contiennent pas de dépendances ou incluent des versions très obsolètes de Vagrant. Si vous installez via le gestionnaire de paquets de votre système, il est fort probable que vous rencontriez des problèmes.
Sur un environnement Debian/Ubuntu
[root@srv ~]# wget https://releases.hashicorp.com/vagrant/2.1.5/vagrant_2.1.5_x86_64.deb [root@srv ~]# dpkg -i vagrant_2.1.5_x86_64.deb
Sur un environnement Redhat/CentOS
[root@srv ~]# wget https://releases.hashicorp.com/vagrant/2.1.5/vagrant_2.1.5_x86_64.rpm [root@srv ~]# yum localinstall vagrant_2.1.5_x86_64.rpm
Vérifier l'installation
[root@srv ~]# vagrant -v Vagrant 2.1.5
Utilisation de Vagrant
Il existe différentes box packagées pour vagrant, vous en trouverez à cette adresse : https://app.vagrantup.com/boxes/search.
Positionnez vous dans le répertoire courant du projet dans lequel vous souhaitez utiliser vagrant et saisissez la commande “vagrant init”:
[user@srv ~] vagrant init debian/stretch64
Cette commande va générer un fichier “Vagrantfile” permettant de configurer la VM. A ce stade, cette dernière n'est pas encore créée. Exécutez ensuite la commande :
[user@srv ~] vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Checking if box 'debian/stretch64' is up to date... ==> default: Clearing any previously set forwarded ports... ==> default: Clearing any previously set network interfaces... ==> default: Preparing network interfaces based on configuration... default: Adapter 1: nat ==> default: Forwarding ports... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Running 'pre-boot' VM customizations... ==> default: Booting VM... ==> default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: No guest additions were detected on the base box for this VM! Guest default: additions are required for forwarded ports, shared folders, host only default: networking, and more. If SSH fails on this machine, please install default: the guest additions and repackage the box to continue. default: default: This is not an error message; everything may continue to work properly, default: in which case you may ignore this message. ==> default: Rsyncing folder: /home/user/Bureau/vagrant/debian-base/ => /vagrant ==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run. ==> default: Machine 'default' has a post `vagrant up` message. This is a message ==> default: from the creator of the Vagrantfile, and not from Vagrant itself: ==> default: ==> default: Vanilla Debian box. See https://app.vagrantup.com/debian for help and bug reports
Cette commande va lancer le démarrage de la VM.
Si celle-ci n'existe pas elle sera téléchargée et déposée dans votre répertoire de VM configuré au niveau de votre VirtualBox. Cette étape peut durer une vingtaine de minutes en fonction de votre connexion internet.
Une fois téléchargée, vous verrez votre VM apparaître dans la liste de vos machines disponibles dans VirtualBox.
Vous pouvez ainsi vous connecter en ssh à la VM grâce à la commande
[user@srv ~] vagrant ssh
Création d'une Box Vagrant
Il existe une multitude de box étonnantes disponibles sur des sites tels que “vagrantcloud.com”, alors pourquoi voudriez-vous créer votre propre boîte?
- Peut-être voudriez-vous ajouter quelques éléments supplémentaires à votre base (un runtime ou deux comme Julia, Erlang, JVM ou Python, etc.), puis démarrez celle-ci en tant que nouvelle «base».
- Peut-être que vous voulez que votre box ait plus de mémoire ou que vous ayez besoin que vos box reflète plus fidèlement la production.
Pour cela, Il suffit d'installer une VM sur VirtualBox et de suivre la procédure qui suit.
Nous allons créer l'enveloppe sur VirtualBox comme suit pour déployer une base RHEL/CENTOS 7.
Modifiez les paramètres matériels de la machine virtuelle pour améliorer les performances et parce que SSH nécessite l'activation du transfert de port pour l'utilisateur vagrant:
- Désactiver l'audio
- Désactiver l'USB
- Assurez-vous que la carte réseau 1 est définie sur NAT
- Ajoutez cette règle de transfert de port: [Nom: SSH, Protocole: TCP, Adresse IP de l'hôte: vierge, Port de l'hôte: 2222, Adresse IP de l'invité: vierge, Port de l'invité: 22]
Installer le système d'exploitation
Mettre en place RHEL/CentOS 7 est très simple.
Suivez les instructions à l'écran et lorsque vous êtes invité à configurer un utilisateur, définissez-le user suivant : “vagrant” et le mot de passe “vagrant”. Ne pas oublier de définir le mot de passe “root”.
Définir les droits SUDO : vagrant
Vagrant doit pouvoir exécuter les commandes sudo sans invite de mot de passe.
Le moyen le plus efficace pour configurer l'utilisateur vagrant afin qu'il puisse utiliser sudo sans être invité à entrer un mot de passe est de l'ajouter à la liste des sudoers comme suit:
visudo -f /etc/sudoers.d/vagrant
Tout ce qui se trouve dans le dossier /etc/sudoers.d/* est inclus dans les privilèges «sudoers» lorsqu’il est créé par l’utilisateur root. C’est pourquoi nous avons créé cela en tant qu’utilisateur root et dans ce dossier.
Avec ce fichier ouvert, ajoutez ceci au fichier, puis enregistrez-le.
# Add vagrant user vagrant ALL=(ALL) NOPASSWD:ALL
Maintenant, vous pouvez tester son fonctionnement en exécutant une commande simple:
sudo pwd
Il retournera le dossier personnel sans vous demander de mot de passe si tout est configuré correctement. Si vous êtes invité à entrer un mot de passe, c'est qu'il y a un problème.
Assurez-vous que ce test réussisse.
Mettre à jour le système d'exploitation
Une des raisons pour lesquelles nous construisons cette boîte est pour que nous puissions gagner du temps en étant déjà à jour. Commençons donc par mettre à jour le système.
yum update
En général, s’il existe des mises à jour du noyau, redémarrer le serveur.
shutdown -r now
Installer les clés SSH : vagrant
Nous allons à cette étape déployer la clé ssh. Celle-ci est disponble sur github.
Action à réaliser en tant que user vagrant :
mkdir -p .ssh chmod 0700 /home/vagrant/.ssh wget --no-check-certificate \ https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub \ -O /home/vagrant/.ssh/authorized_keys chmod 0600 /home/vagrant/.ssh/authorized_keys
Installation des addons
Nous allons installer sur notre box les addons VirtualBox pour optimiser l'image sur celui-ci.
sudo yum install bzip2 sudo yum groupinstall "Development Tools" sudo yum install kernel-devel sudo mount /dev/cdrom /mnt cd /mnt sudo ./VBoxLinuxAdditions.run
Construction de la box
Voilà, nous y sommes, nous allons enfin construire notre propre box.
[user@lnxMint]:~/Bureau/vagrant$ mkdir centos [user@lnxMint]:~/Bureau/vagrant$ cd centos/ [user@lnxMint]:~/Bureau/vagrant/centos$ vagrant package --output Centos7-base.box --base Centos7-base ==> Centos7-base: Clearing any previously set forwarded ports... ==> Centos7-base: Exporting VM... ==> Centos7-base: Compressing package to: /home/user/Bureau/vagrant/centos/Centos7-base.box
Tester la nouvelle box
[user@lnxMint]:~/Bureau/vagrant/centos$ vagrant box add Centos7-Vagrant Centos7-base.box ==> box: Box file was not detected as metadata. Adding it directly... ==> box: Adding box 'Centos7-Vagrant' (v0) for provider: box: Unpacking necessary files from: file:///home/user/Bureau/vagrant/centos/Centos7-base.box ==> box: Successfully added box 'Centos7-Vagrant' (v0) for 'virtualbox'! [user@lnxMint]:~/Bureau/vagrant/centos$ vagrant box list Centos7-Vagrant (virtualbox, 0)
[user@lnxMint]:~/Bureau/vagrant/centos$ vagrant init Centos7-Vagrant [user@lnxMint]:~/Bureau/vagrant/centos$ vagrant up
Publier votre nouvelle box
Pour la publication de votre box, il suffira de créer un compte sur https://app.vagrantup.com/
Un fois connecter :
- Create a new Vagrant box
- Name : CentOS7-base
- Visibility : N/A
- Short description : Box CentOS 7 base.
Cliquer sur : Create Box
New Box Version
- Version : 1.0.1
- Description : Box CentOS 7 base.
Cliquer sur Create Version
Plus bas, nous allons choisir le provider New Box Provider
- Provider : virtualbox
- File Hosting : Upload to Vagrant Cloud
Il suffira d'uploader le fichier.
Annexe
Documentation officielle : https://www.vagrantup.com/docs/
Commande de base :
- Pour ajouter une box : vagrant box add “nom_de_ma_box” “url_de_la_box”
- Pour supprimer une box : vagrant box remove “nom_de_ma_box”
- Pour lister les box existantes : vagrant box list
- Pour lancer la machine virtuelle : vagrant up
- Pour se connecter en SSH à la VM : vagrant ssh
- Pour voir l'état de la VM : vagrant status
- Pour mettre la VM en veille prolongée : vagrant suspend
- Pour arrêter la VM : vagrant halt
- Pour relancer la VM : vagrant resume
- Pour supprimer la VM : vagrant destroy