[2024年8月]SpringBootで作ったWEBアプリをRenderで無料で公開する
springで作ったWEBアプリを無料で公開する方法を紹介します。今まで無料だったHerokuが有料になってしまったので、Renderを使います。
Spring Bootでアプリを作る
今回は画面を表示するだけの非常に簡単なアプリを用意します。Mavenプロジェクトとして作成します。
参考: Spring BootでMavenプロジェクトを作成
src/main/resources/static
配下に index.html
ファイルを作成しただけのものです。
Dockerファイルを作る
ファイル作成
プロジェクト直下にDockerfileを作成します。
Dockerfileの内容
FROM maven:3-eclipse-temurin-17 AS build
COPY ./ /home/app
RUN cd /home/app && mvn clean package -Dmaven.test.skip=true
FROM eclipse-temurin:17-alpine
COPY /home/app/target/spring-practice-0.0.1-SNAPSHOT.jar /usr/local/lib/demo.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/usr/local/lib/demo.jar"]
FROM maven:3-eclipse-temurin-17 AS build
1. -
説明: これはマルチステージビルドの最初のステージです。
maven:3-eclipse-temurin-17
というベースイメージを使用します。このイメージには、Maven 3とJava 17(Temurinディストリビューション)がインストールされています。 -
役割: このステージはアプリケーションをビルドするために使用されます。
AS build
は、このステージに名前(build
)を付けて、後で参照できるようにします。
COPY ./ /home/app
2. -
説明: Dockerコンテナ内の
/home/app
ディレクトリに、ホストマシンのカレントディレクトリ(./
)の内容をコピーします。 - 役割: アプリケーションのソースコードと関連ファイルを、ビルドステージのコンテナ内にコピーします。
RUN cd /home/app && mvn clean package -Dmaven.test.skip=true
3. -
説明:
/home/app
ディレクトリに移動して、mvn clean package
コマンドを実行します。-Dmaven.test.skip=true
はテストの実行をスキップするオプションです。 -
役割: ソースコードをビルドし、実行可能なJARファイルを生成します。この場合、
target
ディレクトリにspring-practice-0.0.1-SNAPSHOT.jar
というファイルが生成されます。
FROM eclipse-temurin:17-alpine
4. -
説明: マルチステージビルドの2つ目のステージです。
eclipse-temurin:17-alpine
という軽量なJava 17のベースイメージを使用します(Alpine Linuxベース)。 - 役割: このステージは、実行時に必要な軽量なJavaランタイム環境を提供します。ビルドに不要なMavenは含まれません。
COPY --from=build /home/app/target/spring-practice-0.0.1-SNAPSHOT.jar /usr/local/lib/demo.jar
5. -
説明: 最初のステージ(
build
)から、ビルド済みのJARファイルをコピーします。コピー元は/home/app/target/spring-practice-0.0.1-SNAPSHOT.jar
、コピー先は新しいコンテナ内の/usr/local/lib/demo.jar
です。 - 役割: ビルドされたJARファイルを実行ステージのコンテナにコピーします。これで、アプリケーションが実行可能になります。
EXPOSE 8080
6. - 説明: Dockerコンテナが使用するポートを指定します。この場合、アプリケーションはポート8080でリッスンします。
- 役割: このステートメント自体はポートを開くことはしませんが、コンテナがこのポートを使用することを他の開発者やオーケストレーションツールに伝えます。
ENTRYPOINT ["java", "-jar", "/usr/local/lib/demo.jar"]
7. -
説明: コンテナが起動したときに実行されるコマンドを指定します。この場合、
java -jar /usr/local/lib/demo.jar
を実行して、Spring Bootアプリケーションを起動します。 - 役割: コンテナのエントリーポイントを設定し、指定されたコマンドが実行されるようにします。
spring-practice-0.0.1-SNAPSHOT.jarの値は、pom.xmlファイルから値を参照してください。
<artifactId>spring-practice</artifactId>
<version>0.0.1-SNAPSHOT</version>
ここでは以下の値をハイフンで繋いで入力しています。
<artifactId>spring-practice</artifactId>
<version>0.0.1-SNAPSHOT</version>
GitHubに登録
詳細な手順は以下を参照してください:
Renderにデプロイ
-
Renderを開きます。
-
Get Started or Freeをクリックします。
-
Create an accountのGitHubをクリックして連携します。
-
ダッシュボードが開いたら、+Newを押して、Web Serviceを選択します。
-
Public Git Repositoryを選択し、GitHubからアプリのURLをコピーして貼り付けます。
Connectをクリックします。
※URLは、GitHubで該当のWEBアプリのCode → HTTPSからコピーできます。
-
Instance TypeでFreeを選択します。
-
Deploy Web Serviceをクリックします。
-
デプロイが開始します。
進行状況がIn ProgressからLiveになったら完了です。URLが表示されるので、クリックしてアクセスします。
-
表示を確認します。
アプリケーションの停止、削除
-
Dashboard
のタブから該当のアプリの[…]をクリックして、Settingsを選択します。
-
画面を下にスクロールし、以下のオプションを選択します:
- 削除したい場合はDelete Web Service。
- 一時的に停止したい場合はSuspend Web Service。
参考
Discussion