HealthSync_BE/deployment/container/Dockerfile.backup
2025-06-20 05:42:24 +00:00

121 lines
3.8 KiB
Docker

# HealthSync Backend 통합 Dockerfile
# 전체 멀티프로젝트를 한 번에 빌드하고 특정 서비스를 선택 실행
# =============================================================================
# Build Stage: 전체 멀티프로젝트 빌드
# =============================================================================
FROM openjdk:21-jdk-slim AS builder
# 빌드에 필요한 패키지 설치
RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /workspace
# Gradle Wrapper 및 설정 파일 복사
COPY gradle/ gradle/
COPY gradlew .
COPY gradle.properties .
COPY settings.gradle .
COPY build.gradle .
# 각 서비스 소스코드 복사
COPY common/ common/
COPY api-gateway/ api-gateway/
COPY user-service/ user-service/
COPY health-service/ health-service/
COPY intelligence-service/ intelligence-service/
COPY goal-service/ goal-service/
COPY motivator-service/ motivator-service/
# Gradle 실행 권한 부여
RUN chmod +x gradlew
# 전체 프로젝트 빌드 (테스트 제외)
RUN ./gradlew clean build -x test
# 빌드된 JAR 파일들 확인
RUN find . -name "*.jar" -type f
# =============================================================================
# Runtime Stage: 실행 환경
# =============================================================================
FROM openjdk:21-jdk-slim
# 런타임 사용자 생성
RUN addgroup --system --gid 1001 healthsync && \
adduser --system --uid 1001 --gid 1001 healthsync
# 작업 디렉토리 설정
WORKDIR /app
# 빌드된 JAR 파일들 복사
COPY --from=builder /workspace/api-gateway/build/libs/*.jar ./jars/api-gateway.jar
COPY --from=builder /workspace/user-service/build/libs/*.jar ./jars/user-service.jar
COPY --from=builder /workspace/health-service/build/libs/*.jar ./jars/health-service.jar
COPY --from=builder /workspace/intelligence-service/build/libs/*.jar ./jars/intelligence-service.jar
COPY --from=builder /workspace/goal-service/build/libs/*.jar ./jars/goal-service.jar
COPY --from=builder /workspace/motivator-service/build/libs/*.jar ./jars/motivator-service.jar
# 실행 스크립트 생성
RUN cat > /app/start-service.sh << 'EOF'
#!/bin/bash
SERVICE_NAME=${SERVICE_NAME:-user-service}
JAVA_OPTS=${JAVA_OPTS:-"-Xms256m -Xmx1024m"}
echo "Starting HealthSync ${SERVICE_NAME}..."
echo "Java Options: ${JAVA_OPTS}"
case ${SERVICE_NAME} in
"api-gateway")
exec java ${JAVA_OPTS} -jar /app/jars/api-gateway.jar
;;
"user-service")
exec java ${JAVA_OPTS} -jar /app/jars/user-service.jar
;;
"health-service")
exec java ${JAVA_OPTS} -jar /app/jars/health-service.jar
;;
"intelligence-service")
exec java ${JAVA_OPTS} -jar /app/jars/intelligence-service.jar
;;
"goal-service")
exec java ${JAVA_OPTS} -jar /app/jars/goal-service.jar
;;
"motivator-service")
exec java ${JAVA_OPTS} -jar /app/jars/motivator-service.jar
;;
*)
echo "Error: Unknown service name '${SERVICE_NAME}'"
echo "Available services: api-gateway, user-service, health-service, intelligence-service, goal-service, motivator-service"
exit 1
;;
esac
EOF
# 스크립트 실행 권한 부여
RUN chmod +x /app/start-service.sh
# 디렉토리 소유자 변경
RUN chown -R healthsync:healthsync /app
# 사용자 변경
USER healthsync
# 헬스체크 스크립트 생성
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD curl -f http://localhost:${SERVER_PORT:-8080}/actuator/health || exit 1
# 기본 포트 노출 (환경변수로 오버라이드 가능)
EXPOSE 8080 8081 8082 8083 8084 8085
# 환경변수 기본값 설정
ENV SERVICE_NAME=user-service
ENV JAVA_OPTS="-Xms256m -Xmx1024m"
ENV SPRING_PROFILES_ACTIVE=docker
# 실행 명령
ENTRYPOINT ["/app/start-service.sh"]