Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 942adef

Browse files
Merge pull request #2 from Tsukuba-Programming-Lab/feature/docker
docker 化
2 parents 551b29b + 3c910ce commit 942adef

File tree

11 files changed

+202
-644
lines changed

11 files changed

+202
-644
lines changed

‎backend/Dockerfile

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# --- ステージ1: ビルド環境 ---
2+
# GradleとJDKが含まれるイメージをベースにする
3+
FROM gradle:8.5.0-jdk17 AS build
4+
5+
# 作業ディレクトリを設定
6+
WORKDIR /home/gradle/src
7+
8+
# 最初にビルド定義ファイルのみをコピー
9+
# これにより、依存関係が変更されない限り、レイヤーキャッシュが効く
10+
COPY build.gradle.kts settings.gradle.kts ./
11+
COPY src/main/resources/ ./src/main/resources/
12+
13+
# 依存関係をダウンロード
14+
RUN gradle build --no-daemon --stacktrace -x test
15+
16+
# アプリケーションのソースコードをすべてコピー
17+
COPY . .
18+
19+
# Gradleを使ってアプリケーションをビルド(テストはスキップ)
20+
# --no-daemonオプションはCI/CD環境で推奨
21+
RUN gradle build --no-daemon --stacktrace -x test
22+
23+
# --- ステージ2: 実行環境 ---
24+
# より軽量なJREイメージをベースにする
25+
FROM openjdk:17.0.2-slim
26+
27+
# 作業ディレクトリを設定
28+
WORKDIR /app
29+
30+
# ステージ1でビルドされたJARファイルをコピー
31+
COPY --from=build /home/gradle/src/build/libs/*.jar /app/application.jar
32+
33+
# コンテナがリッスンするポートを指定
34+
EXPOSE 8080
35+
36+
# コンテナ起動時にアプリケーションを実行
37+
ENTRYPOINT ["java", "-jar", "/app/application.jar"]
38+

‎backend/build.gradle.kts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,9 @@ tasks.withType<Test> {
3737
}
3838

3939
tasks.bootJar {
40-
archiveFileName.set("app.jar")
40+
mainClass.set("dev.itsu.bjvmdemo.BjvmDemoApplication")
41+
}
42+
43+
tasks.jar {
44+
enabled = false
4145
}

‎backend/src/main/java/dev/itsu/bjvmdemo/controller/api/v1/PostController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
@RestController
1212
@RequestMapping("api/v1")
13+
@CrossOrigin
1314
public class PostController {
1415

1516
private final PostRepository repository;
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
spring.application.name=bjvm-demo
22

3-
server.tomcat.basedir=/app/log/tomcat
3+
server.tomcat.basedir=/Users/itsuru/projects/bjvm-demo/backend/logs
4+
5+
spring.jpa.hibernate.ddl-auto=none

‎docker-compose.yml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# Docker Composeのバージョンを指定
2+
version: '3.8'
3+
4+
# 起動する各コンテナ(サービス)を定義
5+
services:
6+
# MySQLデータベースサービス
7+
db:
8+
image: mysql:8.0
9+
container_name: mysql-db
10+
# コンテナがクラッシュした場合などに自動で再起動
11+
restart: always
12+
# 環境変数でMySQLの初期設定を行う
13+
environment:
14+
MYSQL_ROOT_PASSWORD: rootpassword # ルートユーザーのパスワード
15+
MYSQL_DATABASE: bjvm_demo # 作成するデータベース名
16+
MYSQL_USER: myuser # 作成するユーザー名
17+
MYSQL_PASSWORD: mypassword # 作成したユーザーのパスワード
18+
ports:
19+
# ホストの3306番ポートをコンテナの3306番ポートにマッピング
20+
# これにより、ホストマシンからDBにアクセス可能になる
21+
- "3306:3306"
22+
volumes:
23+
# 名前付きボリュームをマウントしてデータを永続化
24+
- db-data:/var/lib/mysql
25+
healthcheck:
26+
# DBが正常に起動したかを確認するヘルスチェック
27+
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
28+
timeout: 20s
29+
retries: 10
30+
31+
# Spring Bootバックエンドサービス
32+
backend:
33+
# ./backend ディレクトリのDockerfileを使ってイメージをビルド
34+
build:
35+
context: ./backend
36+
dockerfile: Dockerfile
37+
container_name: spring-boot-app
38+
restart: always
39+
# 環境変数でSpring Bootの設定を上書き
40+
environment:
41+
# DB接続情報(サービス名`db`をホスト名として指定)
42+
- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/bjvm_demo?useSSL=false&allowPublicKeyRetrieval=true
43+
- SPRING_DATASOURCE_USERNAME=myuser
44+
- SPRING_DATASOURCE_PASSWORD=mypassword
45+
# アプリケーション起動時にDBスキーマを自動更新
46+
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
47+
ports:
48+
# ホストの8080番ポートをコンテナの8080番ポートにマッピング
49+
- "8080:8080"
50+
# dbサービスが起動してからbackendサービスを起動
51+
depends_on:
52+
db:
53+
condition: service_healthy
54+
55+
# Viteフロントエンドサービス
56+
frontend:
57+
# ./frontend-js ディレクトリのDockerfileを使ってイメージをビルド
58+
build:
59+
context: ./frontend-js
60+
dockerfile: Dockerfile
61+
container_name: vite-app
62+
# コンテナの標準入力を開いたままにし、インタラクティブなセッションを維持
63+
stdin_open: true
64+
tty: true
65+
ports:
66+
# Viteのデフォルト開発サーバーポート
67+
- "5173:5173"
68+
volumes:
69+
# ホストのソースコードをコンテナにマウントしてホットリロードを有効化
70+
- ./frontend-js:/app
71+
# ただし、node_modulesはコンテナ内のものを使用(ホスト環境との差異をなくすため)
72+
- /app/node_modules
73+
# backendサービスが起動してからfrontendサービスを起動
74+
depends_on:
75+
- backend
76+
77+
# Docker Compose全体で使用するボリュームを定義
78+
volumes:
79+
# DBデータ永続化用の名前付きボリューム
80+
db-data:

‎frontend-java/src/main/java/dev/itsu/bjvmdemo/Main.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void handleEvent(Event evt) {
5151

5252
System.out.println("投稿中...");
5353

54-
var post = $.fetch("api/v1/post", RequestInit.builder()
54+
var post = $.fetch("http://localhost:8080/api/v1/post", RequestInit.builder()
5555
.method("PUT")
5656
.body("name=" + nameValue + "&text=" + textValue)
5757
.headers(HEADERS)
@@ -72,7 +72,7 @@ private static void updatePosts() {
7272
System.out.println("投稿を取得中...");
7373

7474
var posts = $.document.<HTMLDivElement>getElementByIdG("posts");
75-
var postsList = $.fetch("api/v1/posts").json(Post[].class);
75+
var postsList = $.fetch("http://localhost:8080/api/v1/posts").json(Post[].class);
7676
var i = 0;
7777

7878
for (var post : postsList) {

‎frontend-js/Dockerfile

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Node.jsの軽量イメージをベースにする
2+
FROM node:20-alpine
3+
4+
# 作業ディレクトリを設定
5+
WORKDIR /app
6+
7+
# 最初にpackage.jsonとロックファイルをコピー
8+
COPY package*.json ./
9+
10+
# 依存関係をインストール
11+
# CI=true とすることで、warningをerrorとして扱わず、インタラクティブなプロンプトを無効化
12+
ENV CI=true
13+
RUN npm install
14+
15+
# アプリケーションのソースコードをコピー
16+
# (docker-composeでボリュームマウントするため、主にイメージ単体での利用を想定)
17+
COPY . .
18+
19+
# Viteの開発サーバーが使用するポートを公開
20+
EXPOSE 5173
21+
22+
# コンテナ起動時にViteの開発サーバーを実行
23+
# --host オプションにより、コンテナの外部からアクセスできるようになる
24+
CMD ["npm", "run", "dev", "--", "--host"]

‎frontend-js/index.html

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,6 @@ <h2>新規投稿</h2>
2323
</div>
2424
<button id="postButton">投稿</button>
2525
</section>
26-
<section>
27-
<h2>デモ動画</h2>
28-
<article>
29-
<iframe width="100%"
30-
src="https://www.youtube.com/embed/EiPDMraGIZA?&autoplay=1" frameborder="0"
31-
allowfullscreen></iframe>
32-
</article>
33-
</section>
3426
<section class="links-container">
3527
<h2>リンク</h2>
3628
<article>

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /