愿景
在过去十多年中,出现了大量商业产品,使网络应用部署变得更加容易。Heroku 以令人难以置信的产品开启了这一潮流,并且似乎永远领先于竞争对手。如今,我们拥有 Fly.io 和 Render 等卓越的替代方案。托管式 Kubernetes 也使 AWS、GCP、Digital Ocean 及其他地方变得更加简单。但这些都是让您在云中以高价租赁计算机的产品。如果你想运行自己的硬件,甚至只是有一条明确的迁移路径以在以后这样做,你需要仔细考虑将如何锁定到这些商业平台。最好在账单吞噬你的整个业务之前!
Kamal 旨在将这些商业产品开创的人体工学进步带到任意位置部署网络应用中。无论是像 Digital Ocean、Hetzner、OVH 等提供的没有托管服务标记的低成本云选项,还是你自己的同置裸机。对于 Kamal,它们都是一样的。将包含未经添加 SSH 密钥之外的任何准备的香草 Ubuntu 服务器的 IP 地址列表馈送到配置文件中,你将在短短几分钟内运行。
此方法为你提供了巨大的可移植性。你可以像这样轻松地将你的网络应用部署在多个云中。或者,你可以使用自己的硬件购买基准,然后在大幅季节性增长前部署到云中以获取更大的容量。当你不从工具的角度锁定到单个提供商时,会有很多引人注目的选项可供选择。
最终,Kamal 的目的是通过不绑定到任何商业产品的开源工具来压缩进入生产环境的复杂性。记住,不是归零。如果你仍然对基本 Linux 或 Docker 有困难,完全托管服务可能仍然更好,但只要熟悉了这些概念,你就可以开始使用 Kamal 了。
为什么不直接运行 Capistrano、Kubernetes 或 Docker Swarm?
Kamal 基本来说是容器的 Capistrano,无需事先精心准备服务器。无需确保服务器具有您所需的 Ruby 版本或其他依赖关系的正确版本。所有内容现在都存在于 Docker 镜像中。您可以启动全新的 Ubuntu(或任何其他)服务器,将其添加到 Kamal 中的服务器列表中,它将使用 Docker 自动置备,并立即运行。Docker 的图层缓存还可以加快部署速度,减少服务器上的杂务。为 Kamal 构建的镜像可用于 CI 或以后的内省。
Kubernetes 十分复杂。在您自己的硬件上自己运行它并不适合胆小者。如果您想在其他人的平台上运行,那么这是一个不错的选择,无论是在 Render 等平台上以透明的方式运行,还是明确在 AWS/GCP 上运行,但如果您希望自由地在云和您的硬件之间移动,甚至将二者结合,Kamal 就简单得多。您可以看到所有正在进行的操作,只是调用基本的 Docker 命令。
Docker Swarm 比 Kubernetes 简单得多,但它仍然建立在使用状态协调的相同声明式模型上。Kamal 经过精心设计,可以围绕命令式命令而运行,比如 Capistrano。
最终,部署 Web 应用程序的方法有很多,但这是我们已经在37signals中使用的工具包,我们将HEY以及我们所有其他以前由云托管的应用程序带回我们自己的硬件 - 同时不会失去现代容器化工具的优势。
名称
Kamal 以古代阿拉伯航海工具命名,水手通过它确定其纬度以确定航线。(Kamal 以前称为 MRSK)。