-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
27 lines (21 loc) · 883 Bytes
/
Dockerfile
File metadata and controls
27 lines (21 loc) · 883 Bytes
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
# Build stage: install only production dependencies
FROM node:20-alpine AS deps
WORKDIR /usr/src/app
ENV NODE_ENV=production
COPY package*.json ./
RUN if [ -f package-lock.json ]; then npm ci --omit=dev --omit=optional --no-fund --no-audit; else npm install --omit=dev --omit=optional --no-fund --no-audit; fi \
&& npm prune --omit=dev --omit=optional \
&& npm cache clean --force
# Runtime stage: minimal Alpine with just node
FROM alpine:3.19 AS runner
WORKDIR /usr/src/app
ENV NODE_ENV=production
RUN apk add --no-cache nodejs=~20 \
&& addgroup -S node && adduser -S node -G node
COPY --from=deps --chown=node:node /usr/src/app/node_modules ./node_modules
COPY --chown=node:node package*.json ./
COPY --chown=node:node index.js ./
COPY --chown=node:node src ./src
COPY --chown=node:node deploy-commands.js ./deploy-commands.js
USER node
CMD ["node", "index.js"]