Soon after I started working with Rails, I wanted to start using my own server environment, instead of a managed hosting. I wanted to be able to use any kind of libraries, their versions and any other tools my projects required on my server, set up the way I need it. Thus I got my first VPS.
From one small VPS server, over a period of a few years, I find myself managing 6+ dedicated servers to serve the needs of the applications I’ve developed and maintain.
At the beginning I managed my first server manually: ssh into the machine, install packages, edit the configs… This soon became tedious and I was aware that there are tools designed to do this better. I picked up Chef and never looked back. Nowadays all my servers are managed by cookbooks, deployed by chef-solo in conjunction with my own knife-like toolset based on Mina.
Here’s a short list of some of the more interesting things that I’ve learned and have experience with in conjunction with DevOps:
- MySQL configuration, backup & replication (I’ve developed my own Docker container for this).
- Using Postfix as a relay for services like Mandrill for reliable transactional email delivery.
- Nginx, Unicorn, Upstart for reliably running apps with hot reloads on deploys.
- Infrastructure monitoring using Zabbix (I’ve got my own container for that too).
- Recovery from a failed disk in software RAID environment.
- Setting up rate limiting and basic DDOS attack precautions.
- Defending against small attacks like spam bots, password guessers, etc.
All of these skills translate and support my software development and application design, as I’m much more aware of the whole lifecycle of an application, and the real world usage scenarios that will be thrown at it.