Fly.ioにRailsAPIをデプロイしてみた。

8/7/2023

8/7/2023

Fly.ioにRailsAPIをデプロイしてみました。


◎ 使用理由

  • デプロイが簡単
  • 無料枠がある
  • 東京リージョンが利用可能
  • PostgreSQLが利用可能
  • 無料枠でも設定でサーバースリープなしで運用できる


Render.comを利用していましたが、15分リクエストがないとサーバースリープしてしまい、立ち上がりも遅かったので、Fly.ioに変更しました。
また、Fly.ioでは東京リージョンが利用可能という点もメリットだと思います。

◎ 前提

  • Docker環境
  • RailsAPI モード
  • Railsの環境を作成するDockerfileがある

◎ FlyのCLIをcurlでインストール

$ curl -L https://fly.io/install.sh | sh

https://fly.io/docs/hands-on/install-flyctl/(Fly.ioの公式ドキュメント)

◎ FlyのCLIでSignUp / SignIn

新規登録の場合

$ flyctl auth signup

アカウントを持っている場合

$ flyctl auth login

上記コマンドを叩くと、Fly.ioのサインアップ、サインインの画面がブラウザで表示されます。

◎ Flyのビルド

/Railsアプリのルートディレクトリ

$ flyctl launch

コマンドを叩くと下記のメッセージが出ます。

Scanning source code
Detected a Rails app

ファイルを解析して、Railsであると自動で判別してくれます。

1. アプリ名を指定

? App Name (leave blank to use an auto-generated name): 

2. リージョン指定(nrt (Tokyo, Japan)を選択)

? Select region: [Use arrows to move, type to filter]

3. PostgreSQLでデータベースを作成するか、今回は作成するので、y

? Would you like to set up a Postgresql database now? [y/N]

4. 使用する容量(一番上のDevelopmentを選択)

? Select configuration: [Use arrows to move, type to filter]
> Development - Single node, 1x shared CPU, 256MB RAM, 1GB disk
 Production - Highly available, 1x shared CPU, 256MB RAM, 10GB disk
 Production - Highly available, 1x Dedicated CPU, 2GB RAM, 50GB disk
 Production - Highly available, 2x Dedicated CPU's, 4GB RAM, 100GB disk
 Specify custom configuration

5. 今回は、n

? Scale single node pg to zero after one hour? (y/N)

6. Redisを使用するか、今回は作成しないので、n

? Would you like to set up an Upstash Redis database now? [y/N]


7. .dockerignoreファイルを作成するか、今回は作成するので、y

? Create .dockerignore from 1 .gitignore files? (y/N)


PostgreSQLの情報は、下記のように表示されます。

Postgres cluster sample-rails-db created
 Username:  postgres
 Password:  パスワード
 Hostname:  ホスト名
 Flycast:   Flycast
 Proxy port: 5432
 Postgres port: 5433
 Connection string: データベースURL


全てに回答し終わると、このように表示されます。また、flyの設定ファイルのfly.tomlファイルがルートディレクトリに作成されます。

Once ready: run 'fly deploy' to deploy your Rails app.


◎ 環境変数の設定

このように、CLIで設定することができます。Fly.ioのダッシュボードからでも設定できます。

$ flyctl secrets set RAILS_ENV=production


DATABASE_URLRAILS_MASTER_KEYは、自動で設定されています。

◎ fly.tomlファイルの追記

app = "fly launchコマンドで指定したアプリ名"
primary_region = "nrt"
console_command = "/rails/bin/rails console"

[build]

[http_service]
 internal_port = 3000
 force_https = true
 auto_stop_machines = true
 auto_start_machines = true
 min_machines_running = 0
 processes = ["app"]

[[statics]]
 guest_path = "/app/public"
 url_prefix = "/"

staticsの設定項目ですが、

[[statics]]
 guest_path = "/myapp/app/public"
 url_prefix = "/myapp"

自分の環境の場合ですが、このように設定することで、
no such file or directory (os error 2) が出なくなりました。

◎ Fly デプロイ

$ flyctl deploy

◎ アプリ起動

$ flyctl open

flyctl openで、アプリが正常に起動すればデプロイ完了です。