1 minute read

Fly.ioの利用関してハマったところを含めて簡単にまとめておく。

アカウント登録

GitHub連携やメアドで登録。無料枠を増やしたい場合はクレカ登録する。

ツールのインストール

基本コマンドでの操作なので、flyctlというcliツールをインストールする。

Install flyctl

サインイン

> flyctl auth login

配備の準備

アプリがあるディレクトリに移動してflyctl launchを実行し、fly.tomlDockerfileを始めとした配備に必要なファイルを生成。

> cd /my/rails/app
> flyctl launch

質問があるので、それに答える。名前は面倒なので自動生成。

  • リージョン。日本にいるので今回は Tokyo, Japan (nrt)
  • Upstash Redis databaseは無料枠の100MBで作成

他のPaaS環境を併用する場合、Dockerfile等のが存在が邪魔になったりする場合があるので、必要に応じて.gitignoreに登録しておくこと。

環境に応じて、fly.toml等のファイルを修正。

環境変数の定義

アプリの実行環境に必要な環境変数をflyctl secrets setコマンドで設定。

flyctl secrets set PACKAGES_AUTH_TOKEN=ghp_xxx
flyctl secrets set MONGODB_URI=mongodb+srv://xxx:yyy@zzz/dbname
flyctl secrets set BUNDLE_GITHUB__COM=ghp_xxx:x-oauth-basic
flyctl secrets set SECRET_KEY_BASE=xxx
flyctl secrets set REDIS_URL=redis://default:[email protected]
flyctl secrets set SENDGRID_API_KEY=xxxxx

REDIS_URLを定義するのに、Redis環境の確認。

flyctl redis status xxx-yyy-zzzz-redis
Redis
  ID             = xxxxxxxxxxxxxxxxxx
  Name           = xxx-yyy-zzzz-redis
  Plan           = Free
  Primary Region = nrt
  Read Regions   = None
  Eviction       = Disabled
  Private URL    = redis://default:[email protected]

ビルド時の環境変数

PACKAGES_AUTH_TOKENBUNDLE_GITHUB__COMなど、ビルド時にも使われる環境変数はDockerfileへ渡すよう定義する。

変数定義に関連したファイルのコピー操作も修正。

- COPY --link package.json yarn.lock ./
+ COPY --link package.json yarn.lock .npmrc ./

Swapの設定

デフォルトだと、Swapが不足してOOMEでアプリがほぼ確実に停止するので設定する。

アプリを開始するときにswapを作成する操作を挿入。rootでコマンドを開始するよう、DockerfileのUSER定義を削除し、docker-entrypointにてroot時の処理を追加し、操作のあとに一般ユーザ(rails)に切り替えるようにする。

Dockerfile

- USER rails:rails

bin/docker-entrypoint

#!/bin/bash -e

if [ $UID -eq 0 ]; then
  fallocate -l 512M /swapfile
  chmod 0600 /swapfile
  mkswap /swapfile
  echo 10 > /proc/sys/vm/swappiness
  swapon /swapfile
  echo 1 > /proc/sys/vm/overcommit_memory
  exec su rails $0 $@
fi

exec "${@}"

自動停止の無効化

デフォルトだと一定期間アイドルだとアプリが勝手に止まるようで、それを抑止したい場合は、fly.tomlauto_stop_machinesfalseにする。

fly.toml

- auto_stop_machines = true
+ auto_stop_machines = false

配備

> flyctl deploy

状態の確認

状態を確認。

> flyctl status
App
  Name     = xxx-yyyy-zzzz
  Owner    = personal
  Hostname = xxx-yyyy-zzzz.fly.dev
  Image    = xxx-yyyy-zzzz:deployment-xxxxxxxxxxxxxxxxxxxxxxxxxx
  Platform = machines

Machines
PROCESS ID              VERSION REGION  STATE   CHECKS  LAST UPDATED
app     xxxxxxxxxxxxxx  13      nrt     started         2023-06-30T01:21:14Z

ブラウザで確認。

> flyctl open
opening http://xxx-yyyy-zzzz.fly.dev ...

ログ確認

> flyctl logs

アプリ環境へのログイン

アクセストークンを確認

> flyctl auth token
xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

アクセストークンをつけてログイン。

> flyctl ssh console -t xxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

参考