# syntax=docker/dockerfile:1.7 ARG NODE_IMAGE=node:24.18.0-bookworm-slim # ============================================================ # Dependencias # ============================================================ FROM ${NODE_IMAGE} AS deps WORKDIR /app ENV NEXT_TELEMETRY_DISABLED=1 \ NPM_CONFIG_AUDIT=false \ NPM_CONFIG_FUND=false \ NPM_CONFIG_FETCH_RETRIES=5 \ NPM_CONFIG_FETCH_RETRY_MINTIMEOUT=20000 \ NPM_CONFIG_FETCH_RETRY_MAXTIMEOUT=120000 \ NPM_CONFIG_FETCH_TIMEOUT=120000 \ NPM_CONFIG_LOGLEVEL=warn COPY package.json package-lock.json ./ RUN --mount=type=cache,target=/root/.npm,sharing=locked \ npm ci \ --no-audit \ --no-fund \ --prefer-offline # ============================================================ # Compilación Next.js # ============================================================ FROM ${NODE_IMAGE} AS builder WORKDIR /app ENV NEXT_TELEMETRY_DISABLED=1 \ NODE_ENV=production COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npm run build # ============================================================ # Imagen final # ============================================================ FROM ${NODE_IMAGE} AS runner WORKDIR /app ENV NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ HOSTNAME=0.0.0.0 \ PORT=80 RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ libcap2-bin \ wget \ && rm -rf /var/lib/apt/lists/* \ && groupadd --system --gid 1001 nodejs \ && useradd \ --system \ --uid 1001 \ --gid nodejs \ --create-home \ nextjs \ && setcap 'cap_net_bind_service=+ep' /usr/local/bin/node COPY --from=builder \ --chown=nextjs:nodejs \ /app/public \ ./public COPY --from=builder \ --chown=nextjs:nodejs \ /app/.next/standalone \ ./ COPY --from=builder \ --chown=nextjs:nodejs \ /app/.next/static \ ./.next/static USER nextjs EXPOSE 80 HEALTHCHECK \ --interval=30s \ --timeout=5s \ --start-period=20s \ --retries=3 \ CMD wget -qO- http://127.0.0.1/api/health || exit 1 CMD ["node", "server.js"]