やったこと
最小限の作業で完成させた。
手順ゼロについては以下参照
https://qiita.com/isekaigk/items/ab2809a4305d46adbe68
- コントローラー作成
- Dockerfile作成
- Github登録
- RenderとGithub連携
1.コントローラー作成
コントローラー(受け渡し部品)の作成をした
リンク(リクエスト)と動作をマッピングする。今回の動作は「Hello Wlorld」を出力する
package com.example.hello;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloApplicationController {
@RequestMapping("/") // ルートへこのメソッドをマップする
public String test() {
return "Hello World";
}
}
2. Dockerfile作成
ここで、何も考えずに作成したら、後のデプロイ時にエラーが発生した。今回はchatgptにお願いして作成してもらった。
Dockerfileに記載する内容は、「ビルド、実行」である。その「ビルド、実行」に必要なmavenの指定、コマンドについて記載する必要がある。
これ以上の詳しい内容は別途調べようと思う。
# ベースイメージを指定
FROM maven:3.8.3-openjdk-17-slim AS build
# 作業ディレクトリを指定
WORKDIR /app
# Maven Wrapperのセットアップ
COPY .mvn .mvn
# Mavenプロジェクトをビルド
COPY pom.xml .
RUN mvn -B dependency:go-offline
# アプリケーションのビルド
COPY src src
RUN mvn -B package -DskipTests
# 本番用の軽量なJREベースイメージを使用
FROM openjdk:17-jdk-slim
# アプリケーションのJARファイルをコピー
COPY --from=build /app/target/*.jar /app/app.jar
# アプリケーションの実行
CMD ["java", "-jar", "/app/app.jar"]
3. Github登録
詳しくは省略するが
VS CodeとGitHubアカウントを連携してpushした。
firstPushは少し特殊なので注意が必要。
4. RenderとGithub連携
RenderとGithubを連携することでデプロイが可能になる。
Renderをあまり調べずにやってみたが、指定ブランチにプッシュ(マージ)すると勝手にビルドしてくれる。
ここでエラーに見舞われた。
no main manifest attribute, in .mvn/wrapper/maven-wrapper.jar
このとき、私は二つのミスをしていた。解決方法と合わせて書く。
-
pomファイル記述不足
エントリポイントを保持するクラス(=メインクラス)を指定する必要があった
参考:https://stackoverflow.com/questions/9689793/cant-execute-jar-file-no-main-manifest-attribute -
Dockerfileの記述ミス
エラーにもあるように実行のjarファイルが「.mvn/wrapper/maven-wrapper.jar」となっているが、これはビルドした成果物ではないので、これを実行しても意味がない(詳しくは番外編にて)
修正後無事にデプロイ成功!
番外編_エラー
デプロイ時にエラー
no main manifest attribute, in .mvn/wrapper/maven-wrapper.jar
Dockerfileでアプリケーション実行の時に指定したjarファイルが間違っていたことが原因。
エラー時に指定していたのは、「Maven Wrapper の JAR ファイル」つまり、mavenを使うための情報が入ったもの(mavenアプリ自体のjar)。
もちろん、デプロイ時に必要なのはJavaアプリケーションの成果物。
/* こんなことで・・・。となるけど気がつけないもんなんです。。理解を深めていくと問題を解決できる。このマインドを大切に挫けないようにしたい。
/*