For our DevOps Team, the process of automating the installation process has started with the use of shell scripts. But as the team continues to explore new tools and software for automating such processes, a constant flow of ideas and new tools was established. Although there were scenarios wherein they do get stuck, new (sometimes weird) ideas tend to always save the day.
One particular problem proven to be challenging to the team was project specific installations.
“I use to work over LAMP stack, but as I jumped on to DevOps it became very evident to do performance tuning as per the requirement and the usage of the application.” - Nishant Shrivastava, Tech Lead at Webonise Lab
To address this concern, all possible “flavors” of Linux were “tasted”, along with different combinations of web-servers. The realization of getting in to vertical scaling of the application if the web server is not supporting the provided infrastructure dawned on our team. The solution was to keep different kinds of web-servers and packages/libraries installed to ensure that there is one functioning for each application the team has to work on. It was a cumbersome job: installing, upgrading or degrading packages from one application to application. This whole scenario led towards only one thing: virtualization.
What is Vagrant ?
It was trial and error, trying to find the best tools and software to solve the following issues that has arisen but it all goes down to one: Vagrant. Vagrant is a tool used for building development environments. In simple words, Vagrant can manage VMs. It has resolved the issues we had earlier and the problem with handling the different “flavors” of OS’s. What sets it apart is the fact that it features an easy-to-use workflow and puts emphasis on automation, lowering setup time significantly and increasing development/production parity effectively. As the docs say “Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team,” and we totally agree!
Why Vagrant (and Puppet)!
Vagrant along with “Puppet” has proved to be an effective tool in creating a generic approach for the installation process, and in making it less painful. Puppet is one of the main provisions available to Vagrant. Puppet is IT automation software used in the management of infrastructure throughout its lifecycle. It utilizes its own configuration language which was intended to be accessible to sysadmins.
With this combination, the search ended with a very scalable approach towards setting up environments. The two, Vagrant and Puppet; works with a lot of ease. The combination works well with different kinds of applications and with a great variety of web-servers/configurations and libraries. It was the solution the DevOps team has been looking for in the utilization of different dev-environments, along with multiple configurations automated with the help of Puppet. Interested in setting up Vagrant? The following URLs should help you get started:
- Make Vagrant Up yours
- Vagrant : Getting Started
- Development Environment the right way with Vagrant and Puppet
- Rapidly Building LAMP Development Environments with Vagrant
Another amazing tool that Nishant Shrivastava, our Tech Lead at Webonise Lab, has shared with us was a Web UI called PUPHPET (http://puphpet.com/). It creates and customizes your environment (specifically PHP) and gives you a downloadable manifest. It’s a short and easy way to create manifest, and automating it along with the GUI.