Slide 1

Slide 1 text

@jacoyutorius kamalでRailsアプリを Amazon Lightsailにデプロイするぞ! 2025/01/23 JAWS-UG浜松 x Media JAWS

Slide 2

Slide 2 text

小木悠斗 (@jacoyutorius) • JAWS-UG浜松&静岡 • Hamamatsu.rb • 空き家問題の解消をミッションとする株式会社クラッ ソーネというスタートアップでデベロッパーをやって います。 • 業務改善・チームマネージメント・SREなど様々。 • 最近アップライトベースを練習しています (まずは五 線譜読めるようになるところから…) ୭ʁ

Slide 3

Slide 3 text

要約 • kamalでRails8アプリをデプロイしてみたので、そのまとめです。

Slide 4

Slide 4 text

kamalとは? • Railsデベロッパーのパイセンこと、DHHが2023/10ごろ発表したデプロイ ツール。 • Railsだけでなく、Dockerで動くアプリケーションであればなんでもOK。

Slide 5

Slide 5 text

https://exploration.marinersmuseum.org/object/kamal/ kamalは、船乗りが北極星で緯度を測り針路を決めるために使用した 古代アラブの航海道具にちなんで名付けられました。

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Amazon Lightsailとは? • AWSの提供するVPS(Virtual Private Server) • セットアップが簡単 • 従量課金ではないため月額料金が明確 • ストレージやネットワーク設定などが1まとめに作成されるので小規模な アプリケーションの立ち上げに向いている

Slide 8

Slide 8 text

デプロイするアプリはDockerで動かすため、OSのインストールだけでOK。

Slide 9

Slide 9 text

メモリ512MBだとOut of Memoryが出たので 1GB以上が良さそうです。

Slide 10

Slide 10 text

Lightsail側の設定 sshで接続するユーザーをdockerグループに追加

Slide 11

Slide 11 text

kamalに期待・・・! • Railsアプリをお手軽にデプロイしたい! • でもECSとかにデプロイするのは面倒… • VPC作ってSecurityGroup, AZ, CodePipeline, etc, etc • ElasticBeanstalk?知りませんねそんな(ry

Slide 12

Slide 12 text

kamal init kamalの初期設定を行う(プロジェクトディレクトリに設定ファイルが生成 される)。 Rails8ではデフォルトでインストール済み

Slide 13

Slide 13 text

kamal setup 対象のサーバーにssh接続。 Dockerの有無を確認して、なければインストール

Slide 14

Slide 14 text

デプロイ用イメージのビルドとpush (いつか Github Actions等で自動化しよう)

Slide 15

Slide 15 text

kamal deploy デプロイする。

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

“kamal-proxy”というプロキシが動いていて、それが 新旧プロセスの切り替えをしたり、SSL証明書を発行したり、リクエストを ルーティングしたりしている。 https://github.com/basecamp/kamal-proxy 仕組み?

Slide 19

Slide 19 text

俺達が本当に欲しかったもの • CodePipelineでデプロイしなくてはいけないアプリが一体どれだけこの世 に必要か。 • アプリケーションは公開して使ってもらわなければ意味がない。 • その意味で、Railsアプリケーションを開発環境からシームレスに本番 デプロイできて、環境構築の手間も少なく、低コストでデプロイできる ようになったのはとてもアツい。

Slide 20

Slide 20 text

Rails側の進化もいいぞ • Raiils8からSQLiteが本番用DBとして利用できるようになった。 • 本番環境を作る時に、MySQLやPostgresを立てる必要がない! • Docker Volumeでproduction.sqliteが永続化されるので、デプロイしても DBが消えない。 • なので、I/0を気にしなければ本番でもsqliteをDBにしたRailsアプリが 運用できる👏

Slide 21

Slide 21 text

感想 • ドキュメントを読む限り、よくあるケースのRailsアプリの構成には対応 している様子 • 複数のAppサーバー • Redisによるキャッシュ機構 • ActiveJobによる非同期処理 •

Slide 22

Slide 22 text

おわり