kamal
Deploy web apps anywhere.
Kamal deploys any Docker-based web app to any server over SSH with zero downtime, switching traffic from the old version to the new one without taking the site offline.
Kamal is a deployment tool for web applications. It lets you push your app to any server, whether that is a cheap bare-metal machine you rent directly or a virtual machine from a cloud provider, without the app going offline during the update. The README is brief and points to an external documentation site for full details.
The way zero-downtime updates work is through a companion tool called kamal-proxy, which sits in front of your app and switches incoming requests from the old version of the app to the new version once the new one is running and ready. Kamal communicates with your servers over SSH, so no special agent needs to be installed on each server in advance.
The tool was originally created by Basecamp, the company behind the Ruby on Rails web framework, and it works naturally with Rails apps. It is not limited to Rails, though: any web application that can be packaged as a Docker container can be deployed with it. Kamal is written in Ruby and is released under the MIT license, which allows use in both personal and commercial projects.
Where it fits
- Deploy a Rails or any Docker app to a cheap bare-metal server or VPS without downtime
- Roll out updates automatically using kamal-proxy to switch traffic between old and new app versions
- Set up a production server without installing any special agent software, just SSH access and Docker
- Manage deployments to multiple servers from a single config file