Dockerfile 828 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. FROM node:20-alpine AS base
  2. WORKDIR /app
  3. RUN npm install -g pnpm
  4. # Install dependencies
  5. FROM base AS deps
  6. COPY package.json pnpm-lock.yaml ./
  7. COPY prisma ./prisma
  8. RUN pnpm install --frozen-lockfile
  9. # Build the app
  10. FROM base AS builder
  11. COPY --from=deps /app/node_modules ./node_modules
  12. COPY --from=deps /app/prisma ./prisma
  13. COPY . .
  14. COPY .env.example .env
  15. RUN pnpm run build
  16. # Production image, copy only necessary files
  17. FROM base AS runner
  18. WORKDIR /app
  19. COPY --from=builder /app/public ./public
  20. COPY --from=builder /app/.next ./.next
  21. COPY --from=builder /app/node_modules ./node_modules
  22. COPY --from=builder /app/package.json ./package.json
  23. COPY --from=builder /app/prisma ./prisma
  24. COPY scripts/setup.sh /app/setup.sh
  25. RUN chmod +x /app/setup.sh
  26. ENTRYPOINT ["/app/setup.sh"]
  27. EXPOSE 3000
  28. ENV PORT=3000
  29. CMD ["pnpm", "start"]