From 2829c40c2525bbcc495e741eaf94e8699acf8910 Mon Sep 17 00:00:00 2001 From: Hyoseong Jo Date: Tue, 9 Dec 2025 23:16:20 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B0=9C=EB=B0=9C=EC=84=9C=EB=B2=84=EB=A5=BC?= =?UTF-8?q?=20=EC=9C=84=ED=95=9C=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/Dockerfile | 57 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 6 deletions(-) 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"]