如何在 Google App Engine 上部署 Ktor 应用程序?

Posted

技术标签:

【中文标题】如何在 Google App Engine 上部署 Ktor 应用程序?【英文标题】:How to deploy Ktor app on Google App Engine? 【发布时间】:2020-06-26 17:47:39 【问题描述】:

Ktor.io的官方教程不行,我试过了。 这是我的第一次部署。感谢您的帮助。

我的 gradle 文件(kts):

import com.google.cloud.tools.gradle.appengine.appyaml.AppEngineAppYamlExtension

buildscript 
    dependencies 
        classpath("com.google.cloud.tools:appengine-gradle-plugin:2.2.0")
    


apply 
    plugin("com.google.cloud.tools.appengine")


plugins 
    // Support for Kotlin
    id("org.jetbrains.kotlin.jvm") version "1.3.61"
    // Support for building a CLI application
    application
    // Documentation
    id("org.jetbrains.dokka") version "0.10.1"

    war
//    id("com.improve_future.harmonica") version "1.1.24"


application 
    mainClassName = "com.easythings.parkkometr.AppKt"
    group = "com.easythings"
    version = "0.0.1"


sourceSets 
    main 
        java.srcDir("app/main/src")
        resources.srcDir("app/main/resources")
    
    test 
        java.srcDir("app/test/src/")
        resources.srcDir("app/test/resources/")
    


repositories 
    jcenter()
    maven  setUrl("https://kotlin.bintray.com/ktor") 


dependencies 
    val ktorVersion: String by project
    val logbackVersion: String by project
    val exposedVersion: String by project
    val pgVersion: String by project
    val spekVersion: String by project
    val sendGridVersion: String by project
    val assertJVersion: String by project

    // Kotlin ============================================================================
    implementation(platform("org.jetbrains.kotlin:kotlin-bom"))
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")

    // Libs ============================================================================
    // Ktor - framework
    implementation("io.ktor", "ktor-server-jetty", ktorVersion)
    implementation("io.ktor", "ktor-server-core", ktorVersion)
    implementation("io.ktor", "ktor-server-host-common", ktorVersion)
    implementation("io.ktor", "ktor-auth", ktorVersion)
    implementation("io.ktor", "ktor-auth-jwt", ktorVersion)
    implementation("io.ktor", "ktor-gson", ktorVersion)
    implementation("io.ktor", "ktor-network-tls-certificates", ktorVersion)

    // Logback - application logger
    implementation("ch.qos.logback", "logback-classic", logbackVersion)

    // Exposed - orm
    implementation("org.jetbrains.exposed", "exposed-core", exposedVersion)
    implementation("org.jetbrains.exposed", "exposed-dao", exposedVersion)
    implementation("org.jetbrains.exposed", "exposed-jdbc", exposedVersion)
    implementation("org.jetbrains.exposed", "exposed-jodatime", exposedVersion)

    // Postgresql - database driver
    implementation("org.postgresql", "postgresql", pgVersion)

    // SendGrid - mailer
    implementation("com.sendgrid", "sendgrid-java", sendGridVersion)

    // Deploy ============================================================================
    providedCompile("com.google.appengine", "appengine", "1.9.60")

    // Tests ============================================================================


tasks 
    dokka 
        outputDirectory = "$buildDir/docs/dokka"
        outputFormat = "html"
    

    test 
        useJUnitPlatform 
            includeEngines("spek2")
        
    


configure<AppEngineAppYamlExtension> 
    deploy 
        setAppEngineDirectory(".")
        version = "1"
        projectId = "XYZ-placeholder"
        stopPreviousVersion = true  // default - stop the current version
        promote = true              // default - & make this the current version
    
    stage 
        setAppEngineDirectory(".")
    

我的 app.yaml 文件:

runtime: java
env: flex

handlers:
  - url: /.*
    script: this field is required, but ignored

我收到部署已成功完成的信息,但是当我调用 gcloud app browse 时收到 403 错误。

HTTP ERROR 403 访问 / 时出现问题。原因:

Forbidden

我认为我的应用程序没有启动,这是来自 Jetty 的错误,但我不知道如何检查/确认和修复它。

任务appengineRun在这个版本的GAE中不存在。

【问题讨论】:

【参考方案1】:

首先,提供了 App Engine 标准环境的 Ktor 教程,但您在 app.yaml 文件中有“flex”环境。 另外我想建议您关注官方提供更多信息的Google Cloud documentation for Ktor。

【讨论】:

以上是关于如何在 Google App Engine 上部署 Ktor 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

在 Google App Engine 上部署 create-react-app

如何从 Google App Engine 中的单个 app.yaml 文件部署 Java 应用程序的多个版本

在 Google App Engine 上部署 create-react-app-typescript

如何在 Google App Engine 上设置暂存环境

部署在 Google App Engine 上的应用的 /healthz 路由返回 404

如何减少 Google App Engine 部署的 ktor App 文件大小