コンテンツにスキップ

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 createfly 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はディレクトリのDockerfilefly.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 createfly pg attachの違いは、前者がPostgresデータベースをホストできるFlyアプリを割り当てて設定するのに対し、後者は選択したアプリ用の実際のデータベースとユーザーを作成することです。要件に適合する場合、単一のPostgres Flyアプリが様々なアプリで使用される複数のデータベースをホストできます。fly launchでFlyにデータベースアプリの作成を依頼すると、fly pg createfly 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.tomlrelease_commandを使用すると、メインサーバープロセスを実行する前に特定のコマンドを実行するようFlyに依頼できます。fly.tomlに以下を追加します:

[deploy]
 release_command = "migrate -y"

Note

上記のコードスニペットは、アプリのENTRYPOINT./Appに設定するデフォルトのVapor Dockerfileを使用していることを前提としています。具体的には、release_commandmigrate -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ドキュメントです。