prthm11's picture
Update Dockerfile
f296af7 verified
raw
history blame
4.74 kB
# # Use an official Python runtime as a parent image
# FROM python:3.11-slim
# WORKDIR /app #add by P
# # Set environment variables for Hugging Face cache
# ENV DEBIAN_FRONTEND=noninteractive \
# PYTHONUNBUFFERED=1 \
# PYTHONDONTWRITEBYTECODE=1 \
# TRANSFORMERS_CACHE=/app/cache \
# HF_HOME=/app/cache \
# NLTK_DATA=/app/nltk_data \
# MPLCONFIGDIR=/app/.config/matplotlib
# COPY requirements.txt requirements.txt
# COPY templates/ /app/templates
# COPY utils/ /app/utils
# COPY app.py app.py
# COPY blocks/ /app/blocks/
# COPY generated_projects/ /app/generated_projects/
# COPY blocks/sprites/ /app/blocks/sprites/
# COPY blocks/Backdrops/ /app/blocks/Backdrops/
# COPY blocks/sound/ /app/blocks/sound/
# # COPY OUTPUTS/ /app/OUTPUTS
# COPY . /app/
# COPY . .
# # Install system dependencies
# RUN apt-get update && apt-get install -y \
# build-essential \
# libglib2.0-0 \
# libsm6 \
# libxext6 \
# libxrender-dev \
# tesseract-ocr \
# poppler-utils \
# libgl1 \
# # ffmpeg \
# # libopencv-dev \
# curl \
# ca-certificates \
# && apt-get clean \
# && rm -rf /var/lib/apt/lists/*
# RUN pip install --upgrade pip && pip install -r requirements.txt
# # Create necessary directories with correct permissions
# RUN mkdir -p /app/nltk_data /app/.config/matplotlib \
# && mkdir -p /app/cache /app/data /app/logs /app/outputs /app/blocks \
# && mkdir -p /app/outputs/DETECTED_IMAGE /app/outputs/SCANNED_IMAGE /app/outputs/EXTRACTED_JSON \
# && chmod -R 777 /app/cache /app/blocks /app/data /app/logs /app/outputs /app/outputs/SCANNED_IMAGE /app/outputs/EXTRACTED_JSON /app/outputs/DETECTED_IMAGE \
# && chmod -R 777 /app
# # Set Flask environment variables
# ENV FLASK_APP=app.py \
# FLASK_ENV=production
# # Expose port and start application
# EXPOSE 7860
# # CMD ["python", "app.py"]
# CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "2", "app:app"]
# #CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "", "--timeout", "360", "app:app"]
# Dockerfile: Hugging Face CPU-optimized
# Base: slim Python image for smaller footprint (CPU-only)
FROM python:3.11-slim
WORKDIR /app
# Environment: Hugging Face cache + force CPU behavior
ENV DEBIAN_FRONTEND=noninteractive \
PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
TRANSFORMERS_CACHE=/app/cache \
HF_HOME=/app/cache \
NLTK_DATA=/app/nltk_data \
MPLCONFIGDIR=/app/.config/matplotlib \
# Force CPU-only for PyTorch/transformers
CUDA_VISIBLE_DEVICES= \
PYTORCH_ENABLE_MPS=0 \
XDG_CACHE_HOME=/app/.cache \
PYTORCH_NO_CUDA=1
# Copy only what's needed (avoid duplicate COPY . /app)
COPY requirements.txt ./requirements.txt
COPY app.py ./app.py
COPY templates/ ./templates/
COPY utils/ ./utils/
COPY blocks/ ./blocks/
COPY generated_projects/ ./generated_projects/
# Install system dependencies (minimal for CPU inference + common tools)
RUN apt-get update && apt-get install -y --no-install-recommends \
fontconfig \
fonts-dejavu-core \
build-essential \
curl \
ca-certificates \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev \
libgl1 \
tesseract-ocr \
poppler-utils \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
# Python deps
RUN pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt
RUN python -m nltk.downloader -d /app/nltk_data punkt averaged_perceptron_tagger wordnet || true
# Create necessary directories with correct permissions
RUN mkdir -p /app/nltk_data /app/.config/matplotlib \
&& mkdir -p /app/cache /app/data /app/logs /app/outputs /app/blocks \
&& mkdir -p /app/outputs/DETECTED_IMAGE /app/outputs/SCANNED_IMAGE /app/outputs/EXTRACTED_JSON \
&& chown -R root:root /app \
&& chmod -R 755 /app/cache /app/data /app/logs /app/outputs
RUN mkdir -p /app/.config/matplotlib \
/app/cache /app/nltk_data /nltk_data \
/app/.cache/fontconfig /root/.cache/fontconfig \
&& chmod -R 777 /app/.config/matplotlib /app/.cache /app/cache /app/nltk_data /nltk_data /root/.cache/fontconfig
RUN fc-cache -f -v || true
# Set Flask env
ENV FLASK_APP=app.py \
FLASK_ENV=production
# Expose port
EXPOSE 7860
# Healthcheck (lightweight endpoint; change if your app uses a different path)
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD curl -f http://localhost:7860/healthz || exit 1
# Run Gunicorn with single worker (CPU-friendly) and threads; no timeout
# Single worker avoids multiple processes duplicating model memory on CPU-heavy workloads.
CMD ["gunicorn", "app:app", "-b", "0.0.0.0:7860", "-w", "1", "--threads", "4", "-k", "gthread", "--timeout", "0", "--graceful-timeout", "0"]