Sevalla
在本教程中,你将学习如何准备 Ktor 应用程序并将其部署到 Sevalla。你可以使用以下初始项目之一,具体取决于用于创建 Ktor 服务器的方式:
前提条件
在开始本教程之前,你需要创建一个 Sevalla 账户(附赠 $50 免费额度)。
克隆示例应用程序
要打开示例应用程序,请按照以下步骤操作:
- 克隆 Ktor 文档版本库。
- 打开 codeSnippets 项目。
- 打开 embedded-server 或 engine-main 示例,这展示了两种不同的 Ktor 服务器设置方法 — 既可以直接在代码中配置,也可以通过外部配置文件配置。部署这些项目的唯一区别在于如何指定用于监听传入请求的端口。
准备应用程序
步骤 1: 配置端口
Sevalla 使用 PORT
环境变量注入一个随机端口。你的应用程序必须配置为监听该端口。
如果你选择了 embedded-server 示例,且服务器配置在代码中指定,你可以使用 System.getenv()
获取环境变量的值。打开位于 src/main/kotlin/com/example 文件夹中的 Application.kt 文件,并如下所示更改 embeddedServer()
函数的端口形参值:
fun main() {
val port = System.getenv("PORT")?.toIntOrNull() ?: 8080
embeddedServer(Netty, port = port, host = "0.0.0.0") {
// ...
}.start(wait = true)
}
如果你选择了 engine-main 示例,且服务器配置在 application.conf 文件中指定,你可以通过使用 ${ENV}
语法将环境变量赋值给端口形参。打开位于 src/main/resources 中的 application.conf 文件,并如下所示更新它:
ktor {
deployment {
port = 5000
port = ${?PORT}
}
application {
modules = [ com.example.ApplicationKt.module ]
}
}
步骤 2: 添加 Dockerfile
要在 Sevalla 上构建并运行你的 Ktor 项目,你需要一个 Dockerfile。这是一个使用多阶段构建的 Dockerfile 示例:
# Stage 1: Build the app
FROM gradle:8.5-jdk17-alpine AS builder
WORKDIR /app
COPY . .
RUN gradle installDist
# Stage 2: Run the app
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY --from=builder /app/build/install/<project-name>/ ./
ENV PORT=8080
CMD ["./bin/<project-name>"]
请确保将 <project-name>
替换为你在 settings.gradle.kts 文件中定义的项目名称:
rootProject.name = "ktor-app"
部署应用程序
Sevalla 直接从连接的 Git 版本库中构建并部署你的应用程序。这可以托管在 GitHub、GitLab、Bitbucket 或任何受支持的 Git 提供商等平台上。要成功部署,请确保你的项目已提交并推送,并且包含所有必需的文件(例如 Dockerfile、build.gradle.kts 和源代码)。
要部署应用程序,请登录到 Sevalla 并按照以下步骤操作:
- 点击 应用程序 -> 创建应用
- 选择你的 Git 版本库,并选择合适的分支(通常是
main
或master
)。 - 设置应用程序名称,选择区域,并选择你的 Pod 大小(你可以从 0.5 CPU / 1GB RAM 开始)。
- 点击创建,但暂时跳过部署步骤
- 转到 设置 -> 构建,并在构建环境卡片下点击更新设置。
- 将构建方法设置为 Dockerfile。
- 确认 Dockerfile 路径是
Dockerfile
并且上下文是.
。 - 返回你的应用程序的部署选项卡,并点击部署。
Sevalla 将克隆你的 Git 版本库,使用你的 Dockerfile 构建 Docker 镜像,注入 PORT
环境变量,并运行你的应用程序。如果一切配置正确,你的 Ktor 应用将上线,访问地址为 https://<your-app>.sevalla.app
。