部署 Ktor 应用至云服务器

发布于 范圣佑

为了让 Kotlin 开发者可以更轻松、更快速地开发出 Web 应用,JetBrains 的技术团队用 Kotlin 打造了 Ktor 框架,只需要几行代码,就可以用简洁易懂的语法写出网站、API 或微服务。写代码是变轻松了,那要怎么部署呢?在这篇教程里就是要跟大家分享,如何将写好的 Ktor 应用以 fat-jar 的方式部署至云服务器。

先创建一个 API 应用

为求教程完整,先简单演示一下如何用 Ktor 创建一个 API 应用吧!先开启 IntelliJ IDEA,选择 Create New Project。

1-1

 

选择左边 Ktor 的项目模板,配置 Project SDK 为 JDK 11、使用 Gradle 做依赖管理、使用 Netty 及最新版的 Ktor。在下方组件的部份,选择 Content Negotiation 下的 Jackson 及 Conten Negotiation 两个组件后按 Next。提醒一下,若你的 IntelliJ IDEA 没有 Ktor 项目模板,请通过插件市场搜索 Ktor 关键字,安装完重启 IDE 即可。以上的配置都以演示为目的,只用最少的组件完成项目,真实的项目会更复杂。你可以依照项目的需求做调配。

1-2

 

在下一个画面配置 GroupId 及 ArtifactId 后点击 Next。

1-3

 

紧接着配置 Project name 及 Project location 后点击 Finish。

1-4

 

创建项目后,开启 src/Application.kt 文件。你会看到 Ktor 项目模板已经帮你配置好 Jackson 并生成 2 个 Route。点击 main 左边的绿色播放键将 Ktor 运行起来。

1-5

 

打开浏览器,输入 127.0.0.1:8080,可以看到显示 HELLO WORLD! 字符串。若是开启 127.0.0.1:8080/json/jackson 则可以看到显示 key 为 hello、value 为 world 的 JSON 格式。

Capture

到目前为止,我们用 IntelliJ IDEA 创建了一个 Ktor 应用,并可以将程序在本机运行起来,通过浏览器看到结果。简单吧?接着,我们要将这个应用构建​​成可部署的 fat-jar 文件。

构建 Ktor 项目

部署 Ktor 项目有很多种方式,包括 war、jar 或是打包在 Docker 容器内。jar 是一种 Java 档案文件,可以将类文件打包成一个单一可运行的文件。生成 jar 文件后,就可以通过 java -jar *.jar 的方式将程序运行起来。暂不考虑其他因素,将 Ktor 打包成 fat-jar 的方式应该是最简单、步骤最少的做法。在这边演示如何将 Ktor 应用以 fat-jar 的方式发布。

安装 Gradle Shadow 插件

为了将 Ktor 程序打包成 fat-jar,我们需要 Shadow 这个 Gradle 插件。开启 build.gradle 文件,配置 Shadow 插件版本及增加命令。(注意此处演示用的版本是 5.1.0,旧版经测试会有问题)

buildscript {

   // ... 
    dependencies {
        // ...
        classpath "com.github.jengelman.gradle.plugins:shadow:$shadow_version"
    }
}

apply plugin: 'com.github.johnrengelman.shadow'
shadowJar {
    mainClassName = "io.ktor.server.netty.EngineMain"
    manifest {
        attributes 'Main-Class': mainClassName
    }
}

配置好后,别忘了开启 IntelliJ IDEA 的 Gradle 窗口,重新导入(Reimport)Gradle 依赖及配置。重新导入后,应该会在 Gadle Tasks 菜单里多一个 shadow 的任务可使用。

2-1

发布 fat-jar

安装好 Shadow 插件后,发布 fat-jar 就变得非常简单。展开 Gradle 面板里的 shadow 任务,双击 shadowJar 命令。Gradle 就会将 Ktor 打包成一个 *.jar 的文件放在 ./build/libs/*-all.jar。通过简单的一键生成,Ktor 程序就变成一个独立、可直接运行的 fat-jar 文件。

2-2

部署 Ktor 至云平台

有了 fat-jar 后,要把 Ktor 部署到哪里差异就不大了。当然,挑一个云平台来架设服务器应该是最简单的方式。为了稳定及方便,许多同学会选择将程序部署到阿里云。而阿里云也有插件集成 IntelliJ IDEA,省下许多繁杂的步骤,让部署更高效。在这边演示如何将上一步的 fat-jar 部署至阿里云 ECS 上。

创建阿里云 ECS 实例

为了部署应用,我们需要先在阿里云创建一台服务器。请先登入阿里云帐号,进入 ECS 后点击右上角的创建实例。

3-1

 

依照自己的需求选择 ECS 实例地域、规格、镜像、存储、网络及安全组,确认后即生成一台新的 ECS 服务器。

3-2

 

为了可以让插件连接阿里云,我们需要产生一组 AccessKey 和 AccessKey Secret。点击右上角的用户图标,选择菜单里的 AccessKey 管理,并在安全信息管理里创建 AK 及 SK。

3-3

配置插件及服务器

接着回到 IntelliJ IDEA,我们要从 IDE 直接连接服务器。请先安装 Alibaba Cloud Toolkit 插件,安装后请进入插件配置,选择 Accounts,将上一步的 AK 及 SK 填入后储存。

4-1

 

开启 Alibaba Cloud View 窗口,切换至 Alibaba Cloud ECS 的 Tab,选择你的服务器地域,应该会看到你刚刚创建的服务器。

4-2

 

点击服务器名称右边的 Terminal 按钮,填入服务器连接的配置信息。输入完毕后,可以用 Test Connection 测试一下是否可以连上服务器。

4-3

成功配置后,即可通过 Terminal 按钮一键连接服务器。插件会开启一个 IntelliJ IDEA 的 Terminal 窗口并以 SSH 连接至服务器。你可以直接通过命令将服务器配置成可以运行 Ktor 的环境,包括安装 JVM 及 HTTP 服务器等。

4-4

部署 Ktor 应用配置服务器

最后也是最关键的一步,就是要将我们打包好的 fat-jar 上传至服务器。开启 Alibaba Cloud View 窗口,点击服务器名称右边的 Upload 按钮。在 Upload 窗口里选择要上传的文件、上传位置,点击 Upload 就可以将文件上传至服务器。

4-5

 

部署后通常会有一些命令需要执行,比方说清除 Cache、重启 HTTP 服务器等。可以将这些动作写成一个 Shell Script 放在服务器上,并在上一步里,把命令输入在 After Upload 的 Command 里。当文件上传完成后,插件会自动执行命令,让部署流程可以更自动化。

在 IDE 辅助下开发 Ktor 应用

在这份教程里,我们通过简单的三个步骤、安装 Ktor 及 Alibaba Cloud Toolkit 两个 IntelliJ IDEA 的插件,就将 Ktor 程序从 0 到上云。整过流程大多都可以在 IDE 的 GUI 里做操作,也不需要在 Editor、Terminal 等程序里切换、输入命令。在 IDE 辅助下开发,除了可以减少人为出错外,开发起来也更高效!由于现在软件更迭的速度很快,以下也列出编写这篇教程时使用的系统及配置供参考。

希望这篇教程能帮助到对 Ktor 有兴趣的同学,下次会再分享其他开发 Ktor 的技巧,别忘了持续关注,下次见!

以下评论无法再编辑。

2 Responses to 部署 Ktor 应用至云服务器

  1. Naijiz Fang says:

    June 14, 2020

    这令人舒爽的主题是啥