Spaces:
Sleeping
Sleeping
# Use the official Playwright image as base which includes browsers and dependencies | |
FROM mcr.microsoft.com/playwright:v1.48.0-jammy | |
# Set timezone and prevent interactive prompts | |
ENV DEBIAN_FRONTEND=noninteractive | |
ENV TZ=UTC | |
# Install Python 3.11 and required packages | |
RUN apt-get update && apt-get install -y \ | |
software-properties-common \ | |
curl \ | |
tzdata \ | |
&& ln -fs /usr/share/zoneinfo/$TZ /etc/localtime \ | |
&& echo $TZ > /etc/timezone \ | |
&& dpkg-reconfigure --frontend noninteractive tzdata \ | |
&& add-apt-repository ppa:deadsnakes/ppa \ | |
&& apt-get update \ | |
&& apt-get install -y \ | |
python3.11 \ | |
python3.11-venv \ | |
python3.11-distutils \ | |
python3.11-dev \ | |
&& rm -rf /var/lib/apt/lists/* | |
# Install pip for Python 3.11 | |
RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.11 | |
# Create symlinks for python and pip commands | |
RUN ln -sf /usr/bin/python3.11 /usr/bin/python \ | |
&& ln -sf /usr/bin/python3.11 /usr/bin/python3 | |
# Set working directory | |
WORKDIR /app | |
# Copy requirements first for better caching | |
COPY requirements.txt . | |
# Install Python dependencies | |
RUN python3.11 -m pip install --no-cache-dir -r requirements.txt | |
# Install the MCP Playwright package globally | |
RUN npm install -g @playwright/mcp@latest | |
# Create a non-root user (let system assign UID automatically) | |
RUN useradd -m appuser | |
# Copy application code and set ownership | |
COPY . . | |
RUN chown -R appuser:appuser /app | |
# Make sure the non-root user can access Playwright browsers | |
RUN chmod -R 755 /ms-playwright | |
# Switch to non-root user | |
USER appuser | |
# Set environment variables to use the pre-installed browsers | |
ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright | |
ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 | |
# Expose Gradio port | |
EXPOSE 7860 | |
# Set environment variables | |
ENV GRADIO_SERVER_NAME=0.0.0.0 | |
ENV GRADIO_SERVER_PORT=7860 | |
# Run the application | |
CMD ["python", "app.py"] |