1- FROM node:21.1.0-alpine AS base
2-
3- ARG NODE_ENV=production
4- ENV NODE_ENV=${NODE_ENV}
5-
6- WORKDIR /app
7-
8- RUN apk add --no-cache libc6-compat
9-
10- COPY package.json package-lock.json ./
11-
12- # Development Stage
13- FROM base AS dev
14-
15- RUN npm install
16-
17- COPY . .
18-
19- RUN npx prisma generate
20-
21- RUN chown -R node:node /app
22-
23- USER node
24-
25- EXPOSE 3000
26-
27- # Run development server
28- CMD ["sh" , "-c" , "npx prisma migrate dev && npm run dev" ]
29-
30- # Production Stage
31- FROM base AS prod
32-
33- ENV NODE_ENV=production
34-
35- RUN npm ci --omit=dev
36-
37- COPY --from=dev /app/node_modules ./node_modules
38- COPY --from=dev /app/prisma ./prisma
39- COPY --from=dev /app/src ./src
40- COPY --from=dev /app/package.json ./
41-
42- RUN npx prisma generate
43-
44- RUN chown -R node:node /app
45-
46- USER node
47-
48- EXPOSE 3000
49-
50- # Run Prisma migrations & start the app in production mode
51- CMD ["sh" , "-c" , "npx prisma migrate deploy && exec npm run start" ]
52-
1+ # Base Stage
2+ FROM node:21.1.0-alpine AS base
3+
4+ WORKDIR /app
5+
6+ RUN apk add --no-cache libc6-compat
7+
8+ COPY package.json package-lock.json ./
9+
10+ FROM base AS deps
11+ RUN npm ci
12+
13+ # Build / Dev Stage
14+ FROM deps AS dev
15+ COPY . .
16+ RUN npx prisma generate
17+ RUN npm run build:prod
18+
19+ CMD ["sh" , "-c" , "npm run dev" ]
20+
21+ # Production Stage
22+ FROM node:21.1.0-alpine AS prod
23+
24+ WORKDIR /app
25+
26+ COPY --from=dev /app/dist ./dist
27+ COPY --from=dev /app/prisma ./prisma
28+ COPY --from=dev /app/package.json ./
29+ COPY --from=dev /app/package-lock.json ./
30+
31+ # Install only production dependencies
32+ RUN npm ci --omit=dev
33+
34+ USER node
35+ EXPOSE 3000
36+
37+ CMD ["node" , "./dist/index.js" ]
0 commit comments