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+ ARG NODE_ENV=production
5+
6+ ENV NODE_ENV=${NODE_ENV}
7+
8+ WORKDIR /app
9+
10+ RUN apk add --no-cache libc6-compat
11+
12+ COPY package.json package-lock.json ./
13+
14+ # Development Stage
15+ FROM base AS dev
16+
17+ RUN npm install
18+
19+ COPY . .
20+
21+ RUN npx prisma generate
22+
23+ RUN chown -R node:node /app
24+
25+ USER node
26+
27+ EXPOSE 3000
28+
29+ # Start dev server
30+ CMD ["sh" , "-c" , "npm run dev" ]
31+
32+ # Build Stage
33+ FROM base AS build
34+
35+ RUN npm install
36+
37+ COPY . .
38+
39+ RUN npx prisma generate
40+
41+ RUN npm run build:prod
42+
43+ # Production Stage
44+ FROM base AS prod
45+
46+ ENV NODE_ENV=production
47+
48+ RUN npm ci --omit=dev
49+
50+ COPY --from=build /app/dist ./dist
51+
52+ COPY --from=build /app/prisma ./prisma
53+
54+ COPY --from=build /app/package.json ./
55+
56+ COPY --from=build /app/tsconfig.json ./
57+
58+ RUN npx prisma generate
59+
60+ RUN chown -R node:node /app
61+
62+ USER node
63+
64+ EXPOSE 3000
65+
66+ # Start prod server
67+ CMD ["node" , "./dist/index.js" ]
0 commit comments