From efcec065ec24e3acfd234afe25b9e6931a82de62 Mon Sep 17 00:00:00 2001 From: sunmingLee <25thbam@gmail.com> Date: Thu, 30 Oct 2025 20:30:44 +0900 Subject: [PATCH] =?UTF-8?q?=EB=84=A4=EC=9D=B4=EB=B2=84=20=EB=B8=94?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=20=ED=8F=AC=EC=8A=A4=ED=8C=85=20=EC=84=A0?= =?UTF-8?q?=ED=83=9D=EC=82=AC=ED=95=AD=EC=9C=BC=EB=A1=9C=20=EA=B3=A0?= =?UTF-8?q?=EC=B3=90=EC=84=9C=20=EB=8F=84=EC=BB=A4=20=C3=AC=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=C3=A3=C2=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- distribution-service/Dockerfile | 46 +++++++++++++++++-- .../kt/distribution/adapter/NaverAdapter.java | 2 + .../distribution/client/NaverBlogClient.java | 2 + .../src/main/resources/application.yml | 1 + 4 files changed, 46 insertions(+), 5 deletions(-) diff --git a/distribution-service/Dockerfile b/distribution-service/Dockerfile index ac28cc7..42ebad5 100644 --- a/distribution-service/Dockerfile +++ b/distribution-service/Dockerfile @@ -1,15 +1,40 @@ # Multi-stage build for Spring Boot application -FROM eclipse-temurin:21-jre-alpine AS builder +FROM eclipse-temurin:21-jre AS builder WORKDIR /app COPY build/libs/*.jar app.jar RUN java -Djarmode=layertools -jar app.jar extract -FROM eclipse-temurin:21-jre-alpine +FROM eclipse-temurin:21-jre WORKDIR /app -# Create non-root user -RUN addgroup -S spring && adduser -S spring -G spring -USER spring:spring +# Install Playwright essential dependencies only +RUN apt-get update && apt-get install -y --no-install-recommends \ + wget \ + libnss3 \ + libnspr4 \ + libatk1.0-0 \ + libatk-bridge2.0-0 \ + libcups2 \ + libdrm2 \ + libdbus-1-3 \ + libxkbcommon0 \ + libxcomposite1 \ + libxdamage1 \ + libxfixes3 \ + libxrandr2 \ + libgbm1 \ + libasound2t64 \ + libpango-1.0-0 \ + libcairo2 \ + libatspi2.0-0 \ + libxshmfence1 \ + fonts-liberation \ + libappindicator3-1 \ + xdg-utils \ + && rm -rf /var/lib/apt/lists/* + +# Create browser installation directory with proper permissions +RUN mkdir -p /app/playwright && chmod 777 /app/playwright # Copy layers from builder COPY --from=builder /app/dependencies/ ./ @@ -17,6 +42,17 @@ COPY --from=builder /app/spring-boot-loader/ ./ COPY --from=builder /app/snapshot-dependencies/ ./ COPY --from=builder /app/application/ ./ +# Set Playwright browsers path +ENV PLAYWRIGHT_BROWSERS_PATH=/app/playwright + +# Create non-root user +RUN groupadd -r spring && useradd -r -g spring spring + +# Change ownership to spring user +RUN chown -R spring:spring /app + +USER spring:spring + # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:8085/distribution/actuator/health || exit 1 diff --git a/distribution-service/src/main/java/com/kt/distribution/adapter/NaverAdapter.java b/distribution-service/src/main/java/com/kt/distribution/adapter/NaverAdapter.java index 5c4b42f..90c1ba2 100644 --- a/distribution-service/src/main/java/com/kt/distribution/adapter/NaverAdapter.java +++ b/distribution-service/src/main/java/com/kt/distribution/adapter/NaverAdapter.java @@ -6,6 +6,7 @@ import com.kt.distribution.dto.ChannelType; import com.kt.distribution.dto.DistributionRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import java.util.UUID; @@ -20,6 +21,7 @@ import java.util.UUID; @Slf4j @Component @RequiredArgsConstructor +@ConditionalOnProperty(name = "naver.blog.enabled", havingValue = "true", matchIfMissing = false) public class NaverAdapter extends AbstractChannelAdapter { private final NaverBlogClient naverBlogClient; diff --git a/distribution-service/src/main/java/com/kt/distribution/client/NaverBlogClient.java b/distribution-service/src/main/java/com/kt/distribution/client/NaverBlogClient.java index cdf210b..7cb0f8a 100644 --- a/distribution-service/src/main/java/com/kt/distribution/client/NaverBlogClient.java +++ b/distribution-service/src/main/java/com/kt/distribution/client/NaverBlogClient.java @@ -5,6 +5,7 @@ import com.microsoft.playwright.*; import com.microsoft.playwright.options.LoadState; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Component; import jakarta.annotation.PostConstruct; @@ -23,6 +24,7 @@ import java.nio.file.Paths; */ @Slf4j @Component +@ConditionalOnProperty(name = "naver.blog.enabled", havingValue = "true", matchIfMissing = false) public class NaverBlogClient { @Value("${naver.blog.username:}") diff --git a/distribution-service/src/main/resources/application.yml b/distribution-service/src/main/resources/application.yml index eeb556d..51707ec 100644 --- a/distribution-service/src/main/resources/application.yml +++ b/distribution-service/src/main/resources/application.yml @@ -126,6 +126,7 @@ channel: # Naver Blog Configuration (Playwright 기반) naver: blog: + enabled: ${NAVER_BLOG_ENABLED:false} username: ${NAVER_BLOG_USERNAME:} password: ${NAVER_BLOG_PASSWORD:} blog-id: ${NAVER_BLOG_ID:}