WAR
コード例: jetty-war, tomcat-war, tomcat-war-ssl
Ktorアプリケーションは、TomcatやJettyを含むサーブレットコンテナ内で実行およびデプロイできます。サーブレットコンテナ内にデプロイするには、WARアーカイブを生成し、それをWARをサポートするサーバーまたはクラウドサービスにデプロイする必要があります。
このトピックでは、以下の方法について説明します。
- サーブレットアプリケーションでKtorを使用するように設定する。
- WARアプリケーションの実行とパッケージングのためにGrettyとWarプラグインを適用する。
- Ktorサーブレットアプリケーションを実行する。
- WARアーカイブを生成してデプロイする。
サーブレットアプリケーションでのKtorの設定
Ktorは、必要なエンジン(Netty、Jetty、Tomcatなど)を使って、アプリケーション内でサーバーを作成および起動することを可能にします。この場合、アプリケーションはエンジンの設定、接続、SSLオプションを制御できます。
上記のアプローチとは対照的に、サーブレットコンテナがアプリケーションのライフサイクルと接続設定を制御する必要があります。Ktorは、アプリケーションの制御をサーブレットコンテナに委譲する特別なServletApplicationEngineエンジンを提供します。
接続とSSLの設定は、Ktorアプリケーションがサーブレットコンテナ内にデプロイされている場合、有効にならないことに注意してください。 tomcat-war-sslサンプルは、TomcatでSSLを設定する方法を示しています。
依存関係の追加
サーブレットアプリケーションでKtorを使用するには、ktor-server-servlet-jakartaアーティファクトをビルドスクリプトに含める必要があります。
Tomcat/Jettyの9.x以前のバージョンを使用している場合は、代わりにktor-server-servletアーティファクトを追加してください。
Ktorアプリケーションがサーブレットコンテナ内にデプロイされている場合、個別のJettyまたはTomcatのアーティファクトは必要ないことに注意してください。
サーブレットの設定
アプリケーションにKtorサーブレットを登録するには、WEB-INF/web.xmlファイルを開き、ServletApplicationEngineをservlet-class属性に割り当てます。
<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の設定
Ktor 3.3.0はJetty 12を必要としますが、Grettyではまだサポートされていません。開発またはデプロイでGrettyに依存している場合は、GrettyがJetty 12をサポートするまでKtor 3.2.3を使用してください。
Grettyプラグインを使用すると、JettyおよびTomcatでサーブレットアプリケーションを実行できます。このプラグインをインストールするには、build.gradle.ktsファイルを開き、pluginsブロックに以下のコードを追加します。
plugins {
id("org.gretty") version "4.1.7"
}次に、grettyブロックで以下のように設定できます。
gretty {
servletContainer = "jetty11"
contextPath = "/"
logbackConfigFile = "src/main/resources/logback.xml"
}gretty {
servletContainer = "tomcat10"
contextPath = "/"
logbackConfigFile = "src/main/resources/logback.xml"
}最後に、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:warjetty-war.warはbuild/libsディレクトリに作成されます。生成されたアーカイブは、jetty/webappsディレクトリにコピーすることで、サーブレットコンテナ内にデプロイできます。例えば、以下のDockerfileは、作成されたWARをJettyまたはTomcatサーブレットコンテナ内で実行する方法を示しています。
FROM jetty:11.0.25
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.41
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。
