# Use an official Playwright Docker image for Python, matching your Playwright version and Debian base FROM mcr.microsoft.com/playwright/python:v1.53.0-noble # Set the working directory inside the container WORKDIR /app # Install git and xvfb for Playwright environment RUN apt-get update && apt-get install -y \ git \ xvfb \ # Clean up apt caches to reduce image size && rm -rf /var/lib/apt/lists/* # Copy essential files from the repo root to /app in the container COPY requirements.txt . COPY app.py . # Copy the entire 'proxy-lite-demo-v2' directory into /app/proxy-lite-demo-v2 # This ensures src, pyproject.toml, etc., are in their original nested structure within the container. COPY proxy-lite-demo-v2 /app/proxy-lite-demo-v2/ # Copy the 'proxy-lite-work' directory if it's needed by the app # (Based on your tree, this is at the root of your repo) COPY proxy-lite-work /app/proxy-lite-work/ # --- IMPORTANT: Add proxy-lite-demo-v2/src to PYTHONPATH --- # This is crucial so that 'app.py' (now at /app) can find 'from proxy_lite import ...' ENV PYTHONPATH=/app/proxy-lite-demo-v2/src:$PYTHONPATH # --- START: Directory permission workaround --- # Create the directory proxy-lite's recorder insists on writing to # and grant full permissions. This addresses the PermissionError. # This line creates the directory *directly* under /app, which is now the correct path RUN mkdir -p /app/proxy-lite-demo-v2/local_trajectories \ && chmod -R 777 /app/proxy-lite-demo-v2/local_trajectories # --- END: Directory permission workaround --- # Upgrade pip, setuptools, and wheel for a robust Python build environment. RUN pip install --no-cache-dir --upgrade pip setuptools wheel # Install all Python dependencies from requirements.txt, which now includes the editable install # of proxy-lite from its correct nested path. RUN pip install --no-cache-dir -r requirements.txt # Set environment variables required for Playwright at runtime ENV DISPLAY=:99 ENV XDG_RUNTIME_DIR=/tmp # --- Debugging: Check Playwright version and browser installation --- RUN echo "--- Checking Playwright Version (from base image) ---" RUN python -m playwright --version RUN echo "--- Listing Playwright Browser Cache (Recursive, from base image) ---" RUN ls -alR /ms-playwright/ RUN echo "-----------------------------------" # --- End Debugging --- # Expose the port your Flask app will listen on. Hugging Face Spaces requires 7860. EXPOSE 7860 # Define the command to run your Flask application using Gunicorn for production. # This assumes app.py is at the root of /app, which is true because we copied it there. CMD exec gunicorn --bind 0.0.0.0:7860 --workers 2 --worker-class gevent app:app --timeout 300