Dockerfile 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. # Base stage with system dependencies
  2. FROM node:20 AS base
  3. # Install system dependencies including HandBrakeCLI, SQLite, and FFmpeg
  4. RUN apt-get update && apt-get install -y \
  5. handbrake-cli \
  6. sqlite3 \
  7. ffmpeg \
  8. && rm -rf /var/lib/apt/lists/*
  9. # Install pnpm
  10. RUN npm install -g pnpm
  11. WORKDIR /app
  12. # Copy package files for dependency installation
  13. COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
  14. COPY apps/web/package.json apps/web/
  15. COPY apps/service/package.json apps/service/
  16. COPY apps/cli/package.json apps/cli/
  17. COPY packages/eslint-config/package.json packages/eslint-config/
  18. COPY packages/typescript-config/package.json packages/typescript-config/
  19. COPY packages/ui/package.json packages/ui/
  20. # Dependencies stage
  21. FROM base AS dependencies
  22. # Install all dependencies (including dev dependencies for building)
  23. RUN pnpm install --frozen-lockfile
  24. # Development stage
  25. FROM dependencies AS development
  26. # Copy all source code
  27. COPY . .
  28. # Expose ports
  29. EXPOSE 3000 3001 3002
  30. # Set the CLI as the default entrypoint for development
  31. ENTRYPOINT ["pnpm", "run", "cli"]
  32. CMD []
  33. # Builder stage - builds the application
  34. FROM dependencies AS builder
  35. # Copy all source code
  36. COPY . .
  37. # Build all applications
  38. RUN pnpm run build
  39. # Production dependencies stage
  40. FROM base AS prod-dependencies
  41. # Install only production dependencies
  42. RUN pnpm install --frozen-lockfile --prod
  43. # Production stage
  44. FROM node:20-slim AS production
  45. # Install runtime system dependencies
  46. RUN apt-get update && apt-get install -y \
  47. handbrake-cli \
  48. sqlite3 \
  49. ffmpeg \
  50. && rm -rf /var/lib/apt/lists/*
  51. # Install pnpm
  52. RUN npm install -g pnpm
  53. WORKDIR /app
  54. # Copy package files
  55. COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./
  56. COPY apps/web/package.json apps/web/
  57. COPY apps/service/package.json apps/service/
  58. COPY apps/cli/package.json apps/cli/
  59. COPY packages/eslint-config/package.json packages/eslint-config/
  60. COPY packages/typescript-config/package.json packages/typescript-config/
  61. COPY packages/ui/package.json packages/ui/
  62. # Copy production dependencies
  63. COPY --from=prod-dependencies /app/node_modules ./node_modules
  64. # Copy built applications
  65. COPY --from=builder /app/apps/web/.next ./apps/web/.next
  66. COPY --from=builder /app/apps/web/public ./apps/web/public
  67. COPY --from=builder /app/apps/service/dist ./apps/service/dist
  68. COPY --from=builder /app/apps/cli/dist ./apps/cli/dist
  69. # Copy necessary source files for Next.js
  70. COPY apps/web/next.config.ts apps/web/
  71. COPY apps/web/next.config.js apps/web/
  72. # Expose ports
  73. EXPOSE 3000 3001 3002
  74. # Set the CLI as the default entrypoint for production
  75. ENTRYPOINT ["pnpm", "run", "cli"]
  76. CMD []