0
0

webアプリを公開 HelloWorld!

Posted at

やったこと

最小限の作業で完成させた。
手順ゼロについては以下参照
https://qiita.com/isekaigk/items/ab2809a4305d46adbe68

  1. コントローラー作成
  2. Dockerfile作成
  3. Github登録
  4. RenderとGithub連携

1.コントローラー作成

コントローラー(受け渡し部品)の作成をした
リンク(リクエスト)と動作をマッピングする。今回の動作は「Hello Wlorld」を出力する

HelloApplicationController.java
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

このとき、私は二つのミスをしていた。解決方法と合わせて書く。

  1. pomファイル記述不足
    エントリポイントを保持するクラス(=メインクラス)を指定する必要があった
    参考:https://stackoverflow.com/questions/9689793/cant-execute-jar-file-no-main-manifest-attribute

  2. Dockerfileの記述ミス
    エラーにもあるように実行のjarファイルが「.mvn/wrapper/maven-wrapper.jar」となっているが、これはビルドした成果物ではないので、これを実行しても意味がない(詳しくは番外編にて)

修正後無事にデプロイ成功!

image.png

image.png

番外編_エラー

デプロイ時にエラー

エラー

no main manifest attribute, in .mvn/wrapper/maven-wrapper.jar

Dockerfileでアプリケーション実行の時に指定したjarファイルが間違っていたことが原因。
エラー時に指定していたのは、「Maven Wrapper の JAR ファイル」つまり、mavenを使うための情報が入ったもの(mavenアプリ自体のjar)。
もちろん、デプロイ時に必要なのはJavaアプリケーションの成果物。
/* こんなことで・・・。となるけど気がつけないもんなんです。。理解を深めていくと問題を解決できる。このマインドを大切に挫けないようにしたい。
/*

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0