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.
- Ubuntu 14.04 LTS (Trusty Tahr) A standard Ubuntu 64-bit box.
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.
Provisioning
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.
- vagrant-librarian-puppet 0.8.0 - A Vagrant plugin to install Puppet modules using Librarian-Puppet.
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.
Development
- 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.
Summary
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.