Files
gridpilot.gg/apps/api/Dockerfile.prod
2025-12-15 13:34:15 +01:00

45 lines
1.2 KiB
Docker

FROM node:20-alpine AS builder
WORKDIR /app
# Copy root package.json and install dependencies (for monorepo)
COPY package.json package-lock.json ./
RUN npm ci
# Copy apps/api and packages for building
COPY apps/api apps/api/
COPY packages packages/
COPY apps/api/tsconfig.json apps/api/
COPY tsconfig.base.json ./
# Build the NestJS application (ensuring correct workspace context)
# Run from the root workspace context
# RUN node ./node_modules/@nestjs/cli/bin/nest.js build --workspace=api # Not needed, npm run handles it
RUN npm run build --workspace=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
# Copy packages (needed for runtime dependencies)
COPY --from=builder /app/packages ./packages
EXPOSE 3000
ENV NODE_ENV=production
# Command to run the NestJS application
CMD ["node", "./apps/api/dist/main"]