Fly.io からの移行
Fly.io のアプリは Docker イメージなので、たいてい同じ Dockerfile で Zenavo にデプロイできます。fly.toml は読まれないので、その設定を次のようにサービスに対応させます。
Fly.io と Zenavo の対応
| Fly.io | Zenavo |
|---|---|
| アプリ | 1 台のサーバー上のプロジェクト内のサービス |
Dockerfile を使う [build] | ルートディレクトリの Dockerfile |
[http_service] の internal_port | サービスの HTTP ポート |
[env] と secrets | 変数 |
[processes] | プロセスごとに、同じリポジトリからそれぞれの起動コマンドで動くサービス |
[deploy] release_command | 起動コマンドの中で、アプリの前に実行するコマンド |
[[mounts]] ボリューム | ボリューム |
| HTTP チェック | HTTP のヘルスチェック |
<app>.internal と Flycast | <hostname>.zenavo.internal(プライベートネットワーク) |
| リージョン、自動停止・起動 | プロジェクトごとに 1 台のサーバー。サービスは動き続けます |
fly certs | Let's Encrypt の証明書を自動発行 |
1. アプリをデプロイする
- サーバーを追加し、プロジェクトを作成します。
- Add Service → GitHub でリポジトリを選びます。プレビューには Dockerfile と表示されるはずです。HTTP ポートをアプリの
internal_portにします。 [processes]の各項目ごとにそのコマンドのサービスを追加し、各[[mounts]]ごとに同じパスでボリュームを追加します。
2. 変数をコピーする
[env] を Variable → Edit Raw Variables にコピーします。fly secrets list は名前しか表示しないので、値は保管している場所から取ってください。データベースの URL は Zenavo のデータベースに向けます。例:DATABASE_URL=${POSTGRESQL_CONNECTION_STRING}。
3. データを移す
PostgreSQL。 Fly Postgres のアプリへのトンネルを開き、プレーンな SQL でダンプします。Zenavo は pg_dump の custom 形式を読めません。
sh
fly proxy 15432:5432 -a my-db
pg_dump --no-owner --no-acl "postgres://postgres:PASSWORD@localhost:15432/my_app" | gzip > fly.sql.gz新しい PostgreSQL サービスの Backup & Restore タブで、同じメジャーバージョンを使ってアップロード・復元します(バックアップのアップロード)。
ボリューム。 マシン上でボリュームを非圧縮のアーカイブにまとめ、ダウンロードします。
sh
fly ssh console -a my-app -C "tar cf /tmp/data.tar -C /data ."
fly ssh sftp get /tmp/data.tar -a my-appプロジェクトを停止した状態で、サービスの Backup & Restore タブから data.tar を新しい空のボリュームに復元します(バックアップと復元)。
4. ドメインを切り替える
Networking でドメインを設定し、Fly を向いている A と AAAA レコードを、サーバーの IP アドレスへの A レコードに置き換えます(ドメインと HTTPS)。