RubyのデプロイツールKamalがすごく便利
ここ数年はRailsアプリを書いてなかったので知らなかったけど、今のRailsはKamalという、とても便利なデプロイツールを備えていることを知った。
Kamalはもともとは Ruby on Rails のために作られたデプロイツールらしいけど、今はDockerコンテナとしてデプロイする任意のプロジェクトで使えるらしい。
Kamalがやってくれること
- 任意のプロジェクトで
kamal deployを実行すると、 - Dockerイメージを生成
- 生成したDockerイメージをDockerHubなどのレジストリに登録
- デプロイ対象のUbuntuサーバー上で、Dockerイメージをダウンロードして起動
- Ubuntuサーバー上ですでに起動しているDockerコンテナがあったら無停止で新しいコンテナに入れ替え
- 入れ替え前に正常性チェックをして(デフォルトで /up にアクセス)、正常と判断されると入れ替え実施
- SSL/TLS証明書の発行と更新
だいたいこんな感じだと思う。
Kamalがやってくれないこと
KubernetesやFargateがやるような、「停止したら自動再起動」みたいなことはやってくれません。
Kamalはあくまでデプロイツールであって、運用基盤ではないです。
Kamalがあってるプロジェクト
Kamalはいわゆるオーケストレーションをしてくれるツールではなく、あくまでDockerイメージの生成と、対象サーバーへのデプロイツールです。
なので、数百台規模でオーケストレーションするようなシステムのデプロイには多分合わないんじゃないかなーと思います。
しかし、社内向けサーバーや個人開発のWebアプリ、数台規模のシステムであれば十分に機能するし、むしろシンプルで向いていると思います。
ちなみに当サイトもKamalでデプロイしてるんですよ。
Kamalの使い方
最新の Ruby On Rails 8.1系であればKamalは標準で入っています。
事前準備
- デプロイ先のUbuntuサーバーにSSHログインできる状態にする。
- DockerHubなどのレジストリにログインし、レポジトリを作る(PrivateでOK)
- DNSに名前を登録する(サーバーのグローバルIPアドレスと名前のレコードを登録)
config/deploy.ymlに諸々設定
デプロイの事前準備
最初だけ以下を実行
$ ./bin/kamal setup
デプロイ
セットアップが終わったら
./bin/kamal deploy
で、対象サーバーへのデプロイが終わります。
Ubuntuサーバーへのデプロイに rootユーザーを使うか一般ユーザーを使うか、みたいな問題はあるけど、最初はあまり考えずにrootでいいんじゃないかと思います。
デプロイが終わったらDNSに登録した名前でアクセスしてみましょう。
SSL/TLS証明書の登録も正常に終わってれば https://~でアクセスできるはずです。
こういう手軽でしっかりしたデプロイツールが搭載されていると非常に助かりますね。
今後はプライベート、仕事のいずれでも Ruby On Rails のプロジェクトでは使っていこうと思います。
コメント
まだコメントはありません。