Agricamera's entire software environment was built with DevOps in mind from the start. Before any new software was written careful thought was taken to make sure the development environments were immediately reproducible by issuing just a couple of commands using Vagrant and Ansible. All of Agricamera's services are cloud based.

This forethought meant deploying to production was just an extension of the development process. Ansible scripts were created which allowed every aspect of Agricamera's architecture to be deployed and re-deployed instantly. This included provisioning of highly available node, web and database servers. As well as the management of 100's of remote devices deployed up and down the country.

In order to monitor the servers, Agricamera use OMD/Check_MK ( wrappers around Nagios ) which provide a number of standard "off the shelf checks" on the system, as well as custom checks which were written especially for Agricamera's software. Logstash and Kibana are used to give the ops team insight into customers problems with bespoke dashboards written to help better understand the systems. Integration with HipChat allows rapid response when problems do occur.

Agricameras databases are automatically backed up to Amazon S3 using cron jobs written in Ansible. The database restore process is also automated for simple "worst case scenario" data restorations.

After experimenting with a number of DevOps tools over the years Ansible quickly stood out as my favourite. The syntax is easy to reason about, the way it works is intuitive, and it's quick to get up and running for any type of technology project. Whereas I'd previously write bash scripts, I'd now opt to write Ansible

Puppet might no longer be the cool kid on the block it once was, but it's powerful language and vast ecosphere make it a good choice for as a configuration tool. Unlike Ansible it can be a little harder to work out exactly what changes are being made ( especially if doing many changes in bulk ) but with tools like Github's Octocatalog-diff this can be resolved as part of your continuous integration solution.

Despite touch competition Jenkins continues to innovate and prove it's self as a hugely valuable tool in the world of DevOps. The latest release feature BlueOcean brings modernisation to the platform that was starting to be greatly needed if it was to keep up. Jenkins is a robust tool for creating continuous integration/delivery pipelines and one which I highly recommend.

In a world where Infrastructure as code is becoming the norm right now there's only one real cloud agnostic option and that's Terraform. It's declarative style of programming is similar to that chosen by Puppet and therefore is quick and easy to pick up. The community is incredibly active and as the world moves away from traditional system operators to "everything as code" Terraform is a must have tool to be able to wield for any practitioner of DevOps.

Some of the tutorials guides I've written over the years

Configuration Management