diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index 06f5417..00c84ce 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -48,9 +48,6 @@ RUN pnpm turbo build --filter=@mosaic/api # ====================== FROM node:20-alpine AS production -# Install pnpm -RUN corepack enable && corepack prepare pnpm@10.19.0 --activate - # Install dumb-init for proper signal handling RUN apk add --no-cache dumb-init @@ -59,24 +56,17 @@ RUN addgroup -g 1001 -S nodejs && adduser -S nestjs -u 1001 WORKDIR /app -# Copy package files -COPY --chown=nestjs:nodejs pnpm-workspace.yaml package.json pnpm-lock.yaml ./ -COPY --chown=nestjs:nodejs turbo.json ./ +# Copy node_modules from builder (includes generated Prisma client in pnpm store) +# pnpm stores the Prisma client in node_modules/.pnpm/.../.prisma, so we need the full tree +COPY --from=builder --chown=nestjs:nodejs /app/node_modules ./node_modules -# Copy package.json files for workspace resolution -COPY --chown=nestjs:nodejs packages/shared/package.json ./packages/shared/ -COPY --chown=nestjs:nodejs packages/ui/package.json ./packages/ui/ -COPY --chown=nestjs:nodejs packages/config/package.json ./packages/config/ -COPY --chown=nestjs:nodejs apps/api/package.json ./apps/api/ - -# Install production dependencies only -RUN pnpm install --prod --frozen-lockfile - -# Copy built application and dependencies +# Copy built packages (includes dist/ directories) COPY --from=builder --chown=nestjs:nodejs /app/packages ./packages + +# Copy built API application COPY --from=builder --chown=nestjs:nodejs /app/apps/api/dist ./apps/api/dist COPY --from=builder --chown=nestjs:nodejs /app/apps/api/prisma ./apps/api/prisma -COPY --from=builder --chown=nestjs:nodejs /app/apps/api/node_modules/.prisma ./apps/api/node_modules/.prisma +COPY --from=builder --chown=nestjs:nodejs /app/apps/api/package.json ./apps/api/ # Set working directory to API app WORKDIR /app/apps/api diff --git a/apps/web/Dockerfile b/apps/web/Dockerfile index 71fd794..7de7aaf 100644 --- a/apps/web/Dockerfile +++ b/apps/web/Dockerfile @@ -52,7 +52,7 @@ RUN pnpm turbo build --filter=@mosaic/web # ====================== FROM node:20-alpine AS production -# Install pnpm +# Install pnpm (needed for pnpm start command) RUN corepack enable && corepack prepare pnpm@10.19.0 --activate # Install dumb-init for proper signal handling @@ -63,24 +63,17 @@ RUN addgroup -g 1001 -S nodejs && adduser -S nextjs -u 1001 WORKDIR /app -# Copy package files -COPY --chown=nextjs:nodejs pnpm-workspace.yaml package.json pnpm-lock.yaml ./ -COPY --chown=nextjs:nodejs turbo.json ./ +# Copy node_modules from builder (includes all dependencies in pnpm store) +COPY --from=builder --chown=nextjs:nodejs /app/node_modules ./node_modules -# Copy package.json files for workspace resolution -COPY --chown=nextjs:nodejs packages/shared/package.json ./packages/shared/ -COPY --chown=nextjs:nodejs packages/ui/package.json ./packages/ui/ -COPY --chown=nextjs:nodejs packages/config/package.json ./packages/config/ -COPY --chown=nextjs:nodejs apps/web/package.json ./apps/web/ - -# Install production dependencies only -RUN pnpm install --prod --frozen-lockfile - -# Copy built application and dependencies +# Copy built packages (includes dist/ directories) COPY --from=builder --chown=nextjs:nodejs /app/packages ./packages + +# Copy built web application COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next ./apps/web/.next COPY --from=builder --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public COPY --from=builder --chown=nextjs:nodejs /app/apps/web/next.config.ts ./apps/web/ +COPY --from=builder --chown=nextjs:nodejs /app/apps/web/package.json ./apps/web/ # Set working directory to web app WORKDIR /app/apps/web