Vagrant 🛠️¶
Vagrant is an open-source tool that helps us to automate the creation and management of Virtual Machines. In a nutshell, we can specify the configuration of a virtual machine in a simple configuration file, and Vagrant creates the same Virtual machine using just one simple command. It provides command-line interfaces to automate such tasks.
Requirements
Virtualbox 📦
Vagrant 📦
Installing Virtualbox in the Host Machine¶
Download link
https://download.virtualbox.org/virtualbox/6.1.30/VirtualBox-6.1.30-148432-Win.exe
Through Command line
sudo apt update
sudo apt install virtualbox
Note
To Run Virtual Machine You should need to Disable the Secure-Boot in BIOS Options of your Machine 🚫
To Verify that your Virtual Box is Working fine or not in Linux, Please hit the below command.
sudo systemctl status virtualbox.service
Installing Vagrant in the Host Machine¶
Download link
https://releases.hashicorp.com/vagrant/2.3.4/vagrant_2.3.4_windows_i686.msi
Through Command line
sudo apt update
sudo apt install vagrant -y
Note
You Should Need to Restart Your Machine After Installation of Vagrant
Creating a Common Directory for all VMs¶
Create a Directory with name vagrantvms 📂
mkdir vagrantvms
cd vagrantvms
To Bring up VM 🚀¶
Create a Directory name ubuntu
mkdir ubuntu 
cd ubuntu
vagrant init ubuntu/bionic64 
vagrant up
vagrant ssh
Create a Directory name centos
mkdir centos 
cd centos
vagrant init geerlingguy/centos7 
vagrant up
vagrant ssh
To Init Specific Vagrant box
Multi VM Vagrantfile 📦¶
mkdir -p vagrantvms && cd vagrantvms
vim Vagrantfile
Vagrant.configure("2") do |config|
  config.hostmanager.enabled = true 
  config.hostmanager.manage_host = true
### Nginx VM ###
  config.vm.define "web01" do |web01|
    web01.vm.box = "ubuntu/bionic64"
    web01.vm.hostname = "web01"
  web01.vm.network "private_network", ip: "192.168.33.11"
  web01.vm.synced_folder "../vprofile-code", "/vprofile-vm-data"
  end
### tomcat vm ###
  config.vm.define "app01" do |app01|
    app01.vm.box = "geerlingguy/centos7"
    app01.vm.hostname = "app01"
    app01.vm.network "private_network", ip: "192.168.33.12"
    app01.vm.synced_folder "../vprofile-code", "/vprofile-vm-data"
  app01.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
  end
  app01.vm.provision "shell", inline: <<-SHELL
#     yum update -y
  yum install epel-release -y
  SHELL
  end
### RabbitMQ vm  ####
  config.vm.define "rmq01" do |rmq01|
    rmq01.vm.box = "geerlingguy/centos7"
  rmq01.vm.hostname = "rmq01"
    rmq01.vm.network "private_network", ip: "192.168.33.16"
  rmq01.vm.synced_folder "../vprofile-code", "/vprofile-vm-data"
  rmq01.vm.provision "shell", inline: <<-SHELL
  # yum update -y
  #yum install epel-release -y
  # yum install wget -y
    SHELL
  end ; f
  ., v/
### Memcache vm  #### 
  config.vm.define "mc01" do |mc01|
    mc01.vm.box = "geerlingguy/centos7"
  mc01.vm.hostname = "mc01"
    mc01.vm.network "private_network", ip: "192.168.33.14"
  mc01.vm.synced_folder "../vprofile-code", "/vprofile-vm-data"
  mc01.vm.provision "shell", inline: <<-SHELL
    yum install epel-release -y
    SHELL
  end
### DB vm  ####
  config.vm.define "db01" do |db01|
    db01.vm.box = "geerlingguy/centos7"
  db01.vm.hostname = "db01"
    db01.vm.network "private_network", ip: "192.168.33.15"
  db01.vm.synced_folder "../vprofile-code", "/vprofile-vm-data"
  db01.vm.provision "shell", inline: <<-SHELL
#   yum update -y
    yum install epel-release -y
    SHELL
  end
end
vagrant up
vagrant ssh