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