Note: This was drafted 2/23/2014 but i’ve decided to publish for historical purposes. DevOps has evolved a lot since this post was written but I believe the goals and purpose are still applicable. – 6/17/2016
As an application developer, I didn’t know much about the emerging philosophy of DevOps but I did know that manually provisioning servers was slow and error prone. My existing development workflow needed an overhaul so I decided to introduce Chef into my team’s workflow to solve the manual server provisioning issue. To my surprise, Chef has a fairly steep learning curve because the best practices are still evolving and it requires knowledge of a wide range of topics. You’ve got things like ruby, chef-solo vs. chef-server, knife, and berkshelf to think about. Here are some thoughts from my first week with Chef to hopefully provide others some perspective and insight into getting started and also show you what is working for me.
My goals with Chef:
- An environment that is reproducible, scalable and testable.
- Automate provisioning of production, staging and development so everything matches as close as possible. No more manual provisioning at the command line or using tools like MAMP.
- Reduce bugs introduced by developing with mismatched configurations.
- New developer project setup time reduced to a few commands.
- Test different server configurations quickly.
- Faster disaster recovery.
- Future scaling opportunities.
I was introduced to Chef when learning about the providers in Vagrant. I initially tried using Vagrant configured with Puphpet and it worked until I tried to share the configuration and it all blew up. After attempting to debug the issues, I decided to learn to configure the infrastructure directly with Chef.
Infrastructure as code solves many of the growing pains I’ve encountered. I’ve created Chef-gm (general manager) as a workflow and boilerplate for developing web applications. Its core is a combination of concepts built on Chef Solo, Vagrant and Knife for getting past the Chef learning curve. The boilerplate is a set of scripted sysadmin tasks that automate your team’s development and production environments. The workflow gives you some practical use cases and encourages further automation. Fork the Chef-gm repository to get started.