Exposed IntelliJ IDEA Ktor Plugins Releases Tutorials 开发工具 编程语言与框架

部署 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 的技巧,别忘了持续关注,下次见!

Discover more

网络研讨会视频:快速上手,使用 Kotlin 把支付宝小程序装进自己的 App

写一个 Android App 或许不难,但企业对于移动应用的要求愈来愈高,不只要求开发速度、稳定度、质量等,甚至希望能具备动态扩展的架构设计、在 App 中自启动小程序。面向这些需求,若是有好的开发工具及平台的支持,将可以大大降低开发及运维的成本。本次网络研讨会特别邀请到支付宝高级无线开发工程师温盛章为大家演示用 Kotlin 开发移动应用,并集成 mPaaS 让 App 具备小程序能力。 (本次视频已同步发表至 B 站) 主題分享 本次分享共有三个关键字: Kotlin 、 小程序 、 mPaaS 。温盛章首先从用户、开发、技术、平台等四大视角,向大家说明小程序是什么?简单来说,小程序就是一种拥有完整生命周期、应用间相互隔离、独立运行于宿主应用内的应用。而小程序从工作型 App、平台型 App、超级 App 到新阶段一路的演化历程,目前已经可以有接近 Native 的体验和顺畅、也可以有 H5 的快捷发布的优势。 对小程序有概念后,温盛章就以 Android Studio 演示如何在一个 Mobile App 里,以 Kotlin 撰写 Mobile App 的代码,并接上 mPaaS 平台,让 App 有自启动小程序的能力。要接入 mPaaS,首先需在 Android Studio 里安装 mPaaS 插件,并到阿里云的 mPaaS 后台创建一个新建用。接着,在 Andro

网络研讨会视频:重构还是重写?聊聊 Java 代码臭味与重构技巧

在重构一书里,将有问题的代码称作代码臭味(Code Smells,有些翻译成”代码异味”、”代码坏味道”),表示这份代码可能有设计上的问题、或是因为写得太凌乱而难以维护。总得来说,这份代码需要通过重构来改善。这样的场景往往是许多开发者的每日工作,因此,判定一位开发者的等级,往往就是看他的重构技巧是否熟练。本次网路研讨会特别邀请到 Odd-e 敏捷教练张博超(Jackson)为大家演示如何用 IntelliJ IDEA 的重构功能来改善 Java 代码臭味。 (本次视频已同步发表至 B 站) 主題分享 在本次的分享里,张博超先用一个日常工作的场景给大家举了个例子:我们在工作前可能会先收拾一下桌子、重启电脑、提前打开软件、在昨天写的代码上加注释,这些动作代表很多情况下,人会有直觉去做改善措施,这些改善措施的背后都会对应一个需要解决的问题。写代码也是类似的,每当我们说要改善代码前,需要先想清楚这个改善的目标是什么?是要解决什么问题?同时,我们也要思考这个改善的作法是不是能真正的解决问题? 为了让大家具体体现重构的过程,张博超以一个计算预算的代码为例子,实际以 IntelliJ IDEA 演示该怎么综合运用提取变量、提取方法、提取类、引入参数对象、修改构造函数等重构功能安全地修改代码,将一个原本高达 30 行、充满原始类型迷恋(Primitives Obsession)、过分亲密(In