Vagrant, crée par la société HashiCorp, est un orchestrateur de VM, il permet de créer des VM sur un provisionner comme Virtualbox, VmWare Workstation, Hyper-V et même docker.
Il va te permettre de créer rapidement ton infrastructure de développement. Vagrant crée les VM en quelques secondes, on peut alors détruire son infra et la remonter en quelques minutes.
L’outil incroyable pour déployer ton environnement de dev
Ses gros avantages :
- Déploiement facile : Vagrant te permet de créer et de configurer des environnements de développement et de test rapidement et facilement, en utilisant des scripts de configuration (Vagrantfiles). Tu peux ainsi déployer facilement une infrastructure complexe sur une ou plusieurs machines virtuelles.
- Portabilité : en utilisant Vagrant, tu peux décrire ton environnement de développement dans un Vagrantfile, qui peut être partagé avec d’autres membres de ton équipe. Cela permet à chacun de déployer facilement l’environnement sur sa machine, quel que soit le système d’exploitation utilisé.
- Reproductibilité : Vagrant te permet de créer des environnements de développement qui sont reproductibles et fiables. Si tu rencontres un problème sur ton environnement de développement, tu peux facilement le réinitialiser en utilisant Vagrant.
- Intégration des outils de gestion de configuration : Vagrant intègre nativement des outils de gestion de configuration tels que ansible, Puppet ou Chef, ce qui te permet de gérer et de configurer facilement tes environnements de développement.
- Multi provider : Vagrant prend en charge de nombreux fournisseurs d’hébergement tels que VirtualBox, VMWare ou AWS, ce qui te permet de déployer tes environnements de développement sur différentes plateformes.
Avec Vagrant fini les longues création de VM.
Pour cet article je vais utiliser Vagrant pour provisionner Virtualbox.
Installation de Vagrant sur Debian
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install vagrant
Installation de Vagrant sur Centos
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install vagrant
Les commandes de base
- vagrant init : crée un fichier Vagrantfile dans le répertoire courant. Ce fichier contient la configuration de la Vagrant Box à utiliser. Tu peux utiliser cette commande pour créer un nouveau projet Vagrant.
- vagrant up : démarre la Vagrant Box. Si la box n’est pas encore installée, Vagrant la téléchargera et la configura avant de la démarrer.
- vagrant ssh : se connecte à la Vagrant Box en utilisant SSH. Tu peux utiliser cette commande pour accéder à la console de la box et exécuter des commandes sur le système d’exploitation de la box.
- vagrant halt : arrête la Vagrant Box. Tu peux utiliser cette commande pour mettre la box en pause ou pour l’arrêter complètement.
- vagrant destroy : supprime la Vagrant Box. Cette commande arrête la box et la supprime de ta machine. Tu peux utiliser cette commande pour nettoyer ton environnement de développement.
Les vagrant box
Il faut savoir que pour créer des VM, Vagrant utilise des images OS qu’il appel box, tu trouveras des box déjà fonctionnel sur le Vagrant Cloud.
Les commandes Box
- vagrant box add : permet d’ajouter une Vagrant Box à la liste des boxes disponibles. Par exemple, pour ajouter une box nommée « ubuntu/bionic64 »
- vagrant box list : affiche la liste des boxes disponibles. Tu peux utiliser cette commande pour vérifier quelles boxes sont installées sur ta machine.
- vagrant box remove : permet de supprimer une Vagrant Box de la liste des boxes disponibles.
- vagrant box update : permet de mettre à jour une Vagrant Box. Si une nouvelle version de la box est disponible, cette commande la téléchargera et la remplacera par la version existante.
On ajoute une box Debian 10 :
vagrant box add debian/stretch64
Maintenant si on liste nos box :
vagrant box list
debian/stretch64 (virtualbox, 9.9.1)
On est prêt à provisionner notre première VM.
Vagrantfile
On crée un dossier pour notre environnement de test :
mkdir test_vagrant
cd test_vagrant
Pour créer notre environnement on utilisera la commande init:
vagrant init debian/stretch64
Cette commande créer un fichier Vagrantfile qui ressemble à cela :
# -*- mode: ruby -*-
# vi: set ft=ruby :
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Every Vagrant development environment requires a box. You can search for
# boxes at https://vagrantcloud.com/search.
config.vm.box = "debian/stretch64"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# NOTE: This will enable public access to the opened port
# config.vm.network "forwarded_port", guest: 80, host: 8080
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine and only allow access
# via 127.0.0.1 to disable public access
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
# Create a public network, which generally matched to bridged network.
# Bridged networks make the machine appear as another physical device on
# your network.
# config.vm.network "public_network"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
# Example for VirtualBox:
#
# config.vm.provider "virtualbox" do |vb|
# # Display the VirtualBox GUI when booting the machine
# vb.gui = true
#
# # Customize the amount of memory on the VM:
# vb.memory = "1024"
# end
#
# View the documentation for the provider you are using for more
# information on available options.
# Enable provisioning with a shell script. Additional provisioners such as
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
# documentation for more information about their specific syntax and use.
# config.vm.provision "shell", inline: <<-SHELL
# apt-get update
# apt-get install -y apache2
# SHELL
end
Pour lancer la création de la VM on à juste à lancer :
vagrant up
Et la VM sera créée dans Virtualbox.
Ce Vagrantfile n’est pas du tout personnalisé et le nom de la vm correspond au nom du dossier courant.
Je te propose d’utiliser un Vagrantfile plus sympa et facilement personnalisable :
Supprime la VM que l’on vient de crée :
vagrant destroy
Supprime le contenu de ton Vagrantfile
Et place ceci dans ton Vagrantfile :
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "debian/stretch64"
config.vm.hostname = "Ma-VM-debian"
config.vm.network :private_network, ip: "172.16.16.90"
config.vm.provider :virtualbox do |v|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
v.customize ["modifyvm", :id, "--memory", 1024]
v.customize ["modifyvm", :id, "--name", "Ma-VM-debian"]
v.customize ["modifyvm", :id, "--cpus", "1"]
end
config.vm.provision "shell", inline: <<-SHELL
sed -i 's/ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/g' /etc/ssh/sshd_config
service ssh restart
SHELL
end
Avec ce fichier tu peux modifier :
- le nom de la VM
- le Hostname
- la RAM
- l’IP
- le CPU
Tu peux également ajouter des commandes shell en dessous de « config.vm.provision « shell », inline: <<-SHELL », les commandes seront joués une seule fois, lors de la création de la VM.
On lance la VM :
Vagrant up
Au bout de quelques seconde la VM est crée, on peut alors se connecter dessus en SSH :
Le login est mot de passe par défaut son : vagrant / vagrant
ssh vagrant@[ip-de-la-vm]
ou en utilisant la commande :
vagrant ssh nom-de-la-vm
Tu as maintenant un Vagrantfile qui te permet de personnaliser une VM que tu peux créer et supprimer hyper rapidement.
N’hésites pas à aller voir l’article ou je partage mon Vagranfile qui permet de créer plusieurs machine d’un coup ==> lien vers l’article.