44FROM node:22-slim AS base
55WORKDIR /app
66
7- # Install dependencies system (buat Prisma & NestJS build)
7+ # Install system deps ( Prisma & build)
88RUN apt-get update && apt-get install -y \
99 bash \
1010 git \
@@ -13,6 +13,8 @@ RUN apt-get update && apt-get install -y \
1313 g++ \
1414 libc6-dev \
1515 dumb-init \
16+ openssl \
17+ libssl-dev \
1618 && rm -rf /var/lib/apt/lists/*
1719
1820# Update npm versi terbaru
@@ -21,24 +23,20 @@ RUN npm install -g npm@11
2123# Salin dependency info lebih dulu
2224COPY package*.json ./
2325
24- # Install dependencies (gunakan npm install, bukan ci agar fleksibel di dev)
26+ # Install dependencies (flexible for dev)
2527RUN npm install --legacy-peer-deps
2628
27- # Generate Prisma client lebih cepat (kalau schema belum ada, skip tanpa error)
28- COPY prisma ./prisma
29- RUN npx prisma generate || echo "Skip prisma generate (schema belum ada)"
29+ # (JANGAN generate Prisma di sini — kita akan generate di builder setelah copy seluruh schema & source)
3030
3131# =======================
3232# STAGE 2: DEVELOPMENT
3333# =======================
3434FROM base AS development
3535ENV NODE_ENV=development
36- # Disable file watching performance warning
3736ENV WATCHPACK_POLLING=true
3837ENV CHOKIDAR_USEPOLLING=true
3938ENV CHOKIDAR_INTERVAL=500
4039
41-
4240WORKDIR /app
4341
4442# Copy semua source (untuk container dev yang standalone)
@@ -47,41 +45,49 @@ COPY . .
4745# Expose port NestJS dev server
4846EXPOSE 3000
4947
50- # Gunakan dumb-init agar proses clean shutdown
5148ENTRYPOINT ["dumb-init" , "--" ]
52-
53- # Jalankan NestJS dev mode (watch mode)
5449CMD ["npm" , "run" , "start:dev" ]
5550
5651# =======================
5752# STAGE 3: BUILD (Production)
5853# =======================
5954FROM base AS builder
6055WORKDIR /app
56+
57+ # Copy source to builder (schemas, src, tsconfig, dll.)
6158COPY . .
6259
60+ # Generate Prisma client inside builder (ensures binaries match this environment)
61+ RUN npx prisma generate
62+
6363# Build NestJS (kompilasi ke dist)
6464RUN npm run build
6565
66+ # Optional: remove dev deps to slim node_modules if you want
67+ # RUN npm prune --production
68+
6669# =======================
6770# STAGE 4: PRODUCTION
6871# =======================
6972FROM node:22-slim AS production
7073WORKDIR /app
7174
72- # Install minimal runtime deps
73- RUN apt-get update && apt-get install -y dumb-init && rm -rf /var/lib/apt/lists/*
75+ # Install minimal runtime deps including openssl
76+ RUN apt-get update && apt-get install -y \
77+ dumb-init \
78+ openssl \
79+ && rm -rf /var/lib/apt/lists/*
80+
7481ENV TZ=Asia/Jakarta
7582ENV NODE_ENV=production
7683
77- # Copy hasil build dan dependensi
84+ # Copy hasil build dan dependensi dari builder
7885COPY --from=builder /app/dist ./dist
79- COPY --from=base /app/node_modules ./node_modules
80- COPY --from=builder /app/package*.json ./
86+ COPY --from=builder /app/node_modules ./node_modules
87+ COPY --from=builder /app/package*.json ./
8188COPY --from=builder /app/prisma ./prisma
8289COPY --from=builder /app/public ./public
8390
84- # Expose port aplikasi
8591EXPOSE 3000
8692
8793ENTRYPOINT ["dumb-init" , "--" ]
0 commit comments