デプロイメント
コード例: deployment-ktor-plugin
このトピックでは、Ktorアプリケーションをデプロイする方法の概要を説明します。
サーバーKtorアプリケーションのデプロイプロセスを簡素化するために、Gradle向けのKtorプラグインを使用できます。このプラグインは以下の機能を提供します。
- Fat JARのビルド。
- アプリケーションのDocker化。
Ktorデプロイの特性
サーバーKtorアプリケーションのデプロイプロセスは、以下の特性に依存します。
- アプリケーションを自己完結型パッケージとしてデプロイするか、サーブレットコンテナ内でデプロイするか。
- サーバーを作成および構成するために使用する方法。
自己完結型アプリとサーブレットコンテナ
Ktorでは、アプリケーション内で直接、目的のネットワークエンジン(Netty、Jetty、Tomcatなど)を使用してサーバーを作成および起動できます。この場合、エンジンはアプリケーションの一部です。アプリケーションは、エンジン設定、接続、およびSSLオプションを制御できます。アプリケーションをデプロイするには、Fat JARまたは実行可能JVMアプリケーションとしてパッケージングできます。
上記のアプローチとは対照的に、サーブレットコンテナはアプリケーションのライフサイクルと接続設定を制御する必要があります。Ktorは、アプリケーションの制御をサーブレットコンテナに委譲する特別なServletApplicationEngine
エンジンを提供します。サーブレットコンテナ内にデプロイするには、WARアーカイブを生成する必要があります。
設定:コードと設定ファイル
自己完結型Ktorアプリケーションのデプロイ設定は、サーバーの作成と構成に使用されるアプローチ(コード内での設定、または設定ファイルの使用)に依存する場合があります。例として、ホスティングプロバイダーは、受信リクエストをリッスンするためのポートの指定を要求する場合があります。この場合、コード内またはapplication.conf
/application.yaml
でポートを設定する必要があります。
パッケージング
アプリケーションをデプロイする前に、以下のいずれかの方法でパッケージングする必要があります。
Fat JAR
Fat JARは、すべてのコード依存関係を含む実行可能なJARです。Fat JARをサポートする任意のクラウドサービスにデプロイできます。GraalVM用のネイティブバイナリを生成する場合にもFat JARが必要です。Fat JARを作成するには、Gradle用のKtorプラグイン、またはMaven用のAssemblyプラグインを使用できます。
実行可能JVMアプリケーション
実行可能JVMアプリケーションは、コード依存関係と生成された起動スクリプトを含むパッケージ化されたアプリケーションです。Gradleの場合、Applicationプラグインを使用してアプリケーションを生成できます。
WAR
WARアーカイブを使用すると、TomcatやJettyなどのサーブレットコンテナ内にアプリケーションをデプロイできます。
GraalVM
Ktorサーバーアプリケーションは、異なるプラットフォーム用のネイティブイメージを持つためにGraalVMを利用できます。
コンテナ化
アプリケーションをパッケージングした後(例: 実行可能JVMアプリケーションまたはFat JARとして)、このアプリケーションを含むDockerイメージを準備できます。このイメージは、Kubernetes、Swarm、または必要なクラウドサービスのコンテナインスタンス上でアプリケーションを実行するために使用できます。
公開
以下のチュートリアルでは、特定のクラウドプロバイダーにKtorアプリケーションをデプロイする方法を示します。
SSL
Ktorサーバーがリバースプロキシ(NginxやApacheなど)の背後に配置されている場合、またはサーブレットコンテナ(TomcatやJetty)内で実行されている場合、SSL設定はリバースプロキシまたはサーブレットコンテナによって管理されます。必要に応じて、Java KeyStoreを使用してKtorがSSLを直接提供するように設定できます。
Ktorアプリケーションがサーブレットコンテナ内にデプロイされている場合、SSL設定は有効にならないことに注意してください。