Fly.ioへRailsアプリをデプロイ
概要
フィヨルドブートキャンプの卒業課題である自作サービスをFly.ioにデプロイしたので手順をまとめました。
環境
- MacOS Monterey 12.6
- Ruby 3.1.2
- Ruby on Rails 7.0.4
- PostgreSQL 14.5
Fly.ioにした理由
当初、自作サービスのプラットフォームはHerokuを予定していましたが、2022.11.28に無料プランの提供を廃止するという発表があったため、別のプラットフォームも含めて検討しました。
Herokuのほか、Render、Railway、Fly.ioを検討対象にしていましたが、作成している自作サービスがHotwireを使用しているので、Regionの影響を大きく受けるのが判明しました。
【参考】Hotwireの良かった点、辛かった点、向いているケース、向いていないケース - 猫Rails
Heroku以外の、Render、Railway、Fly.ioの対応Regionsを調べたところ、一番近いRegionsは、Renderがシンガポール、Railwayは西アメリカ、Fly.ioが東京でした。
Fly.ioはRailsアプリをデプロイする記事あり問題なさそうだったので、Fly.ioで進めることにしました。
インストール・アカウント登録
公式ページのトップページGet Started
から導入手順に進みます。
まずはflyctl
をインストールします。Homebrewがある場合は以下のコマンドでインストールできます。Homebrewについてはこちらにあります。
$ brew install flyctl
次にアカウントを登録します。以下のコマンドを実行します。
$ flyctl auth signup
ブラウザが起動してアカウント登録画面が表示されます。
EメールかGitHubのどちらかを選択できるので、今回はGitHubを選択しました。
GitHubの認証が終わるとクレジットカード入力画面が表示されるが、入力欄の下のリンクでスキップしました。 (注:スキップしたら設定ファイル作成時にエラーが出ました。後述しています。)
スキップするとDocsに移動するのでここで閉じてOK。
ターミナルにメッセージが表示されています。これでログインできました。
Waiting for session... Done successfully logged in as メールアドレス
次回ログインする場合は以下のコマンドでブラウザが起動し、ログイン画面が表示されます。
$ fly auth login
デプロイに必要なファイルを作成
次にデプロイに必要なファイルを作成します。以下のコマンドで表示される質問に答えていけば自動で作成されます。
$ flyctl launch
アプリ名を入力します
Scanning source code Detected a Rails app ? Choose an app name (leave blank to generate one):
リージョンを聞かれるのでそのままTokyo, Japan (nrt)
で決定。
automatically selected personal organization: メールアドレス ? Choose a region for deployment: [Use arrows to move, type to filter]
ここでエラーが発生しました。
Error We need your payment information to continue! Add a credit card or buy credit: https://fly.io/dashboard/my-account/billing
クレジットカード情報を入れないと進めないようなので、公式ページのダッシュボードから入力して再度fly launch
を実行。
以下の質問が出るので、全てNoで回答したら、またアプリ名から質問が始まりました。
? Overwrite "/Users/macbook-it/kyudo-training-log/.dockerignore"? ? Overwrite "/Users/macbook-it/kyudo-training-log/Dockerfile"? ? Overwrite "/Users/macbook-it/kyudo-training-log/lib/tasks/fly.rake"?
Postgresqlを使用しているのでYes。
? Would you like to set up a Postgresql database now?
無料枠で使いたいのでそのまま1番上を選択。
? Select configuration: [Use arrows to move, type to filter] > Development - Single node, 1x shared CPU, 256MB RAM, 1GB disk Production - Highly available, 2x shared CPUs, 4GB RAM, 40GB disk Production - Highly available, 4x shared CPUs, 8GB RAM, 80GB disk Specify custom configuration
するとDB情報やDATABASE_URLが表示されます。二度と見られないと書いてあるので、安全な場所に転記して残しておきます。
Save your credentials in a secure place -- you won't be able to see them again!
Redisは使用していないのでNo。
? Would you like to set up an Upstash Redis database now?
以下のメッセージが表示されます。これで初期設定が完了しました。
Your Rails app is prepared for deployment. If you need custom packages installed, or have problems with your deployment build, you may need to edit the Dockerfile for app-specific changes. If you need help, please post on https://community.fly.io. Now: run 'fly deploy' to deploy your Rails app.
デプロイ
次にデプロイです。以下のコマンドを実行するだけです。
$ fly deploy 【省略】 1 desired, 1 placed, 1 healthy, 0 unhealthy [health checks: 1 total, 1 critical] --> v0 deployed successfully
しばらく待つと完了するので、以下のコマンドでサイトを見ることができます。
$ fly open
ブラウザが立ち上がって表示を確認できました。
なお、URLはhttps://アプリ名.fly.dev
になります。
独自ドメインを使う場合の設定手順については、また記事にしようと思います。
再度デプロイする場合
コードを修正して再度デプロイする場合は、以下のコマンドを実行すればOK。簡単です。
$ fly deploy