🍎

fly.ioでPostgreSQLを使ってRuby on Railsアプリを無料でデプロイする方法

2023/01/26に公開

1. 概要

「個人開発だからお金はかけたくないけど外部には公開したい」なんてお悩みはありませんか?
今回ご紹介するfly.ioなら、かつてのHerokuのように無料でデプロイすることができます。

2. 環境

  • MacBook Air(M1)
  • macOS Ventura version13.1

3. fly.ioとは?

https://fly.io/

Run your full stack apps (and databases!) all over the world. No ops required.

翻訳すると、
「フルスタックアプリケーション(およびデータベース!)を世界中で実行できます。運用は不要です。」
ということらしいです。
AWSやHerokuなどと比べて、よりシンプルかつ手軽に利用できるのがfly.ioの特徴です。
そしてなんと物理サーバーが東京にあるみたい。
さらにDockerイメージにパッケージ化されている限りあらゆるアプリをデプロイでき、postgreSQLも使えて無料利用枠もある。

ということで今回はRailsアプリをデプロイしてみたいと思います。

4. flyctlをインストールする

アカウント作成からデプロイまでを操作できるコマンドラインユーティリティのようです。
OSに合わせて以下のコマンドを実行してインストールします。

4.1. macOS

brew install flyctl

4.2. Linux

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

4.3. Windows

iwr https://fly.io/install.ps1 -useb | iex

5. アカウントを作成する

https://fly.io/app/sign-up
上記のサイトにアクセスするか、以下のコマンドを実行してサインアップのページに移動します。

flyctl auth signup

EmailかGitHubを使用してサインアップします。

画面が遷移するので、「カード番号」と書かれている部分に支払い情報を入力し、「Add Card」をクリックします。

これでアカウントの作成が完了しました。

6. アプリケーションを作成する

Railsアプリを作成しましょう。すでに用意してある方はそれを使われても構いませんし、とりあえずデプロイしてみたいという方は今回私が利用したコードをGitHub上に上げておきましたのでそれをgit cloneなどして利用されてください。

https://github.com/te19oishi/fly.io-rails-app

7. アプリケーションを起動する

アプリケーションの起動のために、どのように配置するかをシステムに伝えるためのfly.tomlファイルが必要ですので、以下のコマンドを入力して生成します。

fly launch

7.1. DockerfileをOverwriteするか

上記のコマンドを実行すると、以下のように出力されますので、yを入力します。

terminal
? Overwrite "/Users/ユーザー名/ディレクトリ名/Dockerfile"? (y/N) 

7.2. アプリケーション名を決める

次はアプリケーションの名前を入力します。
入力せずにEnterを押すと自動的に名前が決まります。

terminal
? Choose an app name (leave blank to generate one):

7.3. リージョンを決める

次にリージョンの選択です。カーソル(>)が出て、上下を押すと移動します。ここでは日本の東京(Tokyo,Japan)を選択します。

terminal
? Choose a region for deployment:  [Use arrows to move, type to filter]
  省略
  :
  Miami, Florida (US) (mia)
> Tokyo, Japan (nrt)
  Chicago, Illinois (US) (ord)
  :
  省略

以下から分かるように、fly.tomlファイルが自動的に生成され、fly上でアプリが作成されました。

terminal
Created app アプリケーション名 in organization personal
Admin URL: https://fly.io/apps/アプリケーション名
Hostname: アプリケーション名.fly.dev
Set secrets on アプリケーション名: RAILS_MASTER_KEY
Wrote config file fly.toml

7.4. PostgreSQLを設定する

次にPostgreSQLをセットアップしますので、ここでyを入力します。

terminal
? Would you like to set up a Postgresql database now? (y/N) 

リージョンと同様にカーソル(>)が出てくるので、今回は料金がかからないようにDevelopmentを選択します。

terminal
? 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

しばらく待つと、以下のようにデータベースが作成されました。

terminal
Postgres cluster アプリケーション名-db created
  Username:    ユーザーネーム
  Password:    パスワード
  Hostname:    アプリケーション名.internal
  Proxy port:  プロキシポート
  Postgres port:  Postgresポート
  Connection string: 接続文字列

7.5. Redisを使うか選択する

そしてUpstashのRedisを使うか問われますが、今回はNとします。また機会があれば書くかもです。

terminal
? Would you like to set up an Upstash Redis database now? (y/N)

するとfly deployでもうデプロイできてしまうようです。

terminal
Now: run 'fly deploy' to deploy your Rails app.

7.6. デプロイする

fly deploy

これでしばらく待ちます。そして最後に

terminal
deployed successfully

と出力されれば完了です。

7.7. ステータスを確認する

デプロイの詳細な情報は以下のコマンドで確認することができます。

flyctl status

ここで、runningsuccesful等出力されていれば成功していると思われます。

8. デプロイできているか確認する

最後にちゃんとデプロイできたかを確認します。
https://アプリケーション名.fly.devにアクセスしてみましょう。

ちゃんとデプロイできていました。

GitHubで編集を提案

Discussion