File size: 2,982 Bytes
689e710
 
f19a4ca
689e710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f5ca79c
689e710
 
 
cacfd35
689e710
cacfd35
 
 
 
 
 
 
 
 
 
 
689e710
cacfd35
689e710
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# 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