- Postgresqlの無料枠があるときいて…
- 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
- とりあえず作る。この時点で独立して動くFly.ioのアプリのひとつ
- 無料枠の説明を見る限り、
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()'といった感じで実行
参考にさせていただいた資料
(公式以外)
その他
CI/CD
Fly.ioの金額確認
使用したDockerfile
- 軽量なイメージを使用している
- 依存パッケージをインストールしている
- リリースパッケージを解凍して配置している
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/*
# Copy package
RUN mkdir /srv/release
ADD ./service/service-0.0.1.tar.gz /srv/release/
WORKDIR /srv
CMD /srv/release/bin/service start