kamal-随时随地部署 Web 应用程序

介绍

kamal类似于Fly.io,可提供零停机时间部署、滚动重启、资产桥接、远程构建、附件服务管理,以及使用 Docker 在生产环境中部署和管理 Web 应用程序所需的一切,不同的是kamal你需要有 Ruby 环境,可以是本地机器也可以是云服务器。然后kamal会自动构建及部署运行

官网:https://kamal-deploy.org

以下来自官方指南

安装

如果您有可用的 Ruby 环境,则可以使用以下方法全局安装 Kamal:

1
gem install kamal

否则,您可以通过别名运行 dockerized 版本(将此别名添加到您的 ,或类似内容以简化重用)。~/.bashrc``~/.zshrc

在 macOS 上,使用:

1
alias kamal='docker run -it --rm -v "${PWD}:/workdir" -v "/run/host-services/ssh-auth.sock:/run/host-services/ssh-auth.sock" -e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock" -v /var/run/docker.sock:/var/run/docker.sock ghcr.io/basecamp/kamal:latest'

在 Linux 上,使用:

1
alias kamal='docker run -it --rm -v "${PWD}:/workdir" -v "${SSH_AUTH_SOCK}:/ssh-agent" -v /var/run/docker.sock:/var/run/docker.sock -e "SSH_AUTH_SOCK=/ssh-agent" ghcr.io/basecamp/kamal:latest'

然后,在您的 app 目录中,运行 .现在编辑新文件 .它可能看起来很简单:kamal init``config/deploy.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
service: hey
image: 37s/hey
servers:
- 192.168.0.1
- 192.168.0.2
registry:
username: registry-user-name
password:
- KAMAL_REGISTRY_PASSWORD
builder:
arch: amd64
env:
secret:
- RAILS_MASTER_KEY

在您的环境中设置并编辑您的文件以读取它(以及使用 Rails 应用程序进行生产)。KAMAL_REGISTRY_PASSWORD``.kamal/secrets``RAILS_MASTER_KEY

1
2
KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD
RAILS_MASTER_KEY=$(cat config/master.key)

现在,您已准备好部署到服务器:

1
kamal setup

这将:

  1. 通过 SSH 连接到服务器(默认使用 root,通过 SSH 密钥进行身份验证)。
  2. 在任何可能缺少 Docker 的服务器上安装 Docker(使用 get.docker.com):为此需要通过 SSH 进行 root 访问。
  3. 在本地和远程登录注册表。
  4. 使用应用程序根目录中的标准 Dockerfile 构建映像。
  5. 将映像推送到注册表。
  6. 将镜像从 registry 拉取到服务器上。
  7. 确保 kamal-proxy 正在运行并接受端口 80 和 443 上的流量。
  8. 使用与当前 Git 版本哈希匹配的应用程序版本启动新容器。
  9. 告诉 kamal-proxy 在新容器响应 to 后将流量路由到新容器。200 OK``GET /up
  10. 停止运行以前版本应用的旧容器。
  11. 删除未使用的映像和已停止的容器,以确保服务器不会填满。

现在,所有服务器都在端口 80 上为应用程序提供服务。如果您只运行单个服务器,则已准备就绪。如果您运行多个服务器,则需要在它们前面放置一个负载均衡器。对于后续部署,或者如果您的服务器已经安装了 Docker,您可以只运行 .kamal deploy

其它说明请前往官方查看