Assist_Design/apps/bff/Dockerfile
2025-08-20 18:02:50 +09:00

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"]