# syntax=docker/dockerfile:1 # ---- Build stage ---- FROM node:22-alpine AS build WORKDIR /app # Install dependencies against the lockfile for reproducible builds COPY package.json package-lock.json ./ RUN npm ci # Build the Vite app (outputs to /app/dist) COPY . . RUN npm run build # ---- Runtime stage ---- FROM node:22-alpine AS runtime WORKDIR /app ENV NODE_ENV=production ENV PORT=3001 # Only production dependencies are needed to run the Express server COPY package.json package-lock.json ./ RUN npm ci --omit=dev && npm cache clean --force # Copy the built static assets and the server COPY --from=build /app/dist ./dist COPY server.js ./ # Run as the built-in non-root user USER node EXPOSE 3001 CMD ["node", "server.js"]