Every project needs a sane, easy to create development environment. Towards that end I have created a base virtual environment that I use as a starting point for all of my development environments. The environment I use is available on the master branch at https://github.com/ErikEvenson/development-environment. Use of the environment is described in the README file. The environment's technology stack is described at https://github.com/ErikEvenson/development-environment/blob/master/docs/technology_stack.md. I typically use this development environment on a Mac host.

June 2015 Update: I have updated the development envionment that I use since I authored this post. The new environment supports my current MEAN stack projects as well as my legacy Backbone/Marionette/Django applications. The new environment is available at https://github.com/ErikEvenson/devbox.

Virtual environment

The virtual environment uses Vagrant. Vagrant is one of the most useful tools to have in your toolbelt. The tool makes spooling up development environment a breeze.

  • Vagrant - Vagrant is used to manage development environment configuration.

Vagrant installs Ubuntu 14.04 as an operating system. 14.04 is a long term supported version of Ubuntu, is recently released, and is widely supported.

VirtualBox is used to host the virtual environment.

  • VirtualBox - Used to host development environment.

Distributed version control systems:

Two of the most popular distributed version control systems (DVCSs) are installed:

  • git - A free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

  • mercurial - A scalable distributed version control system.


Provisiong is handled with Puppet.

  • puppet - Puppet is a framework designed to help system administrators automate the many repetitive tasks they regularly perform.

Puppet is great and as you add new Puppet modules you find a basic linting module to be helpful. Puppet lint is installed to provide this.

  • puppet-lint Check that your Puppet manifest conform to the Puppet style guide.

Provisioning of the virtual environment can take a while, so caching of the packages that you commonly use can greatly reduce the time you have to wait for your development box to become available.

  • vagrant-cachier - A Vagrant plugin that helps you reduce provisioning time by sharing a common package cache among similiar virtual machine instances.

Wrangling Puppet modules is much easier with the installation of vagrant librarian.

Inevitably you will want to share files between your virtual environment and the host environment. This is supported by VirtalBox's Guest Additions. vagrant-vbguest is installed to insure the corrent version of Guest Additions is installed.

  • vagrant-vbguest - Automatically keeps VirtualBox Guest Additions up to date.

Some foundational Puppet modules are installed to make provisioning and the devlopment of new modules easier.

  • puppetlabs-apt Provides a simple interface for managing APT source, key, and definitions with Puppet.

  • puppetlabs-stdlib Provides a "standard library" of resources for developing Puppet Modules.


  • vim 2:7.4.052-1ubuntu3 - vim is an advanced text editor that seeks to provide the power of the de-facto Unix editor 'Vi', with a more complete feature set.


So that's it. A number of items are configurable in the Vagrantfile including the IP address of the VM. I build on this environment depending on the project. I have an extension of this stack to support MEAN stack projects, and one to support Django-based project. I'll share the MEAN stack environment in a future post.

AuthorErik Evenson