From dc9827e353ef53955d77f14d2cfe10a5e070cd9b Mon Sep 17 00:00:00 2001 From: devops Date: Fri, 24 Jul 2026 04:15:25 +0000 Subject: [PATCH] Update workloads/ecommerce/Dockerfile --- workloads/ecommerce/Dockerfile | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/workloads/ecommerce/Dockerfile b/workloads/ecommerce/Dockerfile index c70a46f..a896d6d 100644 --- a/workloads/ecommerce/Dockerfile +++ b/workloads/ecommerce/Dockerfile @@ -3,7 +3,7 @@ ARG NODE_IMAGE=node:24.18.0-bookworm-slim # ============================================================ -# 1. Instalación de dependencias +# 1. Dependencias reproducibles # ============================================================ FROM ${NODE_IMAGE} AS deps @@ -16,25 +16,25 @@ ENV NEXT_TELEMETRY_DISABLED=1 \ NPM_CONFIG_FETCH_RETRY_MINTIMEOUT=10000 \ NPM_CONFIG_FETCH_RETRY_MAXTIMEOUT=60000 \ NPM_CONFIG_FETCH_TIMEOUT=120000 \ - NPM_CONFIG_MAXSOCKETS=6 \ + NPM_CONFIG_MAXSOCKETS=8 \ NPM_CONFIG_LOGLEVEL=info COPY package.json package-lock.json ./ -# Muestra las versiones y valida acceso al registro antes de instalar. RUN node --version \ && npm --version \ && npm config set registry https://registry.npmjs.org/ \ && npm config get registry \ && npm ping -# sharing=private evita quedar esperando el caché de otro build. -# timeout impide que npm quede bloqueado indefinidamente. +# El caché es privado para evitar esperas por locks de otros builds. +# El timeout evita una ejecución bloqueada indefinidamente. RUN --mount=type=cache,target=/root/.npm,sharing=private \ - timeout 600s npm ci \ + timeout --signal=TERM 900s \ + npm ci \ --no-audit \ --no-fund \ - --prefer-offline \ + --prefer-online \ --loglevel=info \ --timing @@ -53,27 +53,25 @@ ENV NODE_ENV=production \ COPY --from=deps /app/node_modules ./node_modules COPY . . -# Conserva el caché de compilación de Next.js entre builds. RUN --mount=type=cache,target=/app/.next/cache,sharing=private \ npm run build -# Verifica que next.config.ts tenga output: "standalone". RUN test -f /app/.next/standalone/server.js # ============================================================ -# 3. Imagen final de producción +# 3. Runtime de producción # ============================================================ FROM ${NODE_IMAGE} AS runner WORKDIR /app -ENV NODE_ENV=production \ +ENV DEBIAN_FRONTEND=noninteractive \ + NODE_ENV=production \ NEXT_TELEMETRY_DISABLED=1 \ HOSTNAME=0.0.0.0 \ PORT=80 -# libcap permite que el usuario no-root escuche en el puerto 80. RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates \ @@ -86,7 +84,8 @@ RUN apt-get update \ --create-home \ --shell /usr/sbin/nologin \ nextjs \ - && setcap 'cap_net_bind_service=+ep' /usr/local/bin/node + && setcap 'cap_net_bind_service=+ep' \ + /usr/local/bin/node COPY --from=builder \ --chown=nextjs:nodejs \ @@ -114,4 +113,4 @@ HEALTHCHECK \ --retries=3 \ CMD ["node", "-e", "fetch('http://127.0.0.1/api/health').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"] -CMD ["node", "server.js"] \ No newline at end of file +CMD ["node", "server.js"]