FROM node:20-alpine AS base RUN apk add --no-cache git WORKDIR /app FROM base AS deps COPY package.json package-lock.json* ./ COPY apps/web/package.json ./apps/web/ COPY apps/worker/package.json ./apps/worker/ COPY packages/shared/package.json ./packages/shared/ COPY packages/parser/package.json ./packages/parser/ COPY packages/llm/package.json ./packages/llm/ COPY packages/diagrams/package.json ./packages/diagrams/ COPY packages/database/package.json ./packages/database/ RUN npm install --production=false FROM base AS builder COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npx prisma generate --schema=packages/database/prisma/schema.prisma RUN npx turbo build FROM base AS web RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 nextjs COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/apps/web/.next/static ./apps/web/.next/static COPY --from=builder --chown=nextjs:nodejs /app/apps/web/public ./apps/web/public COPY --from=builder --chown=nextjs:nodejs /app/packages/database/prisma ./packages/database/prisma USER nextjs EXPOSE 3000 ENV PORT=3000 HOSTNAME="0.0.0.0" CMD ["node", "apps/web/server.js"] FROM base AS worker RUN addgroup --system --gid 1001 nodejs && \ adduser --system --uid 1001 workeruser COPY --from=deps /app/node_modules ./node_modules COPY --from=builder /app/apps/worker/dist ./apps/worker/dist COPY --from=builder /app/packages/shared/dist ./packages/shared/dist COPY --from=builder /app/packages/parser/dist ./packages/parser/dist COPY --from=builder /app/packages/llm/dist ./packages/llm/dist COPY --from=builder /app/packages/diagrams/dist ./packages/diagrams/dist COPY --from=builder /app/packages/database/package.json ./packages/database/ COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma COPY --from=builder /app/packages/database/prisma ./packages/database/prisma COPY --from=builder /app/package.json ./ COPY --from=builder /app/apps/worker/package.json ./apps/worker/ COPY --from=builder /app/packages/shared/package.json ./packages/shared/ COPY --from=builder /app/packages/parser/package.json ./packages/parser/ COPY --from=builder /app/packages/llm/package.json ./packages/llm/ COPY --from=builder /app/packages/diagrams/package.json ./packages/diagrams/ USER workeruser CMD ["node", "apps/worker/dist/index.js"]