31 lines
696 B
Docker
31 lines
696 B
Docker
### Build stage
|
|
FROM node:20-alpine AS builder
|
|
WORKDIR /app
|
|
|
|
# install dependencies
|
|
COPY package.json package-lock.json* ./
|
|
RUN npm ci
|
|
|
|
# copy sources and generate prisma client, then build
|
|
COPY . .
|
|
RUN npx prisma generate
|
|
RUN npm run build
|
|
|
|
### Run stage
|
|
FROM node:20-alpine AS runner
|
|
WORKDIR /app
|
|
|
|
# only install production deps
|
|
COPY package.json package-lock.json* ./
|
|
RUN npm ci --omit=dev
|
|
|
|
# copy compiled app and prisma client artifacts from builder
|
|
COPY --from=builder /app/dist ./dist
|
|
COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma
|
|
COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
EXPOSE 3000
|
|
CMD ["node", "dist/app.js"]
|