Dockerfile 848 B

12345678910111213141516171819202122232425262728293031323334353637383940
  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 --from=builder /app/data ./data
  25. COPY scripts /app
  26. RUN chmod +x /app/setup.sh
  27. ENTRYPOINT ["/app/setup.sh"]
  28. EXPOSE 3000
  29. ENV PORT=3000
  30. CMD ["pnpm", "start"]