-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile.prod
54 lines (38 loc) · 1.62 KB
/
Dockerfile.prod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
FROM node:lts-slim AS base
WORKDIR /usr/src/app
LABEL org.opencontainers.image.source="https://github.com/rubberdok/indok-api"
LABEL org.opencontainers.image.description="Container image for the Indøk API."
LABEL org.opencontainers.image.licenses="MIT"
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
# Required for Prisma
RUN apt-get update -y \
&& apt-get install -y --no-install-recommends openssl \
&& apt-get clean
FROM base AS certs
RUN apt-get install -y --no-install-recommends curl ca-certificates
RUN curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem -o /etc/ssl/certs/DigiCertGlobalRootCA.crt.pem
FROM base AS prod-deps
ENV NODE_ENV=production
COPY package.json pnpm-lock.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
COPY prisma/ ./prisma
RUN pnpm run generate:prisma
FROM base AS build
COPY package.json pnpm-lock.yaml ./
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
COPY .swcrc codegen.config.ts biome.json tsconfig.json ./
COPY scripts/ ./scripts
COPY src/ ./src
RUN pnpm build:production
FROM base AS runner
ENV NODE_ENV=production
COPY --chown=node:node --from=certs /etc/ssl/certs /etc/ssl/certs
COPY --chown=node:node --from=build /usr/src/app/scripts ./scripts
COPY --chown=node:node --from=prod-deps /usr/src/app/node_modules ./node_modules
COPY --chown=node:node --from=build /usr/src/app/package.json ./package.json
COPY --chown=node:node --from=prod-deps /usr/src/app/prisma ./prisma
COPY --chown=node:node --from=build /usr/src/app/dist ./dist
USER node
CMD [ "node", "./dist/server.js" ]