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