fly.ioでデプロイする方法 忘備録
前提
docker、docker-compose、railsのアプリをfly.ioにデプロイしたいと思います。
準備
flyctlのインストールとfly.ioへのサインアップ、クレジットカードの登録を行っておきます。
brew install flyctl
flyctl auth signup
手順
既存のDockerfileを使用しようとするとうまくいかなったので予めDockerfileの名前を変更しておきます。
mv Dockerfile Dockerfile.local
fly launchを叩いて対話的質問に答えていきます。
Dockerfileがない状態でfly launchをすると新たにDockerfileを生成してくれます。
アプリで使用しているrubyのバージョンはホスト環境に予めインストールしておいてください。
fly launch # 自動的にソースコードをスキャンしてRailsアプリであることを判定してくらしい Scanning source code Detected a Rails app # アプリケーションの名前を指定する。空白でエンターを押すと自動的に名前がつけられる。 ? Choose an app name (leave blank to generate one): # リージョンを指定する。選択肢の中から東京リージョンを選ぶ ? Choose a region for deployment: Tokyo, Japan (nrt) # yを入力してPostgreSQLを作成する ? Would you like to set up a Postgresql database now? (y/N) # 無料枠のDevelopmentを選ぶ ? Select configuration: Development - Single node, 1x shared CPU, 256MB RAM, 1GB disk # Redisを使用するかどうかを指定する # 使う場合はyを使わない場合はNを押すといいと思います。 ? Would you like to set up an Upstash Redis database now? (y/N) # yを入力して.dockerignoreファイルを生成する ? Create .dockerignore from 1 .gitignore files?
するとDockerfile
やfly.toml
などが生成されます。
また、dockerfile-rails
がGemfile
に追加されます。
redisを使う選択をした場合はredis
もGemfileに追加されます。
生成されたDockerfileに下記を追加します。 ENTRYPOINTの上あたりに書けばいいと思います。
RUN rm -f tmp/pids/server.pid
fly deployでデプロイします。 最後にsuccessfullyと出たらデプロイに成功です。
fly deploy 1 desired, 1 placed, 1 healthy, 0 unhealthy [health checks: 1 total, 1 passing] --> v1 deployed successfully
fly openでデプロイしたページを開けます
fly open
seedデータがある場合は fly ssh consoleでサーバに接続できるのでseedデータを作成します。
fly ssh console cd rails bundle exec rails db:seeds
-Cオプションでワンライナーでもできるらしいのですがrails aborted!
No Rakefile found (looking for: rakefile, Rakefile, rakefile.rb, Rakefile.rb)
と出てうまくいきませんでした。
試してはないですが下記のサイトの方法を試すことでうまくいくかもしれません。
community.fly.io
環境変数は下記のコマンドでセットすることができます。
flyctl secrets set XXX=yyy
ログは下記のログで見ることができます。
flyctl logs
production環境にデプロイすることになるので、本番環境用の設定を追加してあげるといいと思います。
ただし、データベースとの設定は環境変数DATABASE_URL
が使われる(自動で設定されます)ので
database.yml
ファイルを編集する必要はないみたいです。
$ flyctl secrets list Update available 0.0.493 -> 0.0.495. Run "flyctl version update" to upgrade. NAME DIGEST CREATED AT DATABASE_URL e1d6875307e7602b 2023-03-20T23:52:58Z
下記のコマンドでpostgreSQLに接続できます
fly postgres connect -a <postgres-app-name>(postgres-app-nameはfly.ioのダッシュボードから確認できます)
最後にDockerfileの名前を変更したので 引き続きローカルで実行できるようdocker-compose.ymlも修正しておくといいと思います
build: context: . dockerfile: 'Dockerfile.local'