Base para el flujo de ramas por cliente. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
49 lines
2.0 KiB
Docker
49 lines
2.0 KiB
Docker
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"]
|