rails8をKamalでデプロイする

rails8.0.2のプロジェクトをKamalでさくらインターネットのVPSにデプロイしました。 ## デプロイ先のサーバー選定 Ubuntuの最新(24.04)、日本のリージョンという条件だと海外のを含めてもキャンペーンなければ1000円前後がほとんどかなと思います。RubyKaigiでもスポンサードしてくださってるさくらインターネットを応援する意味でも1Gプランの石狩第1リージョン(880円)を選びました。 メモリ512MB、海外のリージョンでもいいというのであれば[Vultr](https://www.vultr.com/)や[DigitalOcean](https://www.digitalocean.com/)なども選択肢となりそうです。 ## Kamalでのデプロイ ### firewallの設定 下記のポートを開けておく必要があります。 - ssh: 23 - http: 80 - ssl: 443 大体のサービスのようにさくらインターネットのVPSでも管理画面で簡単にポートの解放ができます。 ### sshの設定 デフォルトではデプロイ先のサーバーにsshでrootで鍵認証で入れることが前提となっています。 ``` # /etc/ssh/sshd_config: PermitRootLogin prohibit-password PubkeyAuthentication yes ``` sshdの設定でこれらを許可しておきましょう。 ### kamalの設定 rails8からはkamalがデフォルトで入っています。kamal関係のファイルは下記になります。 - Dockerfile - config/deploy.yml - .kamal/hooks/* - .kamal/secrets railsデフォルトであれば変更する必要があるのは`config/deploy.yml`と`.kamal/secrets`だけです。 rails newされた時のデフォルトから変更したのは下記だけです。 proxy.sslを`true`にしておくだけでLet’s Encryptを使った証明書の発行と自動更新の設定をやってくれます。便利! ```yaml # config/deploy.yml service: tallk image: komagata/tallk servers: web: - sakura.fjord.jp proxy: ssl: true host: tallk.fjord.jp registry: username: komagata ``` secretsはsecretなもの(そのまま)を書くところです。1passwordなどから持ってくるような書き方もできますが、一番簡単なのはそのまま書くことでしょう。secretsは他人に見られないようにgitの管理下から外し(ignore)ましょう。 ``` # .kamal/secrets KAMAL_REGISTRY_PASSWORD=xxxxxxxxxxxxxxxx RAILS_MASTER_KEY=$(cat config/master.key) ``` ### デプロイ これで初回は`kamal setup`、初回以降は`kamal deploy`でデプロイできます。 ### DNS もちろんドメイン(今回の場合はtallk.fjord.jp)が該当のサーバーに向くように設定しておいて下さい。 ## 注意点 **`/up`が必要** kamalは`/up`でヘルスチェックをしているので、古いrailsからバージョンアップした場合やrails以外のアプリをデプロイする場合は正常なステータスを返す`/up`を用意して下さい。 **デフォルトが楽** rails本体のようになるべくkamalのデフォルトに合うようにアプリの方を変えておくと楽です。レールから外れれば外れるほど設定が面倒になっていきます。