| # Dockerfile | |
| # Use a Python base image that is compatible with Playwright's system dependencies | |
| FROM python:3.11-slim-buster | |
| # Set the working directory inside the container | |
| WORKDIR /app | |
| # Install system dependencies required by Playwright's Chromium browser | |
| # These are common dependencies for running headless Chrome/Chromium. | |
| # This list might need minor adjustments based on specific runtime errors. | |
| RUN apt-get update && apt-get install -y \ | |
| # Core libraries for graphics/rendering | |
| fonts-liberation \ | |
| libappindicator3-1 \ | |
| libasound2 \ | |
| libatk-bridge2.0-0 \ | |
| libatk1.0-0 \ | |
| libatspi2.0-0 \ | |
| libcairo2 \ | |
| libcups2 \ | |
| libdbus-1-3 \ | |
| libdrm2 \ | |
| libgdk-pixbuf2.0-0 \ | |
| libglib2.0-0 \ | |
| libgtk-3-0 \ | |
| libnspr4 \ | |
| libnss3 \ | |
| libpangocairo-1.0-0 \ | |
| libxcomposite1 \ | |
| libxdamage1 \ | |
| libxext6 \ | |
| libxfixes3 \ | |
| libxrandr2 \ | |
| libxrender1 \ | |
| libxss1 \ | |
| libxtst6 \ | |
| # Specific to Chromium/GPU (even if not using GPU, these are for display stack) | |
| libgbm-dev \ | |
| libasound2-dev \ | |
| # xvfb provides a virtual display server, often necessary for headless browsers | |
| xvfb \ | |
| # Ensure Chromium is installed on the system (Playwright uses its own, but sometimes useful) | |
| chromium \ | |
| git \ | |
| # Clean up apt caches to reduce image size | |
| && rm -rf /var/lib/apt/lists/* | |
| # Copy Python dependencies (now only common ones, proxy-lite will be handled separately) | |
| COPY requirements.txt . | |
| # --- NEW/MODIFIED INSTALLATION BLOCK --- | |
| # Upgrade pip, setuptools, and wheel for a robust build environment | |
| RUN pip install --no-cache-dir --upgrade pip setuptools wheel | |
| # Install proxy-lite in editable mode directly from its Git repository | |
| # This explicitly tells pip to clone and "install" it by linking directly, | |
| # which can sometimes bypass wheel build issues for complex projects. | |
| RUN pip install --no-cache-dir -e git+https://github.com/convergence-ai/proxy-lite.git#egg=proxy-lite | |
| # Install the rest of the dependencies from requirements.txt | |
| RUN pip install --no-cache-dir -r requirements.txt | |
| # --- END NEW/MODIFIED INSTALLATION BLOCK --- | |
| # Copy your application code into the container | |
| COPY . . | |
| # Install Playwright browser binaries within the container | |
| # This downloads Chromium into the container's Playwright-managed location. | |
| RUN playwright install chromium | |
| # Set environment variables for Playwright | |
| # PLAYWRIGHT_BROWSERS_PATH: Tells Playwright where to find the installed browsers. | |
| # DISPLAY, XDG_RUNTIME_DIR: Often needed for headless browser environments. | |
| ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright/ | |
| ENV DISPLAY=:99 | |
| ENV XDG_RUNTIME_DIR=/tmp | |
| # Expose the port your Flask app will listen on. Hugging Face Spaces expects 7860. | |
| EXPOSE 7860 | |
| # Define the command to run your Flask application using Gunicorn for production | |
| # Hugging Face Spaces will execute this command to start your web service. | |
| CMD exec gunicorn --bind 0.0.0.0:7860 --workers 2 --worker-class gevent app:app --timeout 300 |