Wprowadzenie
W poprzednim wpisie omówiłem architekturę Cloud Run i sposób działania tej platformy. Dziś czas przejść do praktyki: zbudujemy od podstaw prostą aplikację w Kotlinie, która wystawia endpoint HTTP i przygotujemy ją do uruchomienia na Cloud Run.
Minimalny projekt w Kotlinie
Aplikację stworzymy bez Springa oraz innych frameworków – tylko ktor
, Gradle
i czysty Kotlin.
Struktura projektu:
cloud-run-ktor-hello/ ├── build.gradle.kts ├── settings.gradle.kts ├── src/ │ └── main/ │ └── kotlin/ │ └── com.zamolski.crkhello/ │ └── Main.kt └── Dockerfile
Konfiguracja Gradle
settings.gradle.kts
rootProject.name = "cloud-run-ktor-hello"
build.gradle.kts
plugins {
kotlin("jvm") version "2.1.10"
application
}
application {
mainClass.set("com.zamolski.crkhello.MainKt")
}
kotlin {
jvmToolchain(21)
}
repositories {
mavenCentral()
}
dependencies {
implementation("io.ktor:ktor-server-core:3.2.0")
implementation("io.ktor:ktor-server-netty:3.2.0")
implementation("org.slf4j:slf4j-simple:2.0.17")
}
Kod aplikacji
src/main/kotlin/com/zamolski/crkhello/Main.kt
package com.zamolski.crkhello
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
fun main() {
val port = System.getenv("PORT")?.toIntOrNull() ?: 8080
embeddedServer(Netty, port = port) {
routing {
get("/") {
call.respondText("Hello from Cloud Run!")
}
}
}.start(wait = true)
}
Budowanie i uruchamianie lokalnie
./gradlew run
Otwórz w przeglądarce: http://localhost:8080
Dockerfile dla Cloud Run
FROM gradle:8.14.2-jdk21 AS build
COPY --chown=gradle:gradle . /app
WORKDIR /app
RUN gradle installDist
FROM eclipse-temurin:21-jre
COPY --from=build /app/build/install/cloud-run-ktor-hello /app
EXPOSE 8080
CMD ["/app/bin/cloud-run-ktor-hello"]
Gotowe do wdrożenia
Po zbudowaniu obrazu możesz wdrożyć go do Cloud Run:
gcloud run deploy cloud-run-ktor-hello \
--source . \
--region europe-central2 \
--allow-unauthenticated
Lub z użyciem Jib + Cloud Build – o tym opowiem w przyszłym wpisie.
Co dalej?
W kolejnym wpisie:
-
zbudujemy obraz aplikacji z użyciem Jib (bez Dockera)
-
i wdrożymy ją do Cloud Run za pomocą
gcloud run deploy
.
Repozytorium: https://github.com/mariuszz/cloud-run-ktor-hello
Linki
Inne artykuły z serii
-
Wprowadzenie
-
Przygotowanie środowiska
-
Tworzenie pierwszego projektu Kotlin z Gradle dla Cloud Run