Spaces:
Paused
Paused
| # =============================== | |
| # Optimized for Hugging Face Spaces | |
| # =============================== | |
| FROM python:3.10-slim | |
| ENV PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 \ | |
| PIP_NO_CACHE_DIR=1 \ | |
| PIP_DISABLE_PIP_VERSION_CHECK=1 \ | |
| DEBIAN_FRONTEND=noninteractive | |
| # =============================== | |
| # System dependencies (minimal) | |
| # =============================== | |
| RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| libgl1 \ | |
| libglib2.0-0 \ | |
| libsm6 \ | |
| libxext6 \ | |
| libxrender-dev \ | |
| libgomp1 \ | |
| ffmpeg \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # =============================== | |
| # Verify FFmpeg | |
| # =============================== | |
| RUN ffmpeg -version 2>/dev/null || echo "⚠️ FFmpeg not found" | |
| # =============================== | |
| # Working directory | |
| # =============================== | |
| WORKDIR /app | |
| # =============================== | |
| # Python dependencies | |
| # =============================== | |
| COPY backend/requirements.txt . | |
| # Install dependencies with retry logic | |
| RUN pip install --no-cache-dir --upgrade pip && \ | |
| pip install --no-cache-dir -r requirements.txt || \ | |
| (echo "Retrying pip install..." && pip install --no-cache-dir -r requirements.txt) | |
| # =============================== | |
| # Pre-download MediaPipe models | |
| # =============================== | |
| RUN echo "📥 Downloading MediaPipe Pose models..." && \ | |
| python3 -c "import mediapipe as mp; mp.solutions.pose.Pose(model_complexity=0).close(); print('✅ Models ready');" || \ | |
| echo "⚠️ MediaPipe model download failed (will download on first use)" | |
| # =============================== | |
| # Copy application files | |
| # =============================== | |
| COPY backend/app /app/app | |
| COPY frontend /app/frontend | |
| COPY startup.sh /app/startup.sh | |
| # =============================== | |
| # Create directories and permissions | |
| # =============================== | |
| RUN mkdir -p /app/uploads /app/outputs /app/logs && \ | |
| chmod +x /app/startup.sh && \ | |
| chmod -R 755 /app | |
| # =============================== | |
| # Non-root user for security | |
| # =============================== | |
| RUN useradd -m -u 1000 appuser && \ | |
| chown -R appuser:appuser /app | |
| USER appuser | |
| # =============================== | |
| # Expose port | |
| # =============================== | |
| EXPOSE 7860 | |
| # =============================== | |
| # Health check | |
| # =============================== | |
| HEALTHCHECK --interval=30s --timeout=10s --start-period=5m --retries=3 \ | |
| CMD curl -f http://localhost:7860/health || exit 1 | |
| # =============================== | |
| # Startup | |
| # =============================== | |
| CMD ["/bin/bash", "/app/startup.sh"] |