フォーム読み込み中
最近、Rails のエコシステムに新しい変化が起きています。
デプロイに伴う複雑さを排除し、よりシンプルでスムーズな運用体験を実現するために、Thruster 、Kamal Proxy 、および Kamal という構成要素が実装されました。
Puma の前段に Thruster を配置できるようになり、さらに、Kamal Proxy を設定できます。デプロイ時には Kamal が利用可能です。
これらの新しい構成要素は Rails アプリケーションのデプロイや運用をよりシンプルにすることを目指して作られました。
この記事では、Thruster、Kamal Proxy、Kamal の役割と特徴について解説します。
従来の Rails アプリケーションでは、Web サーバとして Nginx や Apache を使用し、アプリケーションサーバとして Puma を採用する構成が一般的でした。しかし、今後は以下のような設計も選択できるようになります:
1つのコンテナ内で Web サーバとアプリケーションサーバを統合することで、構成を簡略化することが可能です。
Thruster は Go 言語で書かれた HTTP/2 プロキシです。
Rails 8 以降では、Dockerfile に Thruster が含まれています。
(Dockerfile)
-snip-
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
-snip-
CMD ["./bin/thrust", "./bin/rails", "server"]
メリット
ただし、細かいチューニングが必要な場合は、依然として Nginx などの選択肢も検討すべきです。
先の図の中のコンテナ単位の枠を見てください。Nginx と Puma+Rails を組み合わせる場合、それぞれ分離したコンテナを docker-compose などで構成することも多かったと思います。Thruster の登場により、Web サーバとアプリケーションサーバの組み合わせを意識しなくてよくなり、単一のコンテナで構築できるようになりました。
Kamal Proxy は、HTTP のリバースプロキシとして機能します。主な特徴は以下の通りです:
特徴
Kamal Proxy は、Thruster、Puma、Rails を監視しながらロードバランサー的な役割を果たします。また、証明書の管理も自動化されており、ユーザーはホスト名を設定するだけで済みます。
AWS などのクラウドサービス上で独自のロードバランサーや証明書管理を行っている場合、Kamal Proxy は使わなくても大丈夫です。そのような環境では、クラウドネイティブなリソースを活用する運用が可能です。
一例として、以下のような構成が考えられます:
クラウドのマネージドサービスを最大限に活用した、柔軟なアプリケーション運用が実現します。
Kamal は、オンプレミスやクラウドなど多様な環境でのデプロイを簡単に行うためのツールです。特定のクラウドプロバイダや商用ツールに依存しません。
使い方は簡単です。設定ファイルを作成し、kamal deploy コマンドを実行するだけです。
$ kamal deploy
内部的には以下の操作が行われます:
簡単すぎて、逆に分かりにくいかもしれないです。デプロイするまでの初期設定時からの操作を一通りやってみましょう。
初期設定時に必要な作業
概略としては下記の作業です。
一つ一つ具体例を見ていきます。
・ドメインの取得とAレコードの設定
どこで DNS を管理していても問題ありません。名前解決できればよいです。
$ dig myapp.example.com
myapp.example.com. 300 IN A 192.0.2.1
・Git リポジトリの初期化
kamal がコミット名を内部で管理用に使います。最低限 commit だけしておいてください。
$ git init
$ git add .
$ git commit -m "Initial commit"
・Docker Hub の利用
コンテナイメージの管理先は、docker hub のレポジトリとします。各項目の適当な名称はこの後の設定ファイルで例示として使います。
・環境変数の設定
$ export KAMAL_REGISTRY_PASSWORD=${上記のアクセストークン}
$ export RAILS_MASTER_KEY=$(cat config/master.key)
・ポート解放
Let's Encrypt の HTTP-01 チャレンジのため、80/tcpを0.0.0.0/0からアクセスできるようフィルタを解放しておく必要があります。証明書が作れたら接続元は絞って問題ありません。
・デプロイの設定ファイル
rails の version8 から一式がディフォルトで使えるようになっています。
(config/deploy.yml)
service: myapp
image:myspace/myapp
registry:
username: ***
password:
- KAMAL_REGISTRY_PASSWORD
servers:
web:
- 192.0.2.1
env:
secret:
- RAILS_MASTER_KEY
ssh:
user: shinya
port: 10022
keys:
- "~/.ssh/dev-key.pem"
proxy:
ssl: true
host: myapp.example.com
builder:
arch: amd64
以上です。
ここまでできていれば、あとは先に紹介したデプロイコマンドを打つだけです。
$ kamal deploy
アクセスしてみましょう。
https://myapp.example.com
Railsの新しい構成要素である Thruster 、Kamal Proxy 、および Kamal は、デプロイに伴う複雑さを排除し、よりシンプルでスムーズな運用体験を実現するために設計されました。
現代の開発者が求める「効率性」と「柔軟性」を兼ね備えた設計思想が反映されています。オンプレミスでもクラウドでも場所を選ばないで活用できる点も魅力です。
これからも Rails の進化から目が離せません!
条件に該当するページがございません