45 lines
1.2 KiB
Docker
45 lines
1.2 KiB
Docker
# =========================================
|
|
# 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"]
|