File size: 2,078 Bytes
e37f31f
63ed3a7
 
e37f31f
3380376
e3c6edf
3380376
e37f31f
3a54942
91ac14d
 
 
e37f31f
91ac14d
5f842e2
3e5b8be
9c4d985
e37f31f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91ac14d
e37f31f
9e51498
2fe35d2
e37f31f
9e51498
2fe35d2
e37f31f
9e51498
e37f31f
 
3a54942
87e57a0
63ed3a7
e37f31f
9e51498
63ed3a7
e37f31f
3a54942
9c4d985
 
e37f31f
9e51498
e37f31f
3e5b8be
 
 
5f842e2
3a54942
3380376
3a54942
 
63ed3a7
3a54942
63ed3a7
3a54942
e37f31f
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
# Use official UV base image with Python 3.12
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim

# Parameterize port with default value
ARG PORT=8001
ARG TRANSPORT_SERVER_URL=https://blanchon-robothub-transportserver.hf.space/api

# Set environment variables for Python and UV
ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    UV_SYSTEM_PYTHON=1 \
    UV_COMPILE_BYTECODE=1 \
    UV_CACHE_DIR=/tmp/uv-cache \
    PORT=${PORT} \
    TRANSPORT_SERVER_URL=${TRANSPORT_SERVER_URL} \
    HF_HOME=/.cache

# Install system dependencies
RUN apt-get update && apt-get install -y \
    # Build tools for compiling Python packages
    build-essential \
    gcc \
    g++ \
    # Essential system libraries
    libgl1-mesa-glx \
    libglib2.0-0 \
    libsm6 \
    libxext6 \
    libxrender-dev \
    libgomp1 \
    # FFmpeg for video processing
    ffmpeg \
    # Git for potential model downloads
    git \
    # Clean up
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Set working directory
WORKDIR /app

# Copy dependency files for better layer caching
COPY pyproject.toml uv.lock* ./

# Copy external dependencies (submodules) needed for dependency resolution
COPY external/ ./external/

# Install dependencies first (better caching)
RUN --mount=type=cache,target=/tmp/uv-cache \
    uv sync --locked --no-install-project --no-dev

# Copy the rest of the application
COPY . .

# Install the project in non-editable mode for production
RUN --mount=type=cache,target=/tmp/uv-cache \
    uv sync --locked --no-editable --no-dev

# Add virtual environment to PATH
ENV PATH="/app/.venv/bin:$PATH"

RUN mkdir -p /.cache
RUN mkdir -p /.cache/hub
RUN chmod -R 777 /.cache

# Expose port (parameterized)
EXPOSE ${PORT}

# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=3 \
    CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:${PORT}/api/health')" || exit 1

# Run the application
CMD ["sh", "-c", "python launch_simple.py --host 0.0.0.0 --port ${PORT} --transport-server-url ${TRANSPORT_SERVER_URL}"]