Trisha Tomy
Final Dockerfile: Clean pip editable install path and move app.py copy
e36d4b5
raw
history blame
2.87 kB
# 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