95 lines
2.2 KiB
Docker
95 lines
2.2 KiB
Docker
# BFF Backend Dockerfile for Production
|
|
FROM node:22-alpine AS deps
|
|
|
|
# Install pnpm
|
|
RUN corepack enable && corepack prepare pnpm@10.15.0 --activate
|
|
|
|
# Create app directory
|
|
WORKDIR /app
|
|
|
|
# Copy workspace configuration
|
|
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./
|
|
|
|
# Copy package.json files for all workspaces
|
|
COPY shared/package.json ./shared/
|
|
COPY bff/package.json ./bff/
|
|
|
|
# Install dependencies only
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
# Build stage
|
|
FROM node:22-alpine AS builder
|
|
WORKDIR /app
|
|
|
|
# Install pnpm
|
|
RUN corepack enable && corepack prepare pnpm@10.15.0 --activate
|
|
|
|
# Copy workspace files
|
|
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./
|
|
|
|
# Copy all source code
|
|
COPY shared/ ./shared/
|
|
COPY bff/ ./bff/
|
|
|
|
# Copy node_modules from deps stage
|
|
COPY --from=deps /app/node_modules ./node_modules
|
|
COPY --from=deps /app/shared/node_modules ./shared/node_modules
|
|
COPY --from=deps /app/bff/node_modules ./bff/node_modules
|
|
|
|
# Build shared package first
|
|
WORKDIR /app/shared
|
|
RUN pnpm build
|
|
|
|
# Build bff
|
|
WORKDIR /app/bff
|
|
RUN pnpm run build
|
|
|
|
# Generate Prisma client
|
|
RUN pnpm prisma generate
|
|
|
|
# Production stage
|
|
FROM node:22-alpine AS runner
|
|
WORKDIR /app
|
|
|
|
# Install pnpm for production dependencies
|
|
RUN corepack enable && corepack prepare pnpm@10.15.0 --activate
|
|
|
|
# Copy workspace configuration for production install
|
|
COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./
|
|
COPY shared/package.json ./shared/
|
|
COPY bff/package.json ./bff/
|
|
|
|
# Install only production dependencies
|
|
RUN pnpm install --frozen-lockfile --prod
|
|
|
|
# Copy built applications
|
|
COPY --from=builder /app/shared/dist ./shared/dist
|
|
COPY --from=builder /app/bff/dist ./bff/dist
|
|
COPY --from=builder /app/bff/prisma ./bff/prisma
|
|
|
|
# Copy generated Prisma client
|
|
COPY --from=builder /app/bff/node_modules/.prisma ./bff/node_modules/.prisma
|
|
COPY --from=builder /app/bff/node_modules/@prisma ./bff/node_modules/@prisma
|
|
|
|
# Create non-root user
|
|
RUN addgroup --system --gid 1001 nodejs
|
|
RUN adduser --system --uid 1001 nestjs
|
|
|
|
# Create necessary directories
|
|
RUN mkdir -p /app/secrets /app/logs && chown -R nestjs:nodejs /app/secrets /app/logs
|
|
|
|
# Set correct permissions
|
|
RUN chown -R nestjs:nodejs /app
|
|
|
|
USER nestjs
|
|
|
|
EXPOSE 4000
|
|
|
|
ENV PORT=4000
|
|
ENV NODE_ENV=production
|
|
|
|
WORKDIR /app/bff
|
|
|
|
# Start the application
|
|
CMD ["node", "dist/main"]
|