RenderにSpringをデプロイする
調べていてあまり情報がなかったので簡単ですが備忘も兼ねて書いておきます。
Zennはじめましてです、よろしくお願いします。
Renderのページはこちら。
先に結論
以下のようなDockerfileを既存のプロジェクトのルートディレクトリに配置してRender側でWeb Service
でServiceを作成すればデプロイされます。
FROM amazoncorretto:17 AS build
COPY ./ /home/app
RUN cd /home/app && ./gradlew build
FROM amazoncorretto:17-alpine
COPY /home/app/build/libs/spring-render-deploy-0.0.1-SNAPSHOT.jar /usr/local/lib/spring-render-deploy.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","-Dfile.encoding=UTF-8","/usr/local/lib/spring-render-deploy.jar"]
以下から、1からシンプルなプロジェクトを作成してデプロイしてきます。
Spring Initializrでプロジェクトを作る
以上の画像のように設定をしてInitializeします。Group、Name、Description等はもちろん自由に設定してかまいません。
以下のURLにアクセスすれば画像と同じ設定を読み込めるはずです。
次に、動作確認のためにシンプルなControllerを1つ作成しておきます。
src/main/kotlin/com/example/springrenderdeploy/controller/HelloController.kt
を作成します。pathは適宜読みかえてください。
package com.example.springrenderdeploy.controller
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController
@RestController
class HelloController {
@GetMapping(path = ["/"])
fun hello(model: Model): String {
return "hello!"
}
}
起動して http://localhost:8080/ にアクセスすると hello!
が表示されていればOKです。
ここまでのファイルをGitHubのRepositoryにpushしておきます。
RenderでWeb Serviceを作る
以下のRenderのドキュメントを参考にWeb Service
というtypeのServiceを作ります。2番のところでは先ほどのGitHubのRepositoryを選択します。
Create Web Service.
まで行うと自動でbuildが走りますが、以下のようなエラーでfailするはずです。最後に Dockerfile
を追加します。
#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 2B done
#2 DONE 0.0s
error: failed to solve: failed to read dockerfile: open /home/user/.local/tmp/buildkit-mount/Dockerfile: no such file or directory
Dockerfileを作る
ここで、冒頭で紹介したDockerfileをルートディレクトリに追加します。
spring-render-deploy-0.0.1-SNAPSHOT.jar
の部分はbuild.gradle.kts
とsettings.gradle.kts
の内容によって変わります。適宜読み替えてください。
FROM amazoncorretto:17 AS build
COPY ./ /home/app
RUN cd /home/app && ./gradlew build
FROM amazoncorretto:17-alpine
COPY /home/app/build/libs/spring-render-deploy-0.0.1-SNAPSHOT.jar /usr/local/lib/spring-render-deploy.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","-Dfile.encoding=UTF-8","/usr/local/lib/spring-render-deploy.jar"]
このDockerfileをRepositoryにpushすれば自動でRender側でbuildが走ります。
少し時間がかかりますが、デプロイされるはずです
https://{RenderのWeb ServiceのName}.onrender.com
にアクセスして hello!
が表示されていれば成功です。
以上の手順を辿った簡単なRepositoryが以下にあるので、よければ参考にしてみてください。
Discussion