FROM node:20-alpine AS build WORKDIR /app # Certificado extra de la empresa (VPN, proxy o antivirus corporativo que # intercepta HTTPS, ej. Zscaler/Netskope). Si mini-frontend/certs/ tiene un # archivo .pem/.crt, npm confía en él para poder salir a internet durante el # build. Si la carpeta está vacía (caso normal), este paso no hace nada. COPY certs/ /usr/local/share/extra-ca/ COPY package.json package-lock.json ./ RUN CERT_FILE=$(find /usr/local/share/extra-ca -maxdepth 1 -type f \( -name "*.pem" -o -name "*.crt" -o -name "*.cer" \) 2>/dev/null | head -n1); \ if [ -n "$CERT_FILE" ]; then export NODE_EXTRA_CA_CERTS="$CERT_FILE"; fi; \ npm ci COPY . . # Vite incrusta las variables VITE_* en el bundle en tiempo de build, no en # tiempo de ejecución — por eso se pasa como build arg y no como env var del # contenedor final. Debe ser la IP/hostname real del servidor donde corre el # backend dentro de la red de la empresa (no "localhost": eso resolvería a la # máquina de cada usuario, no al servidor). ARG VITE_API_URL ENV VITE_API_URL=${VITE_API_URL} RUN npm run build FROM nginx:alpine # Zona horaria del contenedor. Por defecto Perú (America/Lima); cambiar el # build arg si se despliega para un cliente en otro país de Latinoamérica. ARG TZ=America/Lima ENV TZ=${TZ} RUN apk add --no-cache tzdata \ && ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \ && echo ${TZ} > /etc/timezone COPY --from=build /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/conf.d/default.conf EXPOSE 80