Fly¶
Flyは、エッジコンピューティングに焦点を当てたサーバーアプリケーションとデータベースの実行を可能にするホスティングプラットフォームです。詳細については公式サイトをご覧ください。
Note
このドキュメントで指定されるコマンドはFlyの価格設定の対象となります。続行する前に適切に理解しておいてください。
サインアップ¶
アカウントをお持ちでない場合は、アカウントを作成する必要があります。
flyctlのインストール¶
Flyとやり取りする主な方法は、専用のCLIツールflyctl
を使用することです。これをインストールする必要があります。
macOS¶
brew install flyctl
Linux¶
curl -L https://fly.io/install.sh | sh
その他のインストールオプション¶
その他のオプションと詳細については、flyctl
インストールドキュメントをご覧ください。
ログイン¶
ターミナルからログインするには、次のコマンドを実行します:
fly auth login
Vaporプロジェクトの設定¶
Flyにデプロイする前に、Flyがアプリをビルドするために必要なDockerfileが適切に設定されたVaporプロジェクトがあることを確認する必要があります。ほとんどの場合、デフォルトのVaporテンプレートにはすでにDockerfileが含まれているため、これは非常に簡単です。
新しいVaporプロジェクト¶
新しいプロジェクトを作成する最も簡単な方法は、テンプレートから始めることです。GitHubテンプレートまたはVaporツールボックスを使用して作成できます。データベースが必要な場合は、PostgresでFluentを使用することをお勧めします。Flyでは、アプリが接続できるPostgresデータベースを簡単に作成できます(下記の専用セクションを参照)。
Vaporツールボックスを使用¶
まず、Vaporツールボックスがインストールされていることを確認してください(macOSまたはLinuxのインストール手順を参照)。
次のコマンドで新しいアプリを作成し、app-name
を希望のアプリ名に置き換えてください:
vapor new app-name
このコマンドは、Vaporプロジェクトを設定できる対話型プロンプトを表示します。ここでFluentとPostgresが必要な場合は選択できます。
GitHubテンプレートを使用¶
以下のリストから、ニーズに最も適したテンプレートを選択してください。Gitを使用してローカルにクローンするか、「Use this template」ボタンでGitHubプロジェクトを作成できます。
既存のVaporプロジェクト¶
既存のVaporプロジェクトがある場合は、ディレクトリのルートに適切に設定されたDockerfile
があることを確認してください。VaporのDockerに関するドキュメントとFlyのDockerfileを介したアプリのデプロイに関するドキュメントが役立つかもしれません。
Flyでアプリを起動する¶
Vaporプロジェクトの準備ができたら、Flyで起動できます。
まず、現在のディレクトリがVaporアプリケーションのルートディレクトリに設定されていることを確認し、次のコマンドを実行します:
fly launch
これにより、Flyアプリケーション設定を構成するための対話型プロンプトが開始されます:
- 名前: 名前を入力するか、空白のままにして自動生成された名前を取得できます。
- リージョン: デフォルトは最も近いリージョンです。これを使用するか、リストの他のリージョンを選択できます。これは後で簡単に変更できます。
- データベース: アプリで使用するデータベースをFlyに作成するよう依頼できます。希望する場合は、後で
fly pg create
とfly pg attach
コマンドを使用して同じことができます(詳細についてはPostgresの設定セクションを参照)。
fly launch
コマンドは自動的にfly.toml
ファイルを作成します。これには、プライベート/パブリックポートマッピング、ヘルスチェックパラメータなどの設定が含まれています。vapor new
を使用してゼロから新しいプロジェクトを作成した場合、デフォルトのfly.toml
ファイルは変更不要です。既存のプロジェクトがある場合も、fly.toml
は変更なしまたは軽微な変更のみで問題ない可能性があります。詳細についてはfly.toml
ドキュメントをご覧ください。
Flyにデータベースの作成を依頼した場合、データベースが作成されてヘルスチェックを通過するまで少し待つ必要があることに注意してください。
終了する前に、fly launch
コマンドはアプリをすぐにデプロイするかどうか尋ねます。承諾するか、後でfly deploy
を使用してデプロイできます。
Tip
現在のディレクトリがアプリのルートにある場合、fly CLIツールはfly.toml
ファイルの存在を自動的に検出し、どのアプリをターゲットにしているかをFlyに知らせます。現在のディレクトリに関係なく特定のアプリをターゲットにしたい場合は、ほとんどのFlyコマンドに-a name-of-your-app
を追加できます。
デプロイ¶
Flyに新しい変更をデプロイする必要があるときはいつでもfly deploy
コマンドを実行します。
FlyはディレクトリのDockerfile
とfly.toml
ファイルを読み取り、Vaporプロジェクトのビルドと実行方法を決定します。
コンテナがビルドされると、Flyはそのインスタンスを開始します。アプリケーションが正常に動作し、サーバーがリクエストに応答することを確認するため、さまざまなヘルスチェックを実行します。ヘルスチェックが失敗した場合、fly deploy
コマンドはエラーで終了します。
デフォルトでは、デプロイしようとした新しいバージョンのヘルスチェックが失敗した場合、Flyはアプリの最新の動作バージョンにロールバックします。
Postgresの設定¶
FlyでPostgresデータベースを作成する¶
アプリを最初に起動したときにデータベースアプリを作成しなかった場合は、後で次のコマンドを使用して作成できます:
fly pg create
このコマンドは、Fly上の他のアプリが利用できるデータベースをホストできるFlyアプリを作成します。詳細については専用のFlyドキュメントをご覧ください。
データベースアプリが作成されたら、Vaporアプリのルートディレクトリに移動して次を実行します:
fly pg attach name-of-your-postgres-app
Postgresアプリの名前がわからない場合は、fly pg list
で確認できます。
fly pg attach
コマンドは、アプリ用のデータベースとユーザーを作成し、DATABASE_URL
環境変数を通じてアプリに公開します。
Note
fly pg create
とfly pg attach
の違いは、前者がPostgresデータベースをホストできるFlyアプリを割り当てて設定するのに対し、後者は選択したアプリ用の実際のデータベースとユーザーを作成することです。要件に適合する場合、単一のPostgres Flyアプリが様々なアプリで使用される複数のデータベースをホストできます。fly launch
でFlyにデータベースアプリの作成を依頼すると、fly pg create
とfly pg attach
の両方を呼び出すのと同等の処理が行われます。
Vaporアプリをデータベースに接続する¶
アプリがデータベースにアタッチされると、FlyはDATABASE_URL
環境変数に資格情報を含む接続URLを設定します(機密情報として扱う必要があります)。
最も一般的なVaporプロジェクトの設定では、configure.swift
でデータベースを設定します。以下は設定例です:
if let databaseURL = Environment.get("DATABASE_URL") {
try app.databases.use(.postgres(url: databaseURL), as: .psql)
} else {
// ここでDATABASE_URLが欠落している場合の処理...
//
// または、app.environmentが`.development`か
// `.production`に設定されているかによって
// 異なる設定を行うこともできます
}
この時点で、プロジェクトはマイグレーションを実行し、データベースを使用する準備ができているはずです。
マイグレーションの実行¶
fly.toml
のrelease_command
を使用すると、メインサーバープロセスを実行する前に特定のコマンドを実行するようFlyに依頼できます。fly.toml
に以下を追加します:
[deploy]
release_command = "migrate -y"
Note
上記のコードスニペットは、アプリのENTRYPOINT
を./App
に設定するデフォルトのVapor Dockerfileを使用していることを前提としています。具体的には、release_command
をmigrate -y
に設定すると、Flyは./App migrate -y
を呼び出します。ENTRYPOINT
が異なる値に設定されている場合は、release_command
の値を適応させる必要があります。
Flyは、内部Flyネットワーク、シークレット、環境変数にアクセスできる一時的なインスタンスでリリースコマンドを実行します。
リリースコマンドが失敗した場合、デプロイは続行されません。
その他のデータベース¶
FlyはPostgresデータベースアプリを簡単に作成できますが、他のタイプのデータベースもホストすることが可能です(例えば、Flyドキュメントの"MySQLデータベースを使用する"を参照)。
シークレットと環境変数¶
シークレット¶
シークレットを使用して、機密値を環境変数として設定します。
fly secrets set MYSECRET=A_SUPER_SECRET_VALUE
Warning
ほとんどのシェルは入力したコマンドの履歴を保持することに留意してください。この方法でシークレットを設定する場合は注意してください。一部のシェルは、空白で始まるコマンドを記憶しないように設定できます。fly secrets import
コマンドも参照してください。
詳細については、fly secrets
のドキュメントをご覧ください。
環境変数¶
その他の機密でない環境変数はfly.toml
で設定できます。例:
[env]
MAX_API_RETRY_COUNT = "3"
SMS_LOG_LEVEL = "error"
SSH接続¶
次のコマンドでアプリのインスタンスに接続できます:
fly ssh console -s
ログの確認¶
次のコマンドでアプリのライブログを確認できます:
fly logs
次のステップ¶
Vaporアプリがデプロイされたら、複数のリージョンにわたってアプリを垂直的および水平的にスケーリングしたり、永続ボリュームを追加したり、継続的デプロイメントを設定したり、分散アプリクラスターを作成したりするなど、さらに多くのことができます。これらすべてを行う方法を学ぶ最良の場所はFlyドキュメントです。