Vagrant, FreeNas And An Automated Life

Somewhere during the week my OS X Leopard installation became so broken that it made more sense to go for a clean install than attempt another workaround. The installation was well over two-years old and for the amount of fiddling and development work that gets done on the machine it had held on quite well. But after a point the debt accrued from numerous hacks and fixes around problems started eating up more time and thought and I felt it was better to just dedicate a day or two and start from scratch with the OS X.

Having chosen that path, I decided to change the manner in which I do my development. Having heard a lot of good things about Vagrant, I wanted to give it a shot. One of the broken things on the old installation was QT, which meant that I could not get Virtualbox installed as it was dependent on QT. Thus, moving to a Vagrant-based development set up would have necessitated a reinstall in any case. The other change I made was to convert my old netbook into a FreeNas machine, which means that it would handle DLNA, storage and file transfers on its own and also consume very little power as it is an Atom-based machine.

Instead of using one of the many available boxes for Vagrant, I built my own base box with the following set-up:

Centos 6.4 (64 bit)
Apache
PHP
MySQL
Beanstalkd
memcached
RabbitMQ
Supervisord
Postgresql
Mailcatcher
Chef
Puppet

Once I can find a bit of time, I will upload the base box and related Vagrant files for anyone who would like to use the same.

The current set up forwards everything to port 80 to the VM’s port 80 using ipfw and using Vagrant’s file sync, all my web directories remain on my main hard disk. This has wound up giving me a very consistent development environment, much like my production one and it also means saying goodbye to the confusion one has to go through every time to compile and get things to run on OS X, even though it has gotten so much easier compared to 6-7 years ago.

This also has the benefit of making the primary OS a much more simpler affair to handle. It has now has only a code editor, Git, Subversion, Vagrant, couple of browsers, Dropbox and LibreOffice as its main components. My development stack is almost a level now that I can have nearly complete device independence and portability as I can always easily move my development Vagrant box to another machine and get started there in less than 5-minutes.

The timing for doing this, though, was not that great. I lost a good two-days in it, but the longer it was kept off, the more it would have cost in time and money along the way and this is one of the many investments that need to be made towards running a smart and lean operation. Next steps will be to fully automate provisioning, testing, logging and deployment, which will enable me to focus more on the key aspects of running the business than spend many hours doing repetitive tasks while waiting for finding talented people who can do all of this.