| FROM python:3.12-slim-trixie | |
| LABEL io.modelcontextprotocol.server.name="io.github.D4Vinci/Scrapling" | |
| COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ | |
| # Set environment variables | |
| ENV DEBIAN_FRONTEND=noninteractive \ | |
| PYTHONUNBUFFERED=1 \ | |
| PYTHONDONTWRITEBYTECODE=1 | |
| WORKDIR /app | |
| # Copy dependency file first for better layer caching | |
| COPY pyproject.toml ./ | |
| # Install dependencies only | |
| RUN --mount=type=cache,target=/root/.cache/uv \ | |
| uv sync --no-install-project --all-extras --compile-bytecode | |
| # Copy source code | |
| COPY . . | |
| # Install browsers and project in one optimized layer | |
| RUN --mount=type=cache,target=/root/.cache/uv \ | |
| --mount=type=cache,target=/var/cache/apt \ | |
| --mount=type=cache,target=/var/lib/apt \ | |
| apt-get update && \ | |
| uv run playwright install-deps chromium && \ | |
| uv run playwright install chromium && \ | |
| uv sync --all-extras --compile-bytecode && \ | |
| apt-get clean && \ | |
| rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* | |
| # Expose port for HF Spaces | |
| EXPOSE 7860 | |
| # Set entrypoint to run scrapling | |
| ENTRYPOINT ["uv", "run", "scrapling"] | |
| # Run MCP server | |
| CMD ["mcp", "--http", "--host", "0.0.0.0", "--port", "7860"] |