feat : initial commit
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
# Build stage
|
||||
FROM openjdk:21-jdk-slim AS builder
|
||||
ARG BUILD_LIB_DIR
|
||||
ARG ARTIFACTORY_FILE
|
||||
COPY ${BUILD_LIB_DIR}/${ARTIFACTORY_FILE} app.jar
|
||||
|
||||
# Run stage
|
||||
FROM openjdk:21-jdk-slim
|
||||
ENV USERNAME k8s
|
||||
ENV ARTIFACTORY_HOME /home/${USERNAME}
|
||||
ENV JAVA_OPTS=""
|
||||
|
||||
# Add a non-root user
|
||||
RUN adduser --system --group ${USERNAME} && \
|
||||
mkdir -p ${ARTIFACTORY_HOME} && \
|
||||
chown ${USERNAME}:${USERNAME} ${ARTIFACTORY_HOME}
|
||||
|
||||
WORKDIR ${ARTIFACTORY_HOME}
|
||||
COPY --from=builder app.jar app.jar
|
||||
RUN chown ${USERNAME}:${USERNAME} app.jar
|
||||
|
||||
USER ${USERNAME}
|
||||
ENTRYPOINT [ "sh", "-c" ]
|
||||
CMD ["java ${JAVA_OPTS} -jar app.jar"]
|
||||
@@ -0,0 +1,120 @@
|
||||
# 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"]
|
||||
Reference in New Issue
Block a user