FROM node:18-slim AS installer RUN npm install -g pnpm WORKDIR /app # First install the dependencies (as they change less often) COPY . . # Copy .env file because Docker don't follow symlinks COPY .env /app/apps/web/ RUN pnpm install # Build the project RUN pnpm dlx prisma generate RUN pnpm turbo run build --filter=web... FROM node:18-slim AS runner RUN npm install -g pnpm # Don't run production as root RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs USER nextjs WORKDIR /home/nextjs COPY --from=installer /app/apps/web/next.config.js . COPY --from=installer /app/apps/web/package.json . # Automatically leverage output traces to reduce image size # https://nextjs.org/docs/advanced-features/output-file-tracing COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/standalone ./ COPY --from=installer --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static COPY --from=installer --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public COPY --from=installer --chown=nextjs:nodejs /app/packages/database/prisma ./packages/database/prisma CMD pnpm dlx prisma migrate deploy && node apps/web/server.js