61 lines
1.4 KiB
Docker
61 lines
1.4 KiB
Docker
# 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"]
|