From f542b09212b4833c46e1b5e5d7c685e0a72965e7 Mon Sep 17 00:00:00 2001 From: SeoyeonPark1223 Date: Mon, 18 Aug 2025 02:27:24 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Chore:=20=EB=AA=A8=EB=8B=88=ED=84=B0?= =?UTF-8?q?=EB=A7=81=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20configure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 4 +-- Dockerfile | 23 +++++-------- build.gradle | 24 +++++++------ docker-compose.yml | 34 ++++++++++++++++++- .../global/jwt/JwtAuthenticationFilter.java | 4 +++ 5 files changed, 62 insertions(+), 27 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1d6fd438..ccb99daa 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -57,7 +57,7 @@ jobs: ssh -i private_key.pem -o StrictHostKeyChecking=no ${{ secrets.EC2_USERNAME }}@${{ secrets.EC2_HOST }} " sudo docker rm -f influy || true cd /home/ubuntu - sudo docker-compose pull spring - sudo docker-compose up -d spring + docker compose pull spring + docker compose up -d spring " rm -f private_key.pem \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 252b7f22..aa4d133b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,26 +1,21 @@ -# build stage -FROM amazoncorretto:21 AS Builder +# Build Stage +FROM openjdk:21-jdk-slim AS builder WORKDIR /app -COPY gradlew build.gradle settings.gradle /app/ -COPY gradle /app/gradle - -RUN chmod +x gradlew - -RUN ./gradlew dependencies --no-daemon - COPY . . -RUN ./gradlew clean build -x test --no-daemon +RUN chmod +x ./gradlew -# run stage -FROM amazoncorretto:21 +RUN ./gradlew build -x test + +# Run Stage +FROM openjdk:21-slim WORKDIR /app -EXPOSE 8080 +COPY build/libs/*.jar app.jar -COPY --from=builder /app/build/libs/*.jar app.jar +EXPOSE 8080 ENTRYPOINT ["java", "-Duser.timezone=UTC", "-jar", "app.jar"] \ No newline at end of file diff --git a/build.gradle b/build.gradle index abac5356..b20340e2 100644 --- a/build.gradle +++ b/build.gradle @@ -23,46 +23,50 @@ repositories { } dependencies { - //JPA + // JPA implementation 'org.springframework.boot:spring-boot-starter-data-jpa' - //Web + // Web implementation 'org.springframework.boot:spring-boot-starter-web' - //Swagger + // Swagger implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0' implementation 'io.swagger.core.v3:swagger-annotations:2.2.25' - //Validation + // Validation implementation 'org.springframework.boot:spring-boot-starter-validation' - //MySQL + // MySQL runtimeOnly 'com.mysql:mysql-connector-j' - //Lombok + // Lombok compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'org.junit.platform:junit-platform-launcher' - // redis + // Redis implementation 'org.springframework.boot:spring-boot-starter-data-redis' - //springSecurity + // Spring security implementation 'org.springframework.boot:spring-boot-starter-security' - //jwt + // Jwt implementation 'io.jsonwebtoken:jjwt-api:0.12.6' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.6' runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.6' - // s3 + // S3 implementation 'software.amazon.awssdk:s3:2.31.40' // AI implementation platform("org.springframework.ai:spring-ai-bom:1.0.0-M3") implementation 'org.springframework.ai:spring-ai-openai' + + // Monitoring + implementation 'org.springframework.boot:spring-boot-starter-actuator' + implementation 'io.micrometer:micrometer-registry-prometheus' } tasks.named('test') { diff --git a/docker-compose.yml b/docker-compose.yml index 9066603e..3e8dd243 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,7 +13,8 @@ services: - "8080:8080" depends_on: - redis - env_file: .env + env_file: + - .env nginx: image: nginx @@ -28,3 +29,34 @@ services: depends_on: - spring + prometheus: + image: prom/prometheus + container_name: prometheus + ports: + - "9090:9090" + volumes: + - /home/ubuntu/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml + depends_on: + - spring + restart: always + + grafana: + image: grafana/grafana + container_name: grafana + ports: + - "3000:3000" + depends_on: + - prometheus + volumes: + - grafana-storage:/var/lib/grafana + restart: always + + node-exporter: + image: prom/node-exporter + container_name: node-exporter + ports: + - "9100:9100" + restart: always + +volumes: + grafana-storage: \ No newline at end of file diff --git a/src/main/java/com/influy/global/jwt/JwtAuthenticationFilter.java b/src/main/java/com/influy/global/jwt/JwtAuthenticationFilter.java index 4ade018f..2e428ad7 100644 --- a/src/main/java/com/influy/global/jwt/JwtAuthenticationFilter.java +++ b/src/main/java/com/influy/global/jwt/JwtAuthenticationFilter.java @@ -41,6 +41,10 @@ protected boolean shouldNotFilter(HttpServletRequest request) throws ServletExce String requestURI = request.getRequestURI(); String method = request.getMethod(); + if (requestURI.startsWith("/grafana")) { + return true; + } + if ("GET".equalsIgnoreCase(method)) { return Arrays.stream(SHOULD_NOT_FILTER_GET_LIST) .anyMatch(pattern -> pathMatcher.match(pattern, requestURI)); From 1fc6c4ed39342a06e4fe8ca634093b3b8eb3da33 Mon Sep 17 00:00:00 2001 From: SeoyeonPark1223 Date: Mon, 18 Aug 2025 02:43:31 +0900 Subject: [PATCH 2/2] =?UTF-8?q?Refactor:=20dockerfile=20=EC=9B=90=EC=83=81?= =?UTF-8?q?=EB=B3=B5=EA=B7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- Dockerfile | 23 ++++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index c154318d..49e3a5c5 100644 --- a/.gitignore +++ b/.gitignore @@ -47,4 +47,5 @@ application-prod.yml ._.DS_Store **/.DS_Store -.env \ No newline at end of file +.env + diff --git a/Dockerfile b/Dockerfile index aa4d133b..6ccc1dfc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,26 @@ -# Build Stage -FROM openjdk:21-jdk-slim AS builder +# build stage +FROM amazoncorretto:21 AS builder WORKDIR /app -COPY . . +COPY gradlew build.gradle settings.gradle /app/ +COPY gradle /app/gradle -RUN chmod +x ./gradlew +RUN chmod +x gradlew -RUN ./gradlew build -x test +RUN ./gradlew dependencies --no-daemon -# Run Stage -FROM openjdk:21-slim +COPY . . -WORKDIR /app +RUN ./gradlew clean build -x test --no-daemon -COPY build/libs/*.jar app.jar +# run stage +FROM amazoncorretto:21 + +WORKDIR /app EXPOSE 8080 +COPY --from=builder /app/build/libs/*.jar app.jar + ENTRYPOINT ["java", "-Duser.timezone=UTC", "-jar", "app.jar"] \ No newline at end of file