diff --git a/backend/Dockerfile b/backend/Dockerfile index 7f42a65..b677891 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -1,8 +1,53 @@ -FROM node:24-alpine +# ============================================== +# Build Stage - NestJS 빌드 +# ============================================== +FROM node:24-alpine AS builder + WORKDIR /app -RUN apk add --no-cache curl -COPY package*.json . -RUN npm install + +# package.json과 package-lock.json 복사 +COPY package*.json ./ + +# 의존성 설치 (devDependencies 포함) +RUN npm ci + +# 소스 코드 복사 COPY . . -CMD ["npm", "run", "start:dev"] -EXPOSE 4000 \ No newline at end of file + +# NestJS 프로젝트 빌드 +RUN npm run build + +# ============================================== +# Production Stage - 실행 이미지 생성 +# ============================================== +FROM node:24-alpine + +WORKDIR /app + +# curl 설치 (헬스체크용) +RUN apk add --no-cache curl + +# package.json 복사 +COPY package*.json ./ + +# 프로덕션 의존성만 설치 +RUN npm ci --only=production + +# 빌드된 파일 복사 +COPY --from=builder /app/dist ./dist + +# 환경 변수 파일 복사 +COPY ../.env.development ./.env + +# 업로드 디렉토리 생성 +RUN mkdir -p ./uploads ./logs + +# 포트 노출 +EXPOSE 4000 + +# 헬스체크 +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:4000/health || exit 1 + +# 애플리케이션 실행 +CMD ["node", "dist/main"]