Dockerfile 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. FROM node:22-alpine AS base
  2. RUN corepack enable && corepack prepare pnpm@latest --activate
  3. WORKDIR /app
  4. FROM base AS deps
  5. COPY package.json pnpm-lock.yaml ./
  6. RUN pnpm install --frozen-lockfile
  7. FROM base AS builder
  8. COPY --from=deps /app/node_modules ./node_modules
  9. COPY . .
  10. RUN pnpm build
  11. FROM node:22-alpine AS runner
  12. WORKDIR /app
  13. ENV NODE_ENV=production
  14. ENV NEXT_TELEMETRY_DISABLED=1
  15. RUN addgroup --system --gid 1001 nodejs && \
  16. adduser --system --uid 1001 nextjs && \
  17. apk add --no-cache curl
  18. COPY --from=builder /app/public ./public
  19. COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
  20. COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
  21. RUN mkdir -p /app/data && chown nextjs:nodejs /app/data
  22. COPY docker-entrypoint.sh /app/docker-entrypoint.sh
  23. RUN chmod +x /app/docker-entrypoint.sh
  24. EXPOSE 3000
  25. ENV PORT=3000
  26. ENV HOSTNAME="0.0.0.0"
  27. HEALTHCHECK --interval=30s --timeout=5s --retries=3 --start-period=30s \
  28. CMD curl -f http://localhost:3000 || exit 1
  29. USER nextjs
  30. ENTRYPOINT ["/app/docker-entrypoint.sh"]