Vagrant comes built-in with access to a number of provisioners — or configuration management tools — that allow us to configure a newly deployed host by installing packages, setting configurations, and managing packages. In this hands-on lab, we leverage the shell and file provisioners to set up a LAMP stack across to servers and ensure the appropriate Apache website configuration is used.
Learning Objectives
Successfully complete this lab by achieving the following learning objectives:
- Create the Vagrantfile
Move into the
lamp
project directory and generate a new Vagrantfile:cd lamp/ vagrant init
Open the Vagrantfile, and then update it to create two different machine method blocks, one for each guest:
Vagrant.configure("2") do |config| config.vm.box = "fgrehm/trusty64-lxc" config.vm.provider "lxc" config.vm.define "web" do |web| end config.vm.define "db" do |db| end end
- Set Up Provisioning
Use the shell and file provisioners to run the needed scripts and add the desired configuration:
Vagrant.configure("2") do |config| config.vm.box = "fgrehm/trusty64-lxc" config.vm.provider "lxc" config.vm.define "web" do |web| web.vm.provision "shell", path: "scripts/apache-install.sh" web.vm.provision "file", source: "configs/apache-example.site", destination: "/tmp/configs/apache-example.site" web.vm.provision "shell", path: "scripts/apache-sites.sh" end config.vm.define "db" do |db| db.vm.provision "shell", path: "scripts/mysql-install.sh" end end
- Save and exit the file.
- Test the Vagrantfile
Deploy the environment:
vagrant up
Ensure Apache was installed on the
web
guest:vagrant ssh web sudo service apache2 status exit
Ensure MySQL was installed on the
db
guest:vagrant ssh db sudo service mysql status exit