# ============================================================================ # UNIFIED DOCKERFILE FOR HUGGING FACE DEPLOYMENT # Intel Image Classifier - Django Backend + React Frontend + ML Models # ============================================================================ FROM python:3.12-slim # Set environment variables ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PATH=/app/node_modules/.bin:$PATH \ NODE_ENV=production \ DEBUG=False WORKDIR /app # ============================================================================ # SYSTEM DEPENDENCIES # ============================================================================ RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ gnupg \ && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ && apt-get install -y --no-install-recommends \ nodejs \ build-essential \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # ============================================================================ # PYTHON DEPENDENCIES # ============================================================================ COPY backend/requirements.txt ./requirements.txt RUN pip install --no-cache-dir -r requirements.txt # ============================================================================ # PROJECT FILES # ============================================================================ COPY . . # ============================================================================ # BUILD FRONTEND (React) # ============================================================================ WORKDIR /app/frontend RUN npm install --omit=dev RUN npm run build # ============================================================================ # PREPARE BACKEND # ============================================================================ WORKDIR /app/backend/api # Create necessary directories for Django RUN mkdir -p static media logs # Collect static files during build (not runtime) RUN python manage.py collectstatic --noinput --clear || echo "Warning: Static files collection failed during build" # Copy frontend build to Django static directory during build RUN mkdir -p static/frontend && \ cp -r /app/frontend/build/* static/frontend/ 2>/dev/null || echo "Warning: Frontend build copy failed during build" # Make entrypoint executable RUN chmod +x /app/backend/api/entrypoint.sh # ============================================================================ # EXPOSE & RUN # ============================================================================ EXPOSE 7860 # Use entrypoint script for proper initialization ENTRYPOINT ["/app/backend/api/entrypoint.sh"]