# Use an official Python runtime as a parent image FROM python:3.10-slim # Set the working directory in the container WORKDIR /app # Copy the requirements file into the container at /app COPY requirements.txt . # Install any needed system dependencies (if any - bs4, requests usually don't need much) # RUN apt-get update && apt-get install -y --no-install-recommends some-package && rm -rf /var/lib/apt/lists/* # For this bot, we likely don't need extra apt packages currently. # Install Python dependencies # Using --no-cache-dir reduces image size slightly RUN pip install --no-cache-dir -r requirements.txt # Install crawl4ai dependencies (Playwright browsers) # Needs to run *after* pip install and requires system dependencies installed by playwright itself # Using --with-deps installs necessary browser dependencies like fonts, libs etc. RUN crawl4ai-setup RUN python -m playwright install --with-deps chromium # Copy the rest of the application code into the container at /app COPY . . # Make port defined by PORT env var (default 7860) available # Hugging Face Spaces typically expect apps to run on port 7860 EXPOSE ${PORT:-7860} # Define environment variable to ensure Python output is sent straight to logs ENV PYTHONUNBUFFERED=1 # Command to run the application using Gunicorn # It will run the Starlette 'app' object found in the 'main' module (main.py) # Listen on all interfaces (0.0.0.0) on the port specified by HF/env var (usually 7860) # Using environment variable expansion for port binding CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "--bind", "0.0.0.0:${PORT:-7860}", "main:app"]