Spaces:
Running
Running
# Use an official Python runtime as a parent image | |
FROM python:3.11-slim-buster | |
# Set the working directory inside the container | |
WORKDIR /app | |
# Install system dependencies required by Playwright, Git, and other libs | |
RUN apt-get update && apt-get install -y \ | |
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 \ | |
libgbm-dev \ | |
libasound2-dev \ | |
xvfb \ | |
git \ | |
chromium \ | |
&& rm -rf /var/lib/apt/lists/* | |
# Copy common Python dependencies first (needed for pip installs) | |
COPY requirements.txt . | |
# --- START: Core Python and proxy-lite setup --- | |
# Upgrade pip, setuptools, and wheel for a robust Python build environment. | |
RUN pip install --no-cache-dir --upgrade pip setuptools wheel | |
# Install proxy-lite in "editable" mode directly from its GitHub repository. | |
# The 'rm -rf /app/src/proxy-lite' is NOT needed here. | |
# pip -e will clone into /app/src/proxy-lite by itself. | |
# If it complains about it already existing from a *previous* build, | |
# --force-reinstall will handle it by recreating/overwriting. | |
RUN pip install --no-cache-dir --no-input --force-reinstall -e git+https://github.com/convergence-ai/proxy-lite.git#egg=proxy-lite | |
# Install the rest of the common Python dependencies from requirements.txt | |
RUN pip install --no-cache-dir -r requirements.txt | |
# --- END: Core Python and proxy-lite setup --- | |
# Copy your Flask application code (app.py) and other project files. | |
# This should happen AFTER all dependencies are installed. | |
COPY . . | |
# --- START: Directory permission workaround --- | |
# Create the directory proxy-lite's recorder insists on writing to | |
# and grant full permissions. This addresses the PermissionError. | |
# This directory is relative to where proxy-lite is installed inside the container. | |
# It should be safe to create it here as proxy-lite is already installed. | |
RUN mkdir -p /app/src/proxy-lite/local_trajectories \ | |
&& chmod -R 777 /app/src/proxy-lite/local_trajectories | |
# --- END: Directory permission workaround --- | |
# Install Playwright browser binaries within the container | |
RUN playwright install chromium | |
# Set environment variables for Playwright | |
ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright/ | |
ENV DISPLAY=:99 | |
ENV XDG_RUNTIME_DIR=/tmp | |
# 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. | |
CMD exec gunicorn --bind 0.0.0.0:7860 --workers 2 --worker-class gevent app:app --timeout 300 |