FROM python:3.10-slim # Create a non-root user RUN useradd -m -u 1000 user USER user ENV PATH="/home/user/.local/bin:$PATH" # Set working directory WORKDIR /app # Install system dependencies USER root RUN apt-get update && apt-get install -y \ tesseract-ocr \ tesseract-ocr-eng \ && rm -rf /var/lib/apt/lists/* # Create necessary directories with proper permissions RUN mkdir -p /app/logs \ && mkdir -p /app/cache \ && mkdir -p /app/uploads \ && mkdir -p /app/model_cache \ && mkdir -p /app/temp \ && chown -R user:user /app # Switch back to non-root user USER user # Upgrade pip RUN pip install --upgrade pip # Copy requirements first to leverage Docker cache COPY --chown=user:user requirements.txt . # Install Python dependencies RUN pip install --no-cache-dir --user -r requirements.txt # Download spaCy model RUN python -m spacy download en_core_web_md # Copy application code COPY --chown=user:user . . # Set environment variables ENV PYTHONUNBUFFERED=1 ENV FLASK_APP=app.py ENV FLASK_ENV=production ENV TRANSFORMERS_CACHE=/app/cache ENV HF_HOME=/app/cache ENV XDG_CACHE_HOME=/app/cache ENV LOG_DIR=/app/logs # Expose port EXPOSE 7860 # Run the application CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "1", "--threads", "8", "--timeout", "0", "app:app"]