45 lines
1 KiB
Text
45 lines
1 KiB
Text
|
|
FROM python:3.12-slim AS builder
|
||
|
|
|
||
|
|
# Prevent Python from writing .pyc files and enable unbuffered logging
|
||
|
|
ENV PYTHONDONTWRITEBYTECODE=1
|
||
|
|
ENV PYTHONUNBUFFERED=1
|
||
|
|
|
||
|
|
WORKDIR /install
|
||
|
|
|
||
|
|
# Install system dependencies required for building lxml and other Scrapy deps
|
||
|
|
RUN apt-get update && apt-get install -y \
|
||
|
|
gcc \
|
||
|
|
libxml2-dev \
|
||
|
|
libxslt-dev \
|
||
|
|
libffi-dev \
|
||
|
|
libssl-dev \
|
||
|
|
&& rm -rf /var/lib/apt/lists/*
|
||
|
|
|
||
|
|
# Install dependencies to a temporary location
|
||
|
|
COPY requirements.txt .
|
||
|
|
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
|
||
|
|
|
||
|
|
|
||
|
|
# --- Stage 2: Runtime ---
|
||
|
|
FROM python:3.12-slim
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
# Copy the installed python packages from the builder stage
|
||
|
|
COPY --from=builder /install /usr/local
|
||
|
|
|
||
|
|
# Copy the project files
|
||
|
|
COPY . .
|
||
|
|
|
||
|
|
|
||
|
|
# Security: Run as a non-privileged user
|
||
|
|
RUN useradd -m scraper
|
||
|
|
RUN mkdir -p /app/data && chown -R scraper:scraper /app/data
|
||
|
|
USER scraper
|
||
|
|
|
||
|
|
# Set the entrypoint to the scrapy command
|
||
|
|
ENTRYPOINT ["scrapy"]
|
||
|
|
|
||
|
|
# Default command if none is provided
|
||
|
|
CMD ["crawl", "articles"]
|