andevs commited on
Commit
d471aeb
·
verified ·
1 Parent(s): 0cc6992

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +41 -23
Dockerfile CHANGED
@@ -1,3 +1,4 @@
 
1
  FROM python:3.10-slim
2
 
3
  # Install system dependencies
@@ -6,57 +7,74 @@ RUN apt-get update && apt-get install -y \
6
  curl \
7
  libgl1-mesa-glx \
8
  libglib2.0-0 \
9
- ffmpeg \
10
  libsm6 \
11
  libxext6 \
12
  libxrender-dev \
 
 
13
  && rm -rf /var/lib/apt/lists/*
14
 
15
  # Set environment variables
16
  ENV U2NET_HOME=/tmp/u2net_models
17
  ENV OMP_NUM_THREADS=2
18
  ENV PYTHONUNBUFFERED=1
 
19
 
 
20
  WORKDIR /app
21
 
22
- # Copy requirements
23
  COPY requirements.txt .
24
 
25
- # Install Python packages
26
  RUN pip install --no-cache-dir --upgrade pip && \
27
  pip install --no-cache-dir -r requirements.txt
28
 
29
- # Create cache directory
30
- RUN mkdir -p /tmp/u2net_models
31
 
32
- # Pre-download essential models
33
  RUN python -c "
34
  import sys
35
- sys.stderr = sys.stdout
36
- try:
37
- from rembg import new_session
38
- print('Pre-downloading essential models...')
39
- essential_models = ['u2netp', 'silueta', 'u2net']
40
- for model in essential_models:
41
- try:
42
- print(f'Downloading {model}...')
43
- session = new_session(model)
44
- print(f'✅ {model} downloaded')
45
- except Exception as e:
46
- print(f'⚠️ {model}: {str(e)[:100]}')
47
- except Exception as e:
48
- print(f'Model pre-download error: {e}')
49
- "
 
 
 
 
 
 
 
 
 
 
50
 
51
  # Copy application
52
  COPY app.py .
53
 
54
- # Create non-root user
55
  RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
56
  USER appuser
57
 
58
- # Expose port
59
  EXPOSE 7860
60
 
 
 
 
 
61
  # Run the application
62
  CMD ["python", "app.py"]
 
1
+ # Use Python 3.10 for stability
2
  FROM python:3.10-slim
3
 
4
  # Install system dependencies
 
7
  curl \
8
  libgl1-mesa-glx \
9
  libglib2.0-0 \
 
10
  libsm6 \
11
  libxext6 \
12
  libxrender-dev \
13
+ ffmpeg \
14
+ libgomp1 \
15
  && rm -rf /var/lib/apt/lists/*
16
 
17
  # Set environment variables
18
  ENV U2NET_HOME=/tmp/u2net_models
19
  ENV OMP_NUM_THREADS=2
20
  ENV PYTHONUNBUFFERED=1
21
+ ENV PYTHONDONTWRITEBYTECODE=1
22
 
23
+ # Create app directory
24
  WORKDIR /app
25
 
26
+ # Copy requirements first for better caching
27
  COPY requirements.txt .
28
 
29
+ # Install Python dependencies
30
  RUN pip install --no-cache-dir --upgrade pip && \
31
  pip install --no-cache-dir -r requirements.txt
32
 
33
+ # Create cache directory for models
34
+ RUN mkdir -p /tmp/u2net_models && chmod 777 /tmp/u2net_models
35
 
36
+ # Pre-download essential models (non-blocking)
37
  RUN python -c "
38
  import sys
39
+ import subprocess
40
+ import threading
41
+
42
+ def download_model(model):
43
+ try:
44
+ print(f'Pre-downloading {model}...')
45
+ import rembg
46
+ session = rembg.new_session(model)
47
+ print(f'✅ {model} downloaded successfully')
48
+ except Exception as e:
49
+ print(f'⚠️ {model}: {str(e)[:100]}')
50
+
51
+ models = ['u2netp', 'silueta', 'u2net']
52
+ threads = []
53
+
54
+ for model in models:
55
+ thread = threading.Thread(target=download_model, args=(model,))
56
+ thread.start()
57
+ threads.append(thread)
58
+
59
+ for thread in threads:
60
+ thread.join(timeout=120)
61
+
62
+ print('Pre-download complete')
63
+ " || echo "Model pre-download may continue at runtime"
64
 
65
  # Copy application
66
  COPY app.py .
67
 
68
+ # Create non-root user for security
69
  RUN useradd -m -u 1000 appuser && chown -R appuser:appuser /app
70
  USER appuser
71
 
72
+ # Expose port (Hugging Face uses 7860)
73
  EXPOSE 7860
74
 
75
+ # Health check
76
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
77
+ CMD curl -f http://localhost:7860/api/health || exit 1
78
+
79
  # Run the application
80
  CMD ["python", "app.py"]