Dockerfile 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # Stage 1: Install dependencies
  2. FROM node:22-slim AS deps
  3. WORKDIR /app
  4. COPY package.json package-lock.json ./
  5. RUN npm ci
  6. # Stage 2: Build the application
  7. FROM node:22-slim AS builder
  8. WORKDIR /app
  9. COPY --from=deps /app/node_modules ./node_modules
  10. COPY . .
  11. # Skip env validation during build (validated at runtime)
  12. ENV SKIP_ENV_VALIDATION=1
  13. ENV NEXT_TELEMETRY_DISABLED=1
  14. RUN npm run build
  15. # Stage 3: Production runner
  16. FROM node:22-slim AS runner
  17. WORKDIR /app
  18. ENV NODE_ENV=production
  19. ENV NEXT_TELEMETRY_DISABLED=1
  20. # Install tini for proper PID 1 handling
  21. RUN apt-get update && apt-get install -y --no-install-recommends tini \
  22. && rm -rf /var/lib/apt/lists/*
  23. # Create non-root user
  24. RUN addgroup --system --gid 1001 nodejs \
  25. && adduser --system --uid 1001 nextjs
  26. # Copy standalone output
  27. COPY --from=builder /app/public ./public
  28. COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
  29. COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
  30. USER nextjs
  31. EXPOSE 3000
  32. ENV PORT=3000
  33. ENV HOSTNAME="0.0.0.0"
  34. ENTRYPOINT ["tini", "--"]
  35. CMD ["node", "server.js"]