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の設定
Grettyプラグインを使用すると、JettyおよびTomcatでサーブレットアプリケーションを実行できます。このプラグインをインストールするには、build.gradle.kts
ファイルを開き、plugins
ブロックに以下のコードを追加します。
plugins {
id("org.gretty") version "4.0.3"
}
次に、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:run
WARアーカイブの生成とデプロイ
Warプラグインを使用してアプリケーションのWARファイルを生成するには、war
タスクを実行します。jetty-warの例では、コマンドは以下のようになります。
./gradlew :jetty-war:war
jetty-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。