FROM node:18-alpine AS frontend-builder # Instalar dependencias del frontend WORKDIR /app COPY package*.json ./ # Instalar TODAS las dependencias (incluyendo devDependencies para el build) RUN npm ci # Copiar código fuente y construir COPY . . RUN npm run build # Imagen de Python para el backend FROM python:3.11-slim # Variables de entorno ENV PYTHONPATH=/app/api ENV PYTHONUNBUFFERED=1 ENV PORT=8000 # Instalar dependencias del sistema RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* # Crear directorio de trabajo WORKDIR /app # Copiar requirements y instalar dependencias Python COPY api/requirements.txt ./api/ RUN pip install --no-cache-dir -r api/requirements.txt # Copiar código del backend COPY api/ ./api/ # Copiar archivos construidos del frontend COPY --from=frontend-builder /app/dist ./static # Crear usuario no-root RUN adduser --disabled-password --gecos '' appuser && \ chown -R appuser:appuser /app USER appuser # Exponer puerto EXPOSE 8000 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD curl -f http://localhost:8000/api/health || exit 1 # Comando de inicio CMD ["python", "api/main.py"]