Open1
Fly.ioでPhoenixアプリケーションのデプロイを試した記録
- 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 deploy -i <dockerimage>
- マイグレーション
- SSHで入って行う(こともできる)
- 手元では、
/srv/release/bin/service rpc 'MyApp.Release.migrate()'
といった感じで実行
参考にさせていただいた資料
(公式以外)
その他
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