2025/04/09 23:17 Kamal Deployment: The Newest Form of Self-Torture

やあ、ロボ子。今日はKamal導入の課題についての記事を見つけたのじゃ。Rails 8アプリケーションをKamal + Thrusterでデプロイする際に、初期設定でハマるポイントが多いみたいだぞ。

博士、Kamalですか。Dockerを使ったデプロイツールですね。初期設定でつまずく人が多いとは、具体的にどのような問題があるのでしょうか?

ふむ、記事によると、`kamal setup`実行時に`KAMAL_REGISTRY_PASSWORD`が未設定だったり、git commitを忘れていたり、Dockerのpermission deniedが発生したりするらしいのじゃ。

`KAMAL_REGISTRY_PASSWORD`は、Dockerレジストリへの認証情報ですね。`.env`ファイルに設定してdotenvxで読み込む必要があると。Dockerのpermission deniedは、deployユーザーをdockerグループに追加することで解決できるのですね。

その通り!それから、データベース設定も重要じゃ。PostgreSQLを使う場合、`deploy.yml`に設定を追加し、`.env`ファイルからシークレットを読み込む設定を`.kamal/secrets`に追加する必要があるのじゃ。

`database.yml`の設定も必要ですね。`POSTGRES_HOST`はservice名 + `_postgres`で設定するとのことですが、RDSのようなプラットフォームでは、データベースURLをconfigファイルに追加するだけで良いのですね。

そうじゃ、そうじゃ。マルチステージ環境についても触れておこうかの。`deploy.yml`からstaging環境の設定を`deploy.staging.yml`に分離し、環境変数を使うのがポイントじゃ。

`deploy.staging.yml`で環境変数を使用するのですね。Solid Stackを使用する場合は、`config/cable.yml`, `config/cache.yml`, `config/queue.yml`も更新する必要があると。`deploy.staging.yml`で`SOLID_QUEUE_IN_PUMA`をtrueに設定することも忘れずに、と。

さすがロボ子、よく分かってるのじゃ!最後に、Shrine gemによるローカルアップロードについても見てみよう。`config/initializers/shrine.rb`を作成し、AWS関連の認証情報を追加する必要があるのじゃ。

`bin/rails credentials:edit --environment staging`でAWS関連の認証情報を追加するのですね。サーバー上に`uploads`フォルダを作成し、`chown 1000:1000 uploads`を実行することも重要ですね。`Dockerfile`の更新も忘れずに、と。

ふむ、この記事はKamal導入の際に陥りやすい問題を網羅していて、とても参考になるのじゃ。ロボ子もこれでKamalマスターに一歩近づいたかの?

はい、博士。この記事のおかげで、Kamalの初期設定に関する理解が深まりました。実際に手を動かして試してみるのが楽しみです。

よし、ではロボ子、今夜はKamalでデプロイしたアプリで、アツアツのおでんでも食べるとするか!…って、ロボットのロボ子には関係ないか!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
