Skip to main content

Provisioning a LAMP Stack with Vagrant

Hands-On Lab

 

Photo of Elle Krout

Elle Krout

Content Team Lead in Content

Length

00:30:00

Difficulty

Beginner

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.

What are Hands-On Labs?

Hands-On Labs are scenario-based learning environments where learners can practice without consequences. Don't compromise a system or waste money on expensive downloads. Practice real-world skills without the real-world risk, no assembly required.

Provisioning a LAMP Stack with Vagrant

Introduction

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.

Create the Vagrantfile

  1. Move into the lamp project directory and generate a new Vagrantfile:

    cd lamp/
    vagrant init
  2. 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

  1. 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
  2. Save and exit the file.

Test the Vagrantfile

  1. Deploy the environment:

    vagrant up
  2. Ensure Apache was installed on the web guest:

    vagrant ssh web
    sudo service apache2 status
    exit
  3. Ensure MySQL was installed on the db guest:

    vagrant ssh db
    sudo service mysql status
    exit

Conclusion

Congratulations — you've completed this hands-on lab!