File size: 2,578 Bytes
fc353d5
9f01b99
fc353d5
484e5b0
2166ae5
 
 
 
922e083
6961111
2166ae5
fc353d5
9f01b99
fc353d5
922e083
2fd06bf
2166ae5
 
 
 
 
 
922e083
2166ae5
 
fc353d5
9f01b99
fc353d5
9f01b99
9b8ca8e
fc353d5
 
 
2166ae5
 
fc353d5
 
 
2dc4e60
9f01b99
 
b5cf10c
9f01b99
 
b5cf10c
fc353d5
4f3a209
fc353d5
 
9f01b99
 
2166ae5
fc353d5
9f01b99
fc353d5
2166ae5
 
922e083
 
fc353d5
9f01b99
 
 
 
 
 
 
 
fc353d5
4f3a209
9f01b99
2166ae5
 
 
fc353d5
9f01b99
fc353d5
9f01b99
2166ae5
fc353d5
9f01b99
fc353d5
922e083
9f01b99
2166ae5
fc353d5
9f01b99
fc353d5
8770a8c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# ===============================
# Optimized for Hugging Face Spaces
# ===============================
FROM python:3.10-slim

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PIP_NO_CACHE_DIR=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1 \
    DEBIAN_FRONTEND=noninteractive

# ===============================
# System dependencies (minimal)
# ===============================
RUN apt-get update && apt-get install -y --no-install-recommends \
    libgl1 \
    libglib2.0-0 \
    libsm6 \
    libxext6 \
    libxrender-dev \
    libgomp1 \
    ffmpeg \
    curl \
    && rm -rf /var/lib/apt/lists/*

# ===============================
# Verify FFmpeg
# ===============================
RUN ffmpeg -version 2>/dev/null || echo "⚠️ FFmpeg not found"

# ===============================
# Working directory
# ===============================
WORKDIR /app

# ===============================
# Python dependencies
# ===============================
COPY backend/requirements.txt .

# Install dependencies with retry logic
RUN pip install --no-cache-dir --upgrade pip && \
    pip install --no-cache-dir -r requirements.txt || \
    (echo "Retrying pip install..." && pip install --no-cache-dir -r requirements.txt)

# ===============================
# Pre-download MediaPipe models
# ===============================
RUN echo "📥 Downloading MediaPipe Pose models..." && \
    python3 -c "import mediapipe as mp; mp.solutions.pose.Pose(model_complexity=0).close(); print('✅ Models ready');" || \
    echo "⚠️ MediaPipe model download failed (will download on first use)"

# ===============================
# Copy application files
# ===============================
COPY backend/app /app/app
COPY frontend /app/frontend
COPY startup.sh /app/startup.sh

# ===============================
# Create directories and permissions
# ===============================
RUN mkdir -p /app/uploads /app/outputs /app/logs && \
    chmod +x /app/startup.sh && \
    chmod -R 755 /app

# ===============================
# Non-root user for security
# ===============================
RUN useradd -m -u 1000 appuser && \
    chown -R appuser:appuser /app

USER appuser

# ===============================
# Expose port
# ===============================
EXPOSE 7860

# ===============================
# Health check
# ===============================
HEALTHCHECK --interval=30s --timeout=10s --start-period=5m --retries=3 \
    CMD curl -f http://localhost:7860/health || exit 1

# ===============================
# Startup
# ===============================
CMD ["/bin/bash", "/app/startup.sh"]