FROM python:3.10-slim # Set working directory WORKDIR /app # Install system dependencies (for Playwright/Chromium) RUN apt-get update && apt-get install -y \ wget \ gnupg \ ca-certificates \ fonts-liberation \ libasound2 \ libatk-bridge2.0-0 \ libatk1.0-0 \ libatspi2.0-0 \ libcups2 \ libdbus-1-3 \ libdrm2 \ libgbm1 \ libgtk-3-0 \ libnspr4 \ libnss3 \ libxcomposite1 \ libxdamage1 \ libxfixes3 \ libxkbcommon0 \ libxrandr2 \ xdg-utils \ && rm -rf /var/lib/apt/lists/* # Copy requirements first for better caching COPY requirements.txt ./requirements.txt # Install Python dependencies RUN pip install --no-cache-dir -r requirements.txt # Install Playwright browsers and dependencies RUN python -m playwright install chromium # Copy the app directory first to preserve structure COPY app ./app # Copy other necessary files (optional, for documentation) COPY *.md LICENSE ./ # Verify app directory structure and Python can import it RUN ls -la /app/app && python -c "import sys; sys.path.insert(0, '/app'); import app.main; print('✓ App module imported successfully')" # Set environment variables ENV PYTHONUNBUFFERED=1 ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright ENV PYTHONPATH=/app # Expose port (use PORT env var, default to 7860 for HF Spaces) EXPOSE 7860 # Health check (use PORT env var, default to 7860) HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python -c "import os; import requests; port = os.getenv('PORT', '7860'); requests.get(f'http://localhost:{port}/health')" # Run the application (PORT env var will be used by main.py) CMD PYTHONPATH=/app python -m uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-7860}