Spaces:
Running
Running
# Dockerfile | |
# Use a Python base image that is compatible with Playwright's system dependencies | |
FROM python:3.9-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 and install them | |
# This layer is cached efficiently if requirements.txt doesn't change | |
COPY requirements.txt . | |
RUN pip install --no-cache-dir -r requirements.txt | |
# 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 |