2025-12-24 22:19:43 +01:00
|
|
|
# =============================================================================
|
|
|
|
|
# Orchestrator - Docker Hardened Image (DHI)
|
|
|
|
|
# =============================================================================
|
|
|
|
|
# API Server + Agent Spawner using DHI Python 3.13
|
|
|
|
|
# =============================================================================
|
|
|
|
|
|
|
|
|
|
FROM dhi.io/python:3.13-debian13-dev
|
2025-12-14 22:05:34 +01:00
|
|
|
|
|
|
|
|
# Install dependencies + Docker CLI
|
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
|
|
|
curl \
|
|
|
|
|
ca-certificates \
|
|
|
|
|
git \
|
|
|
|
|
gnupg \
|
|
|
|
|
lsb-release \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
# Install Docker CLI (for spawning agent containers)
|
2025-12-24 22:19:43 +01:00
|
|
|
# Note: Using 'trixie' for Debian 13, fallback to bookworm if not available
|
2025-12-14 22:05:34 +01:00
|
|
|
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg \
|
2025-12-24 22:19:43 +01:00
|
|
|
&& DEBIAN_CODENAME=$(lsb_release -cs) \
|
|
|
|
|
&& if [ "$DEBIAN_CODENAME" = "trixie" ]; then DEBIAN_CODENAME="bookworm"; fi \
|
|
|
|
|
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian ${DEBIAN_CODENAME} stable" > /etc/apt/sources.list.d/docker.list \
|
2025-12-14 22:05:34 +01:00
|
|
|
&& apt-get update \
|
|
|
|
|
&& apt-get install -y docker-ce-cli \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
# Install Node.js 22 (for building agent image)
|
|
|
|
|
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
|
|
|
|
|
&& apt-get install -y nodejs \
|
|
|
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
|
|
|
|
|
|
# Install uv for Python package management
|
|
|
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
|
|
|
|
|
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
|
|
# Copy project files
|
|
|
|
|
COPY roboco /app/roboco
|
|
|
|
|
COPY agents /app/agents
|
|
|
|
|
COPY docker /app/docker
|
|
|
|
|
COPY pyproject.toml uv.lock alembic.ini README.md /app/
|
|
|
|
|
COPY alembic /app/alembic
|
|
|
|
|
|
|
|
|
|
# Install Python dependencies
|
2025-12-23 04:39:46 +01:00
|
|
|
# Increase timeout for large NVIDIA packages (674MB cudnn, 858MB torch)
|
|
|
|
|
ENV UV_HTTP_TIMEOUT=300
|
|
|
|
|
ENV UV_CONCURRENT_DOWNLOADS=4
|
2025-12-14 22:05:34 +01:00
|
|
|
RUN uv python install 3.13 && uv sync --frozen --python 3.13
|
|
|
|
|
|
|
|
|
|
# Expose API port
|
|
|
|
|
EXPOSE 8000
|
|
|
|
|
|
2025-12-15 00:26:28 +01:00
|
|
|
# Start orchestrator WITHOUT spawning agents - the smart dispatcher will spawn
|
|
|
|
|
# agents on-demand when work is available (avoiding wasteful spawns).
|
|
|
|
|
# To manually spawn agents at startup, override: docker run ... roboco-orchestrator --spawn main-pm
|
2025-12-14 22:05:34 +01:00
|
|
|
ENTRYPOINT ["uv", "run", "python", "-m", "roboco.cli"]
|
2025-12-15 00:26:28 +01:00
|
|
|
CMD []
|