DevOps Guidelines

We use a variety of tools for managing various aspects of our applications. This document attempts to outline those tools at a high level.

Docker

Docker is a thin wrapper for Linux containers (lxc). You can think of lxc containers as virtualenv for an entire operating system. Docker is an increasingly leveraged tool on our team. We use it for continuous integration, development, and deployment.

Docker has a learning curve that can be steep. It's highly recommended that you run through the interactive tutorial located here to start familiarizing yourself.

If you need to store or deploy a container, we have a private Docker registry located at https://docker.vokal.io. If you don't have the credentials, ask somebody on the team to provide them so that you can push/pull containers as you like.

Finally, be sure to review our internal Docker best practices.

Docker-Compose

docker-compose is a tool for isolating development environments in Docker containers. Docker Compose allows you to easily replicate the distributed system that your application will eventually live inside of, all via containers. This allows you to do all of your development in an environment that replicates your staging and production environments almost perfectly.

Fabric

Fabric is a Python library and command line tool for streamlining the use of SSH for application deployment or systems administration tasks. It allows you to write scripts in Python that perform all the necessary steps to deploy a build to (via boto3) Amazon EC2 instances.

Drone

We use Drone for continuous integration. We have some best practices and a sample config documented for your convenience. Every Systems project goes through Drone.

nginx

Most Python-based applications are served behind nginx. Check out a sample configuration file with the latest security best practices.

Amazon AWS

Amazon AWS is a suite of cloud technologies that form the backbone of all our applications. Once deployed, your applications will live on EC2 virtual machines that you configured. Your static content will be stored in S3. You can leverage RDS for your Postgres databases, SNS for push notifications, and SQS when you need a task queue. Leverage Amazon as much as possible for your projects. If you want to play around and learn about certain AWS tools, we have our own account that you can use to explore.

When working on any client project, the client will provide credentials to an AWS account that they are paying for. Make sure that you have these credentials as early as possible on every project.

New Relic

New Relic is an incredibly valuable tool for monitoring your application once it goes live. It provides a detailed color picture about the anatomy of your running app and will give you nearly all the insight you need to ensure that your application is performing at its peak.

Just like AWS, clients pay for New Relic. Make sure you work with a PO to get access to a paid New Relic account as soon as possible, so that you can monitor your application earlier.

Loggly

Loggly is a complement service to New Relic that provides a centralized, cloud-based logging solution for your application. Just like New Relic, this is a required tool and you should make sure that you work with a PO to get paid credentials as early as possible on every project.