Files
gridpilot.gg/apps/api/Dockerfile.prod
2025-12-25 15:24:54 +01:00

47 lines
1.3 KiB
Docker

FROM node:20-alpine AS builder
WORKDIR /app
# Copy package manifests and install dependencies (incl. workspaces)
COPY package.json package-lock.json ./
COPY apps/api/package.json apps/api/package.json
RUN npm ci --workspaces --include-workspace-root
# Copy sources for building (monorepo)
COPY apps/api apps/api/
COPY core core/
COPY adapters adapters/
COPY apps/api/tsconfig.json apps/api/
COPY tsconfig.base.json ./
# Build shared libs + API (so runtime imports resolve)
RUN npx tsc -b core/tsconfig.json adapters/tsconfig.json
RUN npm run build --workspace=@gridpilot/api
# Production stage: slim image with only production dependencies
FROM node:20-alpine AS production_final
WORKDIR /app
# Install wget for healthchecks
RUN apk add --no-cache wget
# Copy package files and install production dependencies only
COPY --from=builder /app/package.json ./
COPY --from=builder /app/package-lock.json ./
RUN npm ci --omit=dev
# Copy built application from builder stage
COPY --from=builder /app/apps/api/dist ./apps/api/dist
# Provide runtime module resolution for @core/* and @adapters/*
COPY --from=builder /app/dist/core /app/node_modules/@core
COPY --from=builder /app/dist/adapters /app/node_modules/@adapters
EXPOSE 3000
ENV NODE_ENV=production
# Command to run the NestJS application
CMD ["node", "./apps/api/dist/main"]