# ============================================================ # VoxPopuli - Dockerfile # Microservicios FastAPI: Usuarios (8000), Reportes (8001), # Notificaciones (8002), Moderación (8003), Métricas (8004) # ============================================================ # --- Stage 1: Builder --- FROM python:3.11-slim AS builder WORKDIR /build # Instalar dependencias del sistema necesarias para compilación RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ libffi-dev \ libssl-dev \ default-libmysqlclient-dev \ pkg-config \ && rm -rf /var/lib/apt/lists/* # Copiar e instalar dependencias Python en un directorio aislado COPY requirements.txt . RUN pip install --upgrade pip && \ pip install --prefix=/install --no-cache-dir -r requirements.txt # --- Stage 2: Runtime --- FROM python:3.11-slim LABEL maintainer="Hokzaap S. de R.L. de C.V." LABEL description="VoxPopuli - Infraestructura de Voz Ciudadana" WORKDIR /app # Instalar únicamente librerías de runtime RUN apt-get update && apt-get install -y --no-install-recommends \ default-libmysqlclient-dev \ && rm -rf /var/lib/apt/lists/* RUN mkdir -p /app/logs/ # Copiar paquetes instalados desde el builder COPY --from=builder /install /usr/local # Copiar código fuente COPY src/ ./src/ # Variables de entorno con valores por defecto (sobreescribibles via .env o compose) ENV HOST=0.0.0.0 \ LOG_LEVEL=info \ PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PYTHONPATH=/app/src # Puertos expuestos por los cinco microservicios EXPOSE 8000 8001 8002 8003 8004 # Healthcheck básico contra la API de Usuarios HEALTHCHECK --interval=30s --timeout=10s --start-period=20s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/')" || exit 1 # Punto de entrada CMD ["python", "src/main.py"]