# Build context: repository root (docker build -f backend/Dockerfile .) FROM node:22-alpine AS build WORKDIR /repo COPY package.json package-lock.json ./ COPY shared/package.json shared/ COPY backend/package.json backend/ COPY web/package.json web/ COPY tools/simulator/package.json tools/simulator/ RUN npm ci --workspace backend --include-workspace-root COPY tsconfig.base.json ./ COPY shared shared COPY backend backend RUN npm run build -w backend FROM node:22-alpine AS deps WORKDIR /repo COPY package.json package-lock.json ./ COPY shared/package.json shared/ COPY backend/package.json backend/ COPY web/package.json web/ COPY tools/simulator/package.json tools/simulator/ RUN npm ci --workspace backend --omit=dev && npm cache clean --force FROM node:22-alpine ENV NODE_ENV=production WORKDIR /app COPY --from=deps /repo/node_modules ./node_modules COPY --from=build /repo/backend/dist ./dist COPY backend/migrations ./migrations COPY backend/config ./config COPY backend/package.json ./package.json USER node EXPOSE 3001 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s CMD wget -qO- http://127.0.0.1:3001/api/health || exit 1 CMD ["node", "dist/server.js"]