Files
mini-erp/mini-backend/Dockerfile
T

48 lines
2.0 KiB
Docker
Raw Normal View History

FROM python:3.12-slim
# Zona horaria del contenedor. Por defecto Perú (America/Lima), a juego con
# los datos de SAP que usa esta app (Country "PE", SUNAT, soles); 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 apt-get update \
&& apt-get install -y --no-install-recommends tzdata \
&& ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime \
&& echo ${TZ} > /etc/timezone \
&& rm -rf /var/lib/apt/lists/*
# Librerías nativas que necesita WeasyPrint (routers/reports.py) para
# renderizar HTML/CSS a PDF: no vienen incluidas en python:3.12-slim.
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libpangoft2-1.0-0 \
libcairo2 \
libgdk-pixbuf-2.0-0 \
shared-mime-info \
fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Certificado extra de la empresa (VPN, proxy o antivirus corporativo que
# intercepta HTTPS, ej. Zscaler/Netskope). Si mini-backend/certs/ tiene un
# archivo .pem/.crt, pip 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 requirements.txt .
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 PIP_CERT="$CERT_FILE"; fi; \
pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
# Un solo worker (por diseño, no un límite temporal): la sesión de SAP y las
# sesiones de empleado viven en diccionarios en memoria del proceso
# (core/sap.py, core/session.py). Con --workers > 1 cada proceso tendría su
# propia copia y los usuarios verían "sesión expirada" de forma intermitente
# según a qué worker los enrutara Docker/el proxy.
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]