kamal-随时随地部署 Web 应用程序
kamal类似于Fly.io,可提供零停机时间部署、滚动重启、资产桥接、远程构建、附件服务管理,以及使用 Docker 在生产环境中部署和管理 Web 应用程序所需的一切,不同的是kamal你需要有 Ruby 环境,可以是本地机器也可以是云服务器。然后kamal会自动构建及部署运行
以下来自官方指南
安装
如果您有可用的 Ruby 环境,则可以使用以下方法全局安装 Kamal:
gem install kamal
否则,您可以通过别名运行 dockerized 版本(将此别名添加到您的 ,或类似内容以简化重用)。~/.bashrc``~/.zshrc
在 macOS 上,使用:
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 上,使用:
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
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
KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD
RAILS_MASTER_KEY=$(cat config/master.key)
现在,您已准备好部署到服务器:
kamal setup
这将:
- 通过 SSH 连接到服务器(默认使用 root,通过 SSH 密钥进行身份验证)。
- 在任何可能缺少 Docker 的服务器上安装 Docker(使用 get.docker.com):为此需要通过 SSH 进行 root 访问。
- 在本地和远程登录注册表。
- 使用应用程序根目录中的标准 Dockerfile 构建映像。
- 将映像推送到注册表。
- 将镜像从 registry 拉取到服务器上。
- 确保 kamal-proxy 正在运行并接受端口 80 和 443 上的流量。
- 使用与当前 Git 版本哈希匹配的应用程序版本启动新容器。
- 告诉 kamal-proxy 在新容器响应 to 后将流量路由到新容器。
200 OK``GET /up
- 停止运行以前版本应用的旧容器。
- 删除未使用的映像和已停止的容器,以确保服务器不会填满。
现在,所有服务器都在端口 80 上为应用程序提供服务。如果您只运行单个服务器,则已准备就绪。如果您运行多个服务器,则需要在它们前面放置一个负载均衡器。对于后续部署,或者如果您的服务器已经安装了 Docker,您可以只运行 .kamal deploy
其它说明请前往官方查看