Skip to content

デプロイ

このトピックでは、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設定は有効にならないことに注意してください。