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のデフォルトに合うようにアプリの方を変えておくと楽です。レールから外れれば外れるほど設定が面倒になっていきます。
rails8をKamalでデプロイする
2025年05月11日(日) 02:21