1- FROM node:14-alpine as deps
1+ # REPOSITORY DEPENDENCIES
2+ FROM node:18.12-alpine as repository_deps
23RUN apk add --no-cache libc6-compat
4+
5+ WORKDIR /app
6+ COPY ./libs/repository ./
7+
8+ RUN yarn install --frozen-lockfile
9+ RUN yarn prisma:generate
10+ # ------------
11+
12+ # API DEPENDENCIES
13+ FROM node:18.12-alpine as api_deps
14+ RUN apk add --no-cache libc6-compat
15+
316WORKDIR /app
417COPY ./api/yarn.lock ./api/package.json ./
5- COPY ./schema.prisma ./src/schema.prisma
6- RUN yarn install --ignore-scripts --frozen-lockfile --silent
7- RUN npx prisma generate --schema="./src/schema.prisma"
818
9- FROM node:14-alpine as builder
19+ RUN yarn install --frozen-lockfile
20+ # ------------
21+
22+ # BUILD API
23+ FROM node:18.12-alpine as api
1024WORKDIR /app
11- COPY --from=deps /app/node_modules ./node_modules
12- COPY ./api .
13- COPY ./schema.prisma ./src/schema.prisma
14- RUN yarn build
1525
16- FROM node:14-alpine as runner
26+ COPY --from=api_deps /app/node_modules ./api/node_modules
27+ COPY --from=repository_deps /app ./libs/repository
28+
29+ COPY ./api ./api
30+
31+ RUN cd ./api && yarn build
32+ # ------------
33+
34+ FROM node:18.12-alpine as main
35+
1736WORKDIR /app
37+
1838RUN addgroup -g 1001 -S nodejs
1939RUN adduser -S nestjs -u 1001
2040
21- COPY --from=builder --chown=nestjs:nodejs /app/dist ./dist
22- COPY --from=builder --chown=nestjs:nodejs /app/node_modules ./node_modules
23- COPY --from=builder --chown=nestjs:nodejs /app/src/swagger.yaml ./src/swagger.yaml
41+ COPY --from=api --chown=nestjs:nodejs /app/api /dist ./dist
42+ COPY --from=api --chown=nestjs:nodejs /app/api /node_modules ./node_modules
43+ COPY --from=api --chown=nestjs:nodejs /app/api /src/swagger.yaml ./src/swagger.yaml
2444
2545ENV DB_ADDRESS=$DB_ADDRESS
2646ENV DB_USER=$DB_USER
@@ -38,4 +58,4 @@ USER nestjs
3858
3959EXPOSE 3000
4060
41- CMD ["sh", "-c", "ENVIRONMENT=$ENVIRONMENT DB_ADDRESS=$DB_ADDRESS DB_USER=$DB_USER DB_PASSWORD=$DB_PASSWORD DB_NAME=$DB_NAME DB_PORT=$DB_PORT JWT_SECRET=$JWT_SECRET JWT_EXPIRES_IN=$JWT_EXPIRES_IN PORT_API=$PORT_API JWT_REFRESH_TOKEN_SECRET=$JWT_REFRESH_TOKEN_SECRET JWT_REFRESH_TOKEN_EXPIRATION_TIME=$JWT_REFRESH_TOKEN_EXPIRATION_TIME NODE_ENV=production node dist/src/ main"]
61+ CMD ["sh", "-c", "ENVIRONMENT=$ENVIRONMENT DB_ADDRESS=$DB_ADDRESS DB_USER=$DB_USER DB_PASSWORD=$DB_PASSWORD DB_NAME=$DB_NAME DB_PORT=$DB_PORT JWT_SECRET=$JWT_SECRET JWT_EXPIRES_IN=$JWT_EXPIRES_IN PORT_API=$PORT_API JWT_REFRESH_TOKEN_SECRET=$JWT_REFRESH_TOKEN_SECRET JWT_REFRESH_TOKEN_EXPIRATION_TIME=$JWT_REFRESH_TOKEN_EXPIRATION_TIME NODE_ENV=production node dist/main"]
0 commit comments