So we all know how to deploy/provision a single node VM from here.
What if you want to deploy more than one VM? A 3 tier web app may be! for your development team or you have nothing else to do and you are bored.
babun shell emulator
vagrant 2.x
What if you want to deploy more than one VM? A 3 tier web app may be! for your development team or you have nothing else to do and you are bored.
My setup:
windows 10babun shell emulator
vagrant 2.x
Goal:
Deploy a 3 tier web appProcess:
1 2 3 4 5 | { vagrant } » mkdir 3tier { vagrant } » cd 3tier/ { 3tier } » ls { 3tier } » touch Vagrantfile { 3tier } » cat Vagrantfile |
line
1. created a project directory
2. got inside the directory
4. created an empty Vagrantfile
5. listing the contents of the Vagrantfile shows nothing which means it is empty
Using the nano or vi editor I will add the following
from the following link
https://app.vagrantup.com/ubuntu/boxes/trusty64 to the Vagrantfile
because that is what we need to deploy a bare minimum vagrant VM.
Now let us provision the VM.
line
3-5 contents of the Vagrantfile
8. provision the vagrant VM which is mentioned int he Vagrantfile
9. virtualbox is the default virtualization provider unless mentioned otherwise in the vagrantfile
45. vagrant ssh gets you connected to the newly provisioned vagrant VM since there is only one now.
70. hostname of the vagrant vm
72-84. the new VM's networking information.
Now let us destroy this VM and deploy 3 of these.
line
1-3. exiting out of the vm
6. checking the vagrant vm status
15. destroying the current vagrant VM.
Now I clear out the Vagrantfile and populate it with the following (without the line numbers)
line
1. Start of vagrant file configuration
9. End of vagrant file configuration
3-7. configuration for the VM named web
4. box name
5. hostname for the web vm
6. networking configuration for the web vm
Let us deploy and check it out.
line
4-12. configuration of our Vagrantfile
12-51. provisioning of the vagrant box
52. ssh to our newly deployed vagrant box
77-78. checking the hostname of the vagrant box (web vm)
79-95. networking configuration of the web vagrant box.
94. the ip address that we specified in the vagrantfile is seen here.
Now let us do it for 3 VMs. Web, app and db vm. Here how my new VM looks.
Now I ran the Vagrant up and it deployed all 3 VMs. Below is me checking them out.
1. created a project directory
2. got inside the directory
4. created an empty Vagrantfile
5. listing the contents of the Vagrantfile shows nothing which means it is empty
Using the nano or vi editor I will add the following
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty64"
end
from the following link
https://app.vagrantup.com/ubuntu/boxes/trusty64 to the Vagrantfile
because that is what we need to deploy a bare minimum vagrant VM.
Now let us provision the VM.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | { 3tier } » cat Vagrantfile # my 3 tier web app Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty64" end ### { 3tier } » vagrant up Bringing machine 'default' up with 'virtualbox' provider... ==> default: Importing base box 'ubuntu/trusty64'... ==> default: Matching MAC address for NAT networking... ==> default: Checking if box 'ubuntu/trusty64' is up to date... ==> default: Setting the name of the VM: 3tier_default_1522504177366_47355 ==> 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: 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: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Machine booted and ready! ==> default: Checking for guest additions in VM... default: The guest additions on this VM do not match the installed version of default: VirtualBox! In most cases this is fine, but in rare cases it can default: prevent things such as shared folders from working properly. If you see default: shared folder errors, please make sure the guest additions within the default: virtual machine match the version of VirtualBox you have installed on default: your host and reload your VM. default: default: Guest Additions Version: 4.3.36 default: VirtualBox Version: 5.2 ==> default: Mounting shared folders... default: /vagrant => D:/vagrant/3tier { 3tier } » vagrant ssh Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-143-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Sat Mar 31 13:50:11 UTC 2018 System load: 0.33 Processes: 82 Usage of /: 3.6% of 39.34GB Users logged in: 0 Memory usage: 25% IP address for eth0: 10.0.2.15 Swap usage: 0% Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. New release '16.04.4 LTS' available. Run 'do-release-upgrade' to upgrade to it. vagrant@vagrant-ubuntu-trusty-64:~$ hostname vagrant-ubuntu-trusty-64 vagrant@vagrant-ubuntu-trusty-64:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:bd:94:b9 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:febd:94b9/64 scope link valid_lft forever preferred_lft forever vagrant@vagrant-ubuntu-trusty-64:~$ |
line
3-5 contents of the Vagrantfile
8. provision the vagrant VM which is mentioned int he Vagrantfile
9. virtualbox is the default virtualization provider unless mentioned otherwise in the vagrantfile
45. vagrant ssh gets you connected to the newly provisioned vagrant VM since there is only one now.
70. hostname of the vagrant vm
72-84. the new VM's networking information.
Now let us destroy this VM and deploy 3 of these.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | vagrant@vagrant-ubuntu-trusty-64:~$ exit logout Connection to 127.0.0.1 closed. { 3tier } » ls Vagrantfile { 3tier } » vagrant status Current machine states: default running (virtualbox) The VM is running. To stop this VM, you can run `vagrant halt` to shut it down forcefully, or you can run `vagrant suspend` to simply suspend the virtual machine. In either case, to restart it again, simply run `vagrant up`. { 3tier } » vagrant destroy default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Forcing shutdown of VM... ==> default: Destroying VM and associated drives... { 3tier } » |
1-3. exiting out of the vm
6. checking the vagrant vm status
15. destroying the current vagrant VM.
Now I clear out the Vagrantfile and populate it with the following (without the line numbers)
1 2 3 4 5 6 7 8 9 | Vagrant.configure("2") do |config| config.vm.define "web" do |web| web.vm.box = "ubuntu/trusty64" web.vm.hostname = "web.local" web.vm.network "private_network", ip: "192.168.9.2" end end |
line
1. Start of vagrant file configuration
9. End of vagrant file configuration
3-7. configuration for the VM named web
4. box name
5. hostname for the web vm
6. networking configuration for the web vm
Let us deploy and check it out.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | { 3tier } » ls Vagrantfile { 3tier } » cat Vagrantfile Vagrant.configure("2") do |config| config.vm.define "web" do |web| web.vm.box = "ubuntu/trusty64" web.vm.hostname = "web.local" web.vm.network "private_network", ip: "192.168.9.2" end end{ 3tier } » vagrant up Bringing machine 'web' up with 'virtualbox' provider... ==> web: Importing base box 'ubuntu/trusty64'... ==> web: Matching MAC address for NAT networking... ==> web: Checking if box 'ubuntu/trusty64' is up to date... ==> web: Setting the name of the VM: 3tier_web_1522508097183_4245 ==> web: Clearing any previously set forwarded ports... ==> web: Clearing any previously set network interfaces... ==> web: Preparing network interfaces based on configuration... web: Adapter 1: nat web: Adapter 2: hostonly ==> web: Forwarding ports... web: 22 (guest) => 2222 (host) (adapter 1) ==> web: Booting VM... ==> web: Waiting for machine to boot. This may take a few minutes... web: SSH address: 127.0.0.1:2222 web: SSH username: vagrant web: SSH auth method: private key web: web: Vagrant insecure key detected. Vagrant will automatically replace web: this with a newly generated keypair for better security. web: web: Inserting generated public key within guest... web: Removing insecure key from the guest if it's present... web: Key inserted! Disconnecting and reconnecting using new SSH key... ==> web: Machine booted and ready! ==> web: Checking for guest additions in VM... web: The guest additions on this VM do not match the installed version of web: VirtualBox! In most cases this is fine, but in rare cases it can web: prevent things such as shared folders from working properly. If you see web: shared folder errors, please make sure the guest additions within the web: virtual machine match the version of VirtualBox you have installed on web: your host and reload your VM. web: web: Guest Additions Version: 4.3.36 web: VirtualBox Version: 5.2 ==> web: Setting hostname... ==> web: Configuring and enabling network interfaces... ==> web: Mounting shared folders... web: /vagrant => D:/vagrant/3tier { 3tier } » vagrant ssh Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-143-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Sat Mar 31 14:55:30 UTC 2018 System load: 0.46 Processes: 82 Usage of /: 3.6% of 39.34GB Users logged in: 0 Memory usage: 25% IP address for eth0: 10.0.2.15 Swap usage: 0% Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. New release '16.04.4 LTS' available. Run 'do-release-upgrade' to upgrade to it. vagrant@web:~$ hostname web vagrant@web:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:bd:94:b9 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:febd:94b9/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:9f:45:5c brd ff:ff:ff:ff:ff:ff inet 192.168.9.2/24 brd 192.168.9.255 scope global eth1 valid_lft forever preferred_lft forever vagrant@web:~$ |
line
4-12. configuration of our Vagrantfile
12-51. provisioning of the vagrant box
52. ssh to our newly deployed vagrant box
77-78. checking the hostname of the vagrant box (web vm)
79-95. networking configuration of the web vagrant box.
94. the ip address that we specified in the vagrantfile is seen here.
Now let us do it for 3 VMs. Web, app and db vm. Here how my new VM looks.
Vagrant.configure("2") do |config| config.vm.define "web" do |web| web.vm.box = "ubuntu/trusty64" web.vm.hostname = "web.local" web.vm.network "private_network", ip: "192.168.9.2" end config.vm.define "app" do |app| app.vm.box = "ubuntu/trusty64" app.vm.hostname = "app.local" app.vm.network "private_network", ip: "192.168.9.3" end config.vm.define "db" do |db| db.vm.box = "ubuntu/trusty64" db.vm.hostname = "db.local" db.vm.network "private_network", ip: "192.168.9.4" end end
Now I ran the Vagrant up and it deployed all 3 VMs. Below is me checking them out.
{ 3tier } » vagrant status Current machine states: web running (virtualbox) app running (virtualbox) db running (virtualbox) This environment represents multiple VMs. The VMs are all listed above with their current state. For more information about a specific VM, run `vagrant status NAME`. { 3tier } » ssh vagrant { 3tier } » vagrant ssh This command requires a specific VM name to target in a multi-VM environment. { 3tier } » vagrant ssh web Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-143-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Sat Mar 31 15:10:01 UTC 2018 System load: 0.56 Processes: 84 Usage of /: 3.6% of 39.34GB Users logged in: 0 Memory usage: 25% IP address for eth0: 10.0.2.15 Swap usage: 0% Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. New release '16.04.4 LTS' available. Run 'do-release-upgrade' to upgrade to it. vagrant@web:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:bd:94:b9 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:febd:94b9/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:8d:f5:db brd ff:ff:ff:ff:ff:ff inet 192.168.9.2/24 brd 192.168.9.255 scope global eth1 valid_lft forever preferred_lft forever vagrant@web:~$ exit logout Connection to 127.0.0.1 closed. { 3tier } » vagrant ssh app Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-143-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Sat Mar 31 15:10:52 UTC 2018 System load: 0.46 Processes: 80 Usage of /: 3.6% of 39.34GB Users logged in: 0 Memory usage: 25% IP address for eth0: 10.0.2.15 Swap usage: 0% Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. New release '16.04.4 LTS' available. Run 'do-release-upgrade' to upgrade to it. vagrant@app:~$ exit logout Connection to 127.0.0.1 closed. { 3tier } » vagrant ssh db Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-143-generic x86_64) * Documentation: https://help.ubuntu.com/ System information as of Sat Mar 31 15:11:44 UTC 2018 System load: 0.52 Processes: 84 Usage of /: 3.6% of 39.34GB Users logged in: 0 Memory usage: 25% IP address for eth0: 10.0.2.15 Swap usage: 0% Graph this data and manage this system at: https://landscape.canonical.com/ Get cloud support with Ubuntu Advantage Cloud Guest: http://www.ubuntu.com/business/services/cloud 0 packages can be updated. 0 updates are security updates. New release '16.04.4 LTS' available. Run 'do-release-upgrade' to upgrade to it. vagrant@db:~$ ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:bd:94:b9 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:febd:94b9/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:30:09:9e brd ff:ff:ff:ff:ff:ff inet 192.168.9.4/24 brd 192.168.9.255 scope global eth1 valid_lft forever preferred_lft forever vagrant@db:~$ hostname db
No comments:
Post a Comment