-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdockerfile.prod
More file actions
71 lines (53 loc) · 1.92 KB
/
dockerfile.prod
File metadata and controls
71 lines (53 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
FROM node:24.12.0-alpine AS base
WORKDIR /app
# Root package.json과 package-lock.json 복사
COPY package*.json ./
COPY frontend/package*.json ./frontend/
COPY backend/package*.json ./backend/
# Root에서 workspace 의존성 설치
RUN npm ci --ignore-scripts --legacy-peer-deps
#############################
# 1. 프론트엔드 빌드 단계
#############################
FROM base AS frontend-build
WORKDIR /app
# 환경변수 주입
ARG VITE_WEBSOCKET_URL
ENV VITE_WEBSOCKET_URL=$VITE_WEBSOCKET_URL
# 프론트엔드 소스 복사
COPY frontend ./frontend
# Root에서 workspace 빌드 명령 실행
RUN npm run build -w frontend
#############################
# 2. 프론트엔드 nginx 배포 이미지
#############################
FROM nginx:alpine AS frontend-prod
# Vite 빌드 결과를 nginx 정적 루트로 복사
COPY --from=frontend-build /app/frontend/dist /usr/share/nginx/html
# nginx 설정 템플릿 복사 (컨테이너 시작 시 envsubst로 환경변수 치환)
COPY nginx/nginx.conf.template /etc/nginx/templates/default.conf.template
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
#############################
# 3. 백엔드 빌드 단계
#############################
FROM base AS backend-build
WORKDIR /app
# 백엔드 소스 복사
COPY backend ./backend
# Root에서 workspace 빌드 명령 실행
RUN npm run build -w backend
#############################
# 4. 백엔드 런타임 이미지
#############################
FROM node:24.12.0-alpine AS backend-prod
WORKDIR /app
# 빌드 결과만 복사
COPY --from=backend-build /app/backend/dist ./dist
# Root package.json과 backend package.json 복사 (workspace 구조 유지)
COPY package*.json ./
COPY backend/package*.json ./backend/
# Production 의존성만 설치 (workspace 구조 유지)
RUN npm ci --omit=dev --ignore-scripts --legacy-peer-deps
EXPOSE 3000
CMD ["node", "dist/main.js"]