# ========================================= # Stage 1: Build the Angular Application # ========================================= ARG NODE_VERSION=24.7.0-alpine # Use a lightweight Node.js image for building (customizable via ARG) FROM node:${NODE_VERSION} AS builder # Set the working directory inside the container WORKDIR /app # Copy package-related files first to leverage Docker's caching mechanism COPY package.json package-lock.json ./ # Install project dependencies using npm ci (ensures a clean, reproducible install) RUN --mount=type=cache,target=/root/.npm npm ci # Copy the rest of the application source code into the container COPY . . # Build the Angular application RUN npm run build # ========================================= # Stage 2: Run SSR Server # ========================================= FROM node:${NODE_VERSION} AS runner WORKDIR /app ENV NODE_ENV=production # Copy only necessary build output COPY --from=builder /app/dist ./dist COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/node_modules ./node_modules # Angular SSR default port EXPOSE 4000 # Start Nginx directly with custom config CMD ["node", "dist/*/server/server.mjs"]