blob: 246ef8333e51da5de19789d353e0612221b65504 [file] [log] [blame]
Marc Kupietz86044852025-11-29 10:19:03 +01001# Multi-stage Docker build for size optimization
2FROM python:3.12-slim-bookworm AS builder
3
4# Install build dependencies
5RUN apt-get update && apt-get install -y \
6 gcc \
7 g++ \
8 && rm -rf /var/lib/apt/lists/*
9
10# Set environment variables
11ENV PIP_CACHE_DIR="/tmp/.cache/pip" \
12 PYTHONPATH="PYTHONPATH:."
13ENV VIRTUAL_ENV=/app/venv
14ENV PATH="$VIRTUAL_ENV/bin:$PATH"
15
16# Set the working directory and copy requirements
17WORKDIR /app
18COPY requirements.txt /app/requirements.txt
19
20# Install Python dependencies in virtual environment
21RUN python -m venv venv
22RUN venv/bin/pip install --upgrade pip
23RUN venv/bin/pip install -r requirements.txt
24
25# Production stage
26FROM python:3.12-slim-bookworm AS production
27
28# Install minimal runtime dependencies
29RUN apt-get update && apt-get install -y \
30 wget \
31 coreutils \
32 && rm -rf /var/lib/apt/lists/* \
33 && apt-get clean
34
35# Copy virtual environment from builder
36COPY --from=builder /app/venv /app/venv
37
38# Copy application code
39COPY lib /app/lib
40COPY systems /app/systems
41COPY my_utils /app/my_utils
42COPY docker-entrypoint.sh /docker-entrypoint.sh
43COPY download_with_progress.py /app/download_with_progress.py
Marc Kupietz68a18132025-11-29 11:17:06 +010044COPY list_spacy_models.py /app/list_spacy_models.py
Marc Kupietz86044852025-11-29 10:19:03 +010045
46# Set environment variables
47ENV VIRTUAL_ENV=/app/venv
48ENV PATH="$VIRTUAL_ENV/bin:$PATH"
49ENV PYTHONPATH="PYTHONPATH:."
50
51# spaCy processing configuration
52ENV SPACY_USE_DEPENDENCIES="True"
53ENV SPACY_USE_GERMALEMMA="True"
54ENV SPACY_PARSE_TIMEOUT="30"
55ENV SPACY_MAX_SENTENCE_LENGTH="500"
56ENV SPACY_N_PROCESS="10"
57ENV SPACY_BATCH_SIZE="2000"
58ENV SPACY_CHUNK_SIZE="20000"
59
60WORKDIR /app
61RUN mkdir -p "/app/logs" "/app/tmp" "/local/models"
62
63# Set temp directories to use app directory instead of system /tmp
64ENV TMPDIR="/app/tmp"
65ENV TEMP="/app/tmp"
66ENV TMP="/app/tmp"
67
Marc Kupietzc75ae7c2025-11-29 10:41:26 +010068# Add non-root user
69RUN groupadd -r appuser && useradd -r -g appuser appuser
70
71# Make entrypoint executable and set permissions
72RUN chmod +x /docker-entrypoint.sh && \
Marc Kupietz68a18132025-11-29 11:17:06 +010073 chmod +x /app/download_with_progress.py && \
74 chmod +x /app/list_spacy_models.py
Marc Kupietzc75ae7c2025-11-29 10:41:26 +010075
76# Change ownership of app directories to appuser
77RUN chown -R appuser:appuser /app /local /docker-entrypoint.sh
78
79# Switch to non-root user
80USER appuser
Marc Kupietz86044852025-11-29 10:19:03 +010081
82# Define the entry point
83ENTRYPOINT ["/docker-entrypoint.sh"]