# Dockerfile FROM python:3.11-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ DEBIAN_FRONTEND=noninteractive \ TZ=America/New_York # System deps for Chromium/chromedriver + rendering & lxml RUN apt-get update && apt-get install -y --no-install-recommends \ chromium \ chromium-driver \ ca-certificates \ fonts-liberation \ fonts-dejavu \ libx11-6 \ libxcomposite1 \ libxdamage1 \ libxext6 \ libxfixes3 \ libxrandr2 \ libgbm1 \ libgtk-3-0 \ libnss3 \ libasound2 \ libatk-bridge2.0-0 \ libatk1.0-0 \ libcairo2 \ libpango-1.0-0 \ tzdata \ build-essential \ libxml2-dev \ libxslt1-dev \ && rm -rf /var/lib/apt/lists/* # Ensure Chromium is on a known path ENV CHROME_BIN=/usr/bin/chromium \ CHROMEDRIVER=/usr/bin/chromedriver WORKDIR /app # Copy deps first for better caching COPY requirements.txt . RUN pip install -r requirements.txt # Copy the app COPY run.py ./run.py COPY entrypoint.sh ./entrypoint.sh COPY src ./src COPY config ./config # Make sure data/ exists at runtime (also volume-mounted by compose) RUN mkdir -p /app/data && chmod +x /app/entrypoint.sh # Non-root user (optional) RUN useradd -ms /bin/bash appuser && chown -R appuser:appuser /app USER appuser ENTRYPOINT ["/app/entrypoint.sh"]