1# ─── Stage 1: Dependencies ────────────────────────────────────────
2FROM node:20-alpine AS deps
3WORKDIR /app
4COPY package*.json ./
5RUN npm ci
6
7# ─── Stage 2: Builder ─────────────────────────────────────────────
8FROM node:20-alpine AS builder
9WORKDIR /app
10COPY --from=deps /app/node_modules ./node_modules
11COPY . .
12RUN npm ci --only=production
13
14# ─── Stage 3: Runner ──────────────────────────────────────────────
15FROM node:20-alpine AS runner
16WORKDIR /app
17ENV NODE_ENV=production
18RUN addgroup --system --gid 1001 appgroup && \
19 adduser --system --uid 1001 --ingroup appgroup appuser
20
21COPY --from=builder /app/node_modules ./node_modules
22COPY --from=builder /app .
23
24USER appuser
25
26EXPOSE 3000
27CMD ["node server.js"]