# ============================================== # Build Stage - NestJS 빌드 # ============================================== FROM node:24-alpine AS builder WORKDIR /app # package.json과 package-lock.json 복사 COPY package*.json ./ # 의존성 설치 (devDependencies 포함) RUN npm ci # 소스 코드 복사 COPY . . # 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"]