Perl to write a web forum application Founded a neighborhood news site for Downtown L.A. that grew into a weekly print paper While working at Southern California Public Radio, learned Node.js to write a new audio server for the station’s live streams Moved to Atlanta and joined Emcien in June of 2012
businesses find value in their data Founded in 2002 ~20 people; six in Engineering Four main products, mostly Ruby on Rails around an engine written in C
built up by hand or by homegrown attempts at automation No consistent method for managing services No centralized reporting for server and app health All Rails environment and deployment configuration stored inside the app repositories Environments that all assumed they controlled the entire server
you really want Start small: Identify pain points and prioritize Look at the business case Find tools that fit with your existing technology stack Don’t be afraid to write your own glue Just get started
base AMI off of Ubuntu 12.04, with versions of Ruby and nginx/Passenger built and stashed Chef cookbooks to take that base AMI and set it up to run our apps Server gets a key, uses it to look up a databag item that says what environments should be built out
to be updated from your new experience? Assess your pain points. What are the little things you can clean up? Use the goodwill from the first phase to get buy-in for a little bit more this time around
and in the app repository Adding a new environment means creating commits in the repo, which makes the log dirty UI for manipulating environments in a databag is no fun
to explicitly include the apps that we wanted to run Initial AMI / recipes had multiple Ruby versions installed, but could only use one at a time Phusion Passenger limitation lifted with 4.0
X?” was still a manual check, so no at-a-glance view of status When values are scattered, it’s easy to get out-of-sync Management and the services group wants a dashboard for what code is deployed in production
What environments should be deployed on each server? What code and configuration should be deployed on each environment? Need a common application config file format
“Lunch and Learn”: One-stop-shop for metrics about how Emcien’s servers and applications are performing Making provisioning environments a simpler (and eventually self-service) task frees up engineering time Throw-away environments allow for better testing and better development cycles
you like (cookbooks and recipes), but replace the parts you don’t (data bags, lack of reporting in Open Source server) Deployment: Capistrano Build cap configs on-the-fly, leverage existing knowledge and deploy tasks
MCP as part of an effort to move off of Amazon’s RDS Needed a system to administer database backups Running our own database servers was going to save money, so I had a business benefit to use as a starting point
your pain points and limit the scope of your solutions to what you can do successfully. Don’t be afraid to mix your tools. There’s nothing wrong with picking and choosing the parts you like. Find the right mix for your company and your team. Look at the business case. Find spots where DevOps can create value. Demonstrate little wins to get more buy-in for later projects. Find ways to get other groups excited about what you’re building.