Open1

Fly.ioでPhoenixアプリケーションのデプロイを試した記録

tatotato
  • 2022年5月時点
  • Phoenix version 1.6.6
    • config/runtime.exsが存在するバージョン
  • ここではDockerイメージにしているものをデプロイする

Fly.io ことはじめ

  • ハンズオン
    • fly launch するときにリージョンが選べる(Tokyoあり)
    • fly launch すると、fly.tomlファイルが作成される。これが各設定になる
  • fly help でコマンド一覧
    • fly help <command> でコマンドごとのヘルプ
      • fly help launch をみるとオプション各種がみれるなど
    • fly status でアプリ名/URLなどがみれる
  • 止め方
    • 無料プラン利用でもクレジットカード登録がいるので事故らないために必要
    • fly scale 0で一時停止、fly destroyで削除

Fly.ioでPostgresqlを用意

  • Postgres on Fly
  • 無料枠の説明を見る限り、Development - Single node, 1x shared CPU, 256MB RAM, 1GB diskにすれば、3GBになるまで無料と思われる(が正確には不明)
  • fly.tomlは作られない。状態をみるには、fly status -a <app-name> などとする

Fly.io上にアプリケーションを登録

  • ここではfly launch のみでデプロイは各種設定後に行う
  • fly launch時にエラーになると、完了していなくてもFly.io上にはアプリが登録されることがあるので、再実行するにはfly destroyで消す必要がある(あるいはそのままdeployを叩けばいけるかもしれない?)

データベースとアプリケーションを接続

  • fly postgres attach --app <app-name> --postgres-app <postgres-app-name>

その他の設定

  • デプロイ前に環境変数を設定する(fly secrets set)
    • DATABASE_URLについては、データベースとつないだときに自動で作成されている
    • そのためDATABASE_URLをEctoの設定で使っている方が楽
    • Flyネットワーク上ではDBインスタンスとIPv6による通信を行う模様。Ecto設定を確認する必要がある
      • デフォルトだと、ECTO_IPV6=trueを設定すると有効になる
  • fly.tomlについてはポートなどを確認して必要に応じて変更する。例えば 8088 => 4000
  • またLiveViewを使う場合は、check_originに今回使用するドメインを設定する必要あり

デプロイおよびマイグレーション

参考にさせていただいた資料

(公式以外)

その他

Fly.ioの金額確認

使用したDockerfile

  • (比較的)軽量なイメージを使用している
  • 依存パッケージをインストールしている
  • リリースパッケージ(service/service-0.0.1.tar.gzに作成済み)を配置している
FROM debian:bookworm-slim

# 依存パッケージ
RUN apt update \
  && apt install -y mecab mecab-ipadic mecab-ipadic-utf8 \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*

# リリースパッケージ
RUN mkdir /srv/release
ADD ./service/service-0.0.1.tar.gz /srv/release/

WORKDIR /srv
CMD /srv/release/bin/service start