Vagrant is Awesome

📚

Historical Content

This article was published on August 7, 2013 and is maintained for historical reference. While the core concepts may still be relevant, specific technical details may be outdated.

I've been working on PHP web apps for years, and over time, my development workflow has remained fairly constant:

  1. Configure new app in apache/nginx
  2. Starting coding to find out my environment is broken
  3. Fix my environment
  4. Continue coding
  5. Get bored
  6. See step 1

Managing DevOps items when I should be focusing on building a product is not beneficial to my productivity.

Enter Vagrant.

Ever wanted to have a dev environment built for you automatically? Yeah, who doesn't? Vagrant can do that for you. With the help of Oracle's VirtualBox, Vagrant creates a virtual machine, can provision it with the packages and services you define in a text file, and creates helpful links in between your host OS and the guest OS.

Phalcon PHP

I need to write another post entitled "Phalcon is Awesome". I've only recently started to develop with the C-extension based PHP framework, but boy does it pack a punch. One phrase before I do a write-up: ~800 requests per second.

The only downside of using Phalcon is having to compile and load it for use by PHP. git clone-ing the cphalcon repo and running the build script is easy enough, but what if you're getting help from a creative that has no idea how to set up a virtual host on their local machine, let alone compiling a PHP extension?

Use Vagrant, of course!

I've been using Vagrant to host a Phalcon project for a while, and I managed to extract out the Vagrant goodies into a stand-alone project: vagrant-phalcon. With the help of a Puppet manifest and a bash script, vagrant-phalcon helps developers of all skill levels start with Phalcon with an easy vagrant up command. Details from the README.md:

Getting Started

  1. Download and install VirtualBox
  2. Download and install Vagrant
  3. Clone this repo
  4. Run vagrant up in the repo directory
  5. Visit http://localhost:8081/ in your favorite browser
Note

Nginx is configured by default to use ./src/Public/ as the root directory. If your public directory differs, be sure to update the Vagrantfile to reflect your needs.

While not perfect, it does the job of setting up a Phalcon dev environment quite well, so I felt content with releasing it out into the wild. Happen to find a problem with it or have a suggestion? Submit an issue, or better yet, submit a pull-request.

Here's an ascii-cast walkthrough:

Shane Logsdon
Technical Product Leader

Technical product leader with 15+ years of experience in developer platforms and payment systems. Helping companies build scalable, secure, and customer-led financial solutions.