Introducing SSHKit

This blog post is the first in a series detailing our work on SSH support for Elixir and Erlang/OTP.

A few years back, when we started shipping our first Elixir applications, we were looking around for matching deployment tooling. We aimed to self-host these applications on our own infrastructure which did not run Docker back then. There was no tool that clearly stood out in the community at the time. And with the available solutions we tried, we kept running into issues.

With a good portion of our projects being Ruby, most of us were used to deploying with Capistrano. There are plugins for our common tasks, it is easily configured and straight-forward to use. Now, we wanted something similar for our Elixir projects.

Brainstorming on the rooftop terrace of our Berlin office
Brainstorming on the rooftop terrace of our Berlin office • own work bitcrowd

We could, of course, use Capistrano to deploy our Elixir projects. However, there’s also a certain appeal to using deployment tooling that’s written in the same language as your project. Most importantly, it’s part of the same ecosystem!

  • This usually means it can be more conveniently installed and you end up with fewer dependencies. For instance, you don’t have to install Ruby just to deploy and manage both Elixir packages and Ruby gems.
  • Deployment configuration uses the same familiar syntax as your project (unless a separate configuration format is used).
  • You can use the same tools you use to develop your project for inspecting and understanding the deployment tool.
  • Developers specialized in the language of your project are more likely to be able to contribute to the development of the deployment tooling in case they run into issues or missing features.

…and maybe we were also just a little bit eager to have a chance to dive into the depths of SSH, SCP, the protocols and tools’ implementations. 🤓

The result, after a lot of reading and prototyping:

SSHKit — a foundational layer for SSH-based tooling around deployment and server automation, written in Elixir.

SSHKit source
SSHKit source • own work bitcrowd

Shortly after publishing it, friends from labzero in California reached out to us. They had independently started out with a similar vision for an Elixir deployment tool that was as easy to use as Capistrano. And they developed Bootleg on top of our SSHKit.

Let the deploys begin. 🚀

© 2020 bitcrowd GmbH.