Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
72 lines (48 loc) · 2.1 KB
/
Copy pathDockerfile
File metadata and controls
72 lines (48 loc) · 2.1 KB
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# syntax=docker/dockerfile:1.6
ARG BASE_IMAGE
# ---------------------------------------------------------------------------
# Shared
# ---------------------------------------------------------------------------
FROM ${BASE_IMAGE} AS builder
WORKDIR /app
ENV COREPACK_HOME=/opt/corepack
RUN corepack enable
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
RUN --mount=type=cache,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile
COPY . .
RUN pnpm run build
# ---------------------------------------------------------------------------
# Development
# ---------------------------------------------------------------------------
FROM builder AS development
RUN apk add --no-cache make
ENV SERVICE_EXEC_WITH_SECRETS="sh /usr/local/bin/with-vault-secrets.sh"
EXPOSE 4003
CMD ["node", "dist/src/main.js"]
# ---------------------------------------------------------------------------
# Production
# ---------------------------------------------------------------------------
FROM builder AS production-dependencies
RUN pnpm prune --prod
FROM ${BASE_IMAGE} AS runner
ARG VCS_REF
RUN : "${VCS_REF:?VCS_REF build argument is required}"
LABEL org.opencontainers.image.source="https://github.com/MonadIAM/notification-service" \
org.opencontainers.image.revision="${VCS_REF}" \
org.opencontainers.image.description="MonadIAM Notification service"
WORKDIR /app
ENV NODE_ENV=production \
COREPACK_HOME=/opt/corepack \
COREPACK_ENABLE_NETWORK=0 \
SERVICE_EXEC_WITH_SECRETS=""
RUN apk add --no-cache make && corepack enable
COPY --from=builder /opt/corepack /opt/corepack
COPY --from=production-dependencies /app/node_modules ./node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder --chown=node:node /app/src ./src
COPY --chown=node:node configs/tsconfig.base.json ./configs/tsconfig.base.json
COPY --chown=node:node package.json pnpm-lock.yaml pnpm-workspace.yaml Makefile mikro-orm.config.ts tsconfig.json env.d.ts ./
RUN mkdir uploads && chown node:node uploads
USER node
EXPOSE 4003
CMD ["node", "--require", "./dist/src/observability/tracing/script.js", "dist/src/main.js"]