WAR
コード例: jetty-war, tomcat-war, tomcat-war-ssl
TomcatやJettyなどのサーブレットコンテナ内でKtorアプリケーションを実行できます。これを行うには、アプリケーションをWARアーカイブとしてパッケージ化し、WARデプロイをサポートするサーバーまたはクラウドサービスにデプロイする必要があります。
このトピックでは、以下の方法について説明します。
- サーブレットアプリケーションで使用するためのKtorの設定
- WARアプリケーションの実行とパッケージ化のためのGrettyおよびWarプラグインの適用
- サーブレットコンテナでのKtorアプリケーションの実行
- WARアーカイブの生成とデプロイ
サーブレットアプリケーションでのKtorの設定
Ktorでは、特定のエンジン(Netty、Jetty、Tomcatなど)を使用してサーバーを作成および起動プロセスを、アプリケーション内で直接行うことができます。このセットアップでは、アプリケーションがエンジンの構成、接続、SSL設定を制御します。
サーブレットコンテナにデプロイする場合、コンテナがアプリケーションのライフサイクルと接続構成を制御します。このために、Ktorはアプリケーションの制御をサーブレットコンテナに委譲するServletApplicationEngineエンジンを提供しています。
サーブレットコンテナ内で実行する場合、設定ファイルで定義されたKtorの接続およびSSL設定は適用されません。
TomcatでのSSL構成については、tomcat-war-sslサンプルを参照してください。
依存関係の追加
サーブレットアプリケーションでKtorを使用するには、ktor-server-servlet-jakartaアーティファクトをビルドスクリプトに追加します。
サーブレットコンテナにデプロイする場合、個別のJettyまたはTomcatエンジンの依存関係を追加する必要はありません。
サーブレットの構成
アプリケーションにKtorサーブレットを登録するには、WEB-INF/web.xmlファイルを開き、servlet-class属性にServletApplicationEngineを割り当てます。
<servlet>
<display-name>KtorServlet</display-name>
<servlet-name>KtorServlet</servlet-name>
<servlet-class>io.ktor.server.servlet.jakarta.ServletApplicationEngine</servlet-class>
<init-param>
<param-name>io.ktor.ktor.config</param-name>
<param-value>application.conf</param-value>
</init-param>
<async-supported>true</async-supported>
</servlet>次に、このサーブレットのURLパターンを構成します。
<servlet-mapping>
<servlet-name>KtorServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>Grettyプラグインの構成
Grettyプラグインを使用すると、JettyおよびTomcat上でサーブレットアプリケーションを実行できます。
プラグインを適用するには、build.gradle.ktsファイルを開き、pluginsブロックに次のエントリを追加します。
plugins {
id("org.gretty") version "5.0.1"
}その後、次のようにgrettyブロックで構成できます。
gretty {
servletContainer = "jetty12"
contextPath = "/"
}gretty {
servletContainer = "tomcat10"
contextPath = "/"
}最後に、runタスクを構成します。
afterEvaluate {
tasks.getByName("run") {
dependsOn("appRun")
}
}Warプラグインの構成
Warプラグインを使用すると、サーブレットコンテナへのデプロイ用のWARアーカイブを生成できます。
プラグインを適用するには、build.gradle.ktsファイルを開き、pluginsブロックに次のエントリを追加します。
plugins {
id("war")
}アプリケーションの実行
構成済みのGrettyプラグインを使用して、runタスクでサーブレットアプリケーションを実行できます。たとえば、jetty-warサンプルプロジェクトを実行するには、次のコマンドを実行します。
./gradlew :jetty-war:runWARアーカイブの生成とデプロイ
Warプラグインを使用してWARアーカイブを生成するには、warタスクを実行します。jetty-warサンプルプロジェクトの場合、コマンドは次のようになります。
./gradlew :jetty-war:warタスクが完了すると、対応するモジュールのbuild/libsディレクトリにjetty-war.warが生成されます。
生成されたアーカイブをデプロイするには、ファイルをサーブレットコンテナのjetty/webappsディレクトリにコピーします。
次のDockerfileの例は、生成されたWARファイルをJettyまたはTomcatサーブレットコンテナ内で実行する方法を示しています。
FROM jetty:12.0.29
EXPOSE 8080:8080
COPY ./build/libs/jetty-war.war/ /var/lib/jetty/webapps
WORKDIR /var/lib/jetty
CMD ["java","-jar","/usr/local/jetty/start.jar"]FROM tomcat:10.1.50
EXPOSE 8080:8080
COPY ./build/libs/tomcat-war.war/ /usr/local/tomcat/webapps
WORKDIR /usr/local/tomcat
CMD ["catalina.sh", "run"]完全な例については、jetty-warおよびtomcat-warを参照してください。
