# ── 1단계: 빌드 ────────────────────────────────────────────────────────────── # ta4j-master 는 Java 25 기준으로 빌드되어 있으므로 Java 25 이미지 사용 FROM maven:3.9-eclipse-temurin-21 AS builder WORKDIR /build # ── ta4j-master 전체 복사 (라이선스 헤더 파일 등 상대경로 유지) ───────────── COPY ta4j-master ./ta4j-master # 공통 skip 옵션 + 컴파일러 버전을 21로 강제 오버라이드 ARG SKIP_OPTS="-Denforcer.skip=true -Dlicense.skip=true -Dcheckstyle.skip=true -Dspotbugs.skip=true -DskipTests -Dmaven.compiler.release=21" # 부모 POM 설치 (-N: 하위 모듈 빌드 생략) RUN mvn -f ta4j-master/pom.xml -N install $SKIP_OPTS -q # ta4j-core 만 빌드하여 로컬 리포지터리에 설치 RUN mvn -f ta4j-master/ta4j-core/pom.xml install $SKIP_OPTS -q # ── Backend 빌드 ───────────────────────────────────────────────────────────── # 의존성 레이어 캐시 (pom.xml 변경 시만 재다운로드) COPY backend/pom.xml ./backend/pom.xml RUN mvn -f backend/pom.xml dependency:go-offline -q 2>/dev/null || true # 소스 빌드 COPY backend/src ./backend/src RUN mvn -f backend/pom.xml package -DskipTests -q # ── 2단계: 실행 ────────────────────────────────────────────────────────────── FROM eclipse-temurin:21-jre-alpine AS production WORKDIR /app ENV TZ=Asia/Seoul RUN addgroup -S spring && adduser -S spring -G spring \ && apk add --no-cache su-exec tzdata \ && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \ && echo $TZ > /etc/timezone COPY --from=builder /build/backend/target/goldenchart-backend-*.jar app.jar COPY backend/docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh EXPOSE 8080 ENTRYPOINT ["/docker-entrypoint.sh"]