デプロイ
コード例: deployment-ktor-plugin
このトピックでは、Ktorアプリケーションをデプロイする方法の概要を説明します。
サーバーKtorアプリケーションのデプロイプロセスを簡素化するために、Gradle用の Ktor プラグインを使用できます。このプラグインは以下の機能を提供します:
- fat JARのビルド。
- アプリケーションのDocker化。
Ktorデプロイメントの固有事項
サーバーKtorアプリケーションのデプロイプロセスは、以下の事項によって異なります。
- アプリケーションを自己完結型のパッケージとしてデプロイするか、サーブレットコンテナ内にデプロイするか。
- サーバーの作成と構成にどのアプローチを使用するか。
自己完結型アプリ vs サーブレットコンテナ
Ktorでは、アプリケーション内で直接、目的のネットワークエンジン(Netty、Jetty、Tomcatなど)を使用してサーバーを作成し、起動することができます。この場合、エンジンはアプリケーションの一部となります。アプリケーションは、エンジン設定、接続、SSLオプションを制御できます。アプリケーションをデプロイするには、パッケージ化して fat JAR または実行可能なJVMアプリケーションとして出力します。
上記のアプローチとは対照的に、サーブレットコンテナがアプリケーションのライフサイクルと接続設定を制御する必要があります。Ktorは、アプリケーションの制御をサーブレットコンテナに委譲する特別な ServletApplicationEngine エンジンを提供しています。サーブレットコンテナ内にデプロイするには、WARアーカイブを生成する必要があります。
構成:コード vs 設定ファイル
デプロイ用の自己完結型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を使用してSSLを直接提供するようにKtorを構成することもできます。
Ktorアプリケーションがサーブレットコンテナ内にデプロイされている場合、SSL設定は有効にならないことに注意してください。
