AWS Elastic Beanstalk
初始项目:embedded-server 或 engine-main
在本教程中,我们将向您展示如何准备 Ktor 应用程序并将其部署到 AWS Elastic Beanstalk。根据创建 Ktor 服务器所采用的方式,您可以使用以下初始项目之一:
请从 Elastic Beanstalk 文档详细了解如何部署 Java 应用程序。
前提条件
在开始本教程之前,您需要创建一个 AWS 帐户。
克隆示例应用程序
要打开示例应用程序,请按照以下步骤操作:
- 克隆 Ktor 文档仓库并打开 codeSnippets 项目。
- 打开 embedded-server 或 engine-main 示例。这些示例演示了创建和配置 Ktor 服务器的不同方法:在代码中或使用配置文件。部署这些项目的唯一区别在于如何指定端口来侦听传入请求。
准备应用程序
步骤 1:配置端口
首先,您需要指定用于侦听传入请求的端口。Elastic Beanstalk 会在 5000 端口上将请求转发到您的应用程序。此外,您也可以通过设置 PORT 环境变量来重写默认端口。根据配置 Ktor 服务器的方式,您可以通过以下方式之一配置端口:
如果您选择了在代码中指定服务器配置的 embedded-server 示例,则可以使用
System.getenv获取环境变量值,或者在未指定环境变量的情况下使用默认值 5000。打开位于src/main/kotlin/com/example文件夹中的Application.kt文件,并按照如下所示更改embeddedServer函数的port参数值:kotlinfun main() { embeddedServer(Netty, port = (System.getenv("PORT")?:"5000").toInt()) { // ... }.start(wait = true) }如果您选择了在
application.conf文件中指定服务器配置的 engine-main 示例,则可以使用${ENV}语法将环境变量分配给port参数。打开位于src/main/resources中的application.conf文件,并按如下所示进行更新:ktor { deployment { port = 5000 port = ${?PORT} } }
步骤 2:应用 Ktor 插件
本教程将展示如何使用 fat JAR 将应用程序部署到 Elastic Beanstalk。要生成 fat JAR,您需要应用 Ktor 插件。打开 build.gradle.kts 文件并将插件添加到 plugins 块中:
plugins {
id("io.ktor.plugin") version "3.4.3"
}然后,确保已配置主应用程序类:
application {
mainClass.set("io.ktor.server.netty.EngineMain")
}构建 Fat JAR
要构建 Fat JAR,请打开终端并执行 Ktor 插件提供的 buildFatJar 任务:
构建完成后,您应该能在 build/libs 目录中看到 aws-elastic-beanstalk-all.jar 文件。
部署应用程序
要部署应用程序,请登录 AWS 管理控制台并按照以下步骤操作:
- 在 AWS 服务组中打开 Elastic Beanstalk 服务。
- 在打开的页面上,点击 Create Application(创建应用程序)。
- 指定以下应用程序设置:
- Application name(应用程序名称):指定应用程序名称(例如,Sample Ktor app)。
- Platform(平台):从列表中选择 Java。
- Platform branch(平台分支):选择 Corretto 11 running on 64bit Amazon Linux 2。
- Application code(应用程序代码):选择 Upload your code。
- Source code origin(源代码来源):选择 Local file。然后,点击 Choose file 按钮并选择在上一步中生成的 Fat JAR。等待文件上传完成。
- 点击 Create application 按钮,并等待几分钟直到 Beanstalk 创建环境并发布应用程序:
INFO Instance deployment completed successfully. INFO Application available at Samplektorapp-env.eba-bnye2kpu.us-east-2.elasticbeanstalk.com. INFO Successfully launched environment: Samplektorapp-env
