prthm11 commited on
Commit
baf138d
·
verified ·
1 Parent(s): 67018d6

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +100 -35
Dockerfile CHANGED
@@ -1,62 +1,127 @@
1
- # Use an official Python runtime as a parent image
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  FROM python:3.11-slim
3
 
4
- WORKDIR /app #add by P
5
 
6
- # Set environment variables for Hugging Face cache
7
  ENV DEBIAN_FRONTEND=noninteractive \
8
  PYTHONUNBUFFERED=1 \
9
  PYTHONDONTWRITEBYTECODE=1 \
10
  TRANSFORMERS_CACHE=/app/cache \
11
  HF_HOME=/app/cache \
12
  NLTK_DATA=/app/nltk_data \
13
- MPLCONFIGDIR=/app/.config/matplotlib
14
-
15
- COPY requirements.txt requirements.txt
16
- COPY templates/ /app/templates
17
- COPY utils/ /app/utils
18
- COPY app.py app.py
19
- COPY blocks/ /app/blocks/
20
- COPY generated_projects/ /app/generated_projects/
21
- COPY blocks/sprites/ /app/blocks/sprites/
22
- COPY blocks/Backdrops/ /app/blocks/Backdrops/
23
- COPY blocks/sound/ /app/blocks/sound/
24
- # COPY OUTPUTS/ /app/OUTPUTS
25
- COPY . /app/
26
- COPY . .
27
-
28
- # Install system dependencies
29
- RUN apt-get update && apt-get install -y \
30
  build-essential \
 
 
31
  libglib2.0-0 \
32
  libsm6 \
33
  libxext6 \
34
  libxrender-dev \
 
35
  tesseract-ocr \
36
  poppler-utils \
37
- libgl1 \
38
- # ffmpeg \
39
- # libopencv-dev \
40
- curl \
41
- ca-certificates \
42
- && apt-get clean \
43
- && rm -rf /var/lib/apt/lists/*
44
 
45
- RUN pip install --upgrade pip && pip install -r requirements.txt
 
46
 
47
  # Create necessary directories with correct permissions
48
  RUN mkdir -p /app/nltk_data /app/.config/matplotlib \
49
  && mkdir -p /app/cache /app/data /app/logs /app/outputs /app/blocks \
50
  && mkdir -p /app/outputs/DETECTED_IMAGE /app/outputs/SCANNED_IMAGE /app/outputs/EXTRACTED_JSON \
51
- && 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 \
52
- && chmod -R 777 /app
53
 
54
- # Set Flask environment variables
55
  ENV FLASK_APP=app.py \
56
  FLASK_ENV=production
57
 
58
- # Expose port and start application
59
  EXPOSE 7860
60
- # CMD ["python", "app.py"]
61
- CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "2", "app:app"]
62
- #CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "", "--timeout", "360", "app:app"]
 
 
 
 
 
 
1
+ # # Use an official Python runtime as a parent image
2
+ # FROM python:3.11-slim
3
+
4
+ # WORKDIR /app #add by P
5
+
6
+ # # Set environment variables for Hugging Face cache
7
+ # ENV DEBIAN_FRONTEND=noninteractive \
8
+ # PYTHONUNBUFFERED=1 \
9
+ # PYTHONDONTWRITEBYTECODE=1 \
10
+ # TRANSFORMERS_CACHE=/app/cache \
11
+ # HF_HOME=/app/cache \
12
+ # NLTK_DATA=/app/nltk_data \
13
+ # MPLCONFIGDIR=/app/.config/matplotlib
14
+
15
+ # COPY requirements.txt requirements.txt
16
+ # COPY templates/ /app/templates
17
+ # COPY utils/ /app/utils
18
+ # COPY app.py app.py
19
+ # COPY blocks/ /app/blocks/
20
+ # COPY generated_projects/ /app/generated_projects/
21
+ # COPY blocks/sprites/ /app/blocks/sprites/
22
+ # COPY blocks/Backdrops/ /app/blocks/Backdrops/
23
+ # COPY blocks/sound/ /app/blocks/sound/
24
+ # # COPY OUTPUTS/ /app/OUTPUTS
25
+ # COPY . /app/
26
+ # COPY . .
27
+
28
+ # # Install system dependencies
29
+ # RUN apt-get update && apt-get install -y \
30
+ # build-essential \
31
+ # libglib2.0-0 \
32
+ # libsm6 \
33
+ # libxext6 \
34
+ # libxrender-dev \
35
+ # tesseract-ocr \
36
+ # poppler-utils \
37
+ # libgl1 \
38
+ # # ffmpeg \
39
+ # # libopencv-dev \
40
+ # curl \
41
+ # ca-certificates \
42
+ # && apt-get clean \
43
+ # && rm -rf /var/lib/apt/lists/*
44
+
45
+ # RUN pip install --upgrade pip && pip install -r requirements.txt
46
+
47
+ # # Create necessary directories with correct permissions
48
+ # RUN mkdir -p /app/nltk_data /app/.config/matplotlib \
49
+ # && mkdir -p /app/cache /app/data /app/logs /app/outputs /app/blocks \
50
+ # && mkdir -p /app/outputs/DETECTED_IMAGE /app/outputs/SCANNED_IMAGE /app/outputs/EXTRACTED_JSON \
51
+ # && 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 \
52
+ # && chmod -R 777 /app
53
+
54
+ # # Set Flask environment variables
55
+ # ENV FLASK_APP=app.py \
56
+ # FLASK_ENV=production
57
+
58
+ # # Expose port and start application
59
+ # EXPOSE 7860
60
+ # # CMD ["python", "app.py"]
61
+ # CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "2", "app:app"]
62
+ # #CMD ["gunicorn", "--bind", "0.0.0.0:7860", "--workers", "", "--timeout", "360", "app:app"]
63
+ # Dockerfile: Hugging Face CPU-optimized
64
+ # Base: slim Python image for smaller footprint (CPU-only)
65
  FROM python:3.11-slim
66
 
67
+ WORKDIR /app
68
 
69
+ # Environment: Hugging Face cache + force CPU behavior
70
  ENV DEBIAN_FRONTEND=noninteractive \
71
  PYTHONUNBUFFERED=1 \
72
  PYTHONDONTWRITEBYTECODE=1 \
73
  TRANSFORMERS_CACHE=/app/cache \
74
  HF_HOME=/app/cache \
75
  NLTK_DATA=/app/nltk_data \
76
+ MPLCONFIGDIR=/app/.config/matplotlib \
77
+ # Force CPU-only for PyTorch/transformers
78
+ CUDA_VISIBLE_DEVICES= \
79
+ PYTORCH_ENABLE_MPS=0 \
80
+ PYTORCH_NO_CUDA=1
81
+
82
+ # Copy only what's needed (avoid duplicate COPY . /app)
83
+ COPY requirements.txt ./requirements.txt
84
+ COPY app.py ./app.py
85
+ COPY templates/ ./templates/
86
+ COPY utils/ ./utils/
87
+ COPY blocks/ ./blocks/
88
+ COPY generated_projects/ ./generated_projects/
89
+
90
+ # Install system dependencies (minimal for CPU inference + common tools)
91
+ RUN apt-get update && apt-get install -y --no-install-recommends \
 
92
  build-essential \
93
+ curl \
94
+ ca-certificates \
95
  libglib2.0-0 \
96
  libsm6 \
97
  libxext6 \
98
  libxrender-dev \
99
+ libgl1 \
100
  tesseract-ocr \
101
  poppler-utils \
102
+ && apt-get clean && rm -rf /var/lib/apt/lists/*
 
 
 
 
 
 
103
 
104
+ # Python deps
105
+ RUN pip install --upgrade pip && pip install --no-cache-dir -r requirements.txt
106
 
107
  # Create necessary directories with correct permissions
108
  RUN mkdir -p /app/nltk_data /app/.config/matplotlib \
109
  && mkdir -p /app/cache /app/data /app/logs /app/outputs /app/blocks \
110
  && mkdir -p /app/outputs/DETECTED_IMAGE /app/outputs/SCANNED_IMAGE /app/outputs/EXTRACTED_JSON \
111
+ && chown -R root:root /app \
112
+ && chmod -R 755 /app/cache /app/data /app/logs /app/outputs
113
 
114
+ # Set Flask env
115
  ENV FLASK_APP=app.py \
116
  FLASK_ENV=production
117
 
118
+ # Expose port
119
  EXPOSE 7860
120
+
121
+ # Healthcheck (lightweight endpoint; change if your app uses a different path)
122
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
123
+ CMD curl -f http://localhost:7860/healthz || exit 1
124
+
125
+ # Run Gunicorn with single worker (CPU-friendly) and threads; no timeout
126
+ # Single worker avoids multiple processes duplicating model memory on CPU-heavy workloads.
127
+ CMD ["gunicorn", "app:app", "-b", "0.0.0.0:7860", "-w", "1", "--threads", "4", "-k", "gthread", "--timeout", "0", "--graceful-timeout", "0"]