Files
mini-erp/mini-frontend/Dockerfile
T

40 lines
1.5 KiB
Docker
Raw Normal View History

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