# Multi-stage Docker build for mcrentcast MCP server FROM ghcr.io/astral-sh/uv:0.5.13-python3.13-bookworm-slim AS base # Install system dependencies RUN apt-get update && apt-get install -y \ curl \ && rm -rf /var/lib/apt/lists/* # Set environment variables for uv ENV UV_COMPILE_BYTECODE=1 \ UV_LINK_MODE=copy \ PYTHONPATH="/app/src:$PYTHONPATH" \ PYTHONUNBUFFERED=1 WORKDIR /app # Create non-root user RUN useradd --create-home --shell /bin/bash app && \ chown -R app:app /app USER app # Development stage FROM base AS development ENV UV_COMPILE_BYTECODE=0 # Copy dependency files COPY --chown=app:app pyproject.toml uv.lock ./ # Install dependencies with cache mount RUN --mount=type=cache,target=/home/app/.cache/uv \ --mount=type=bind,source=uv.lock,target=uv.lock \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ uv sync --frozen --no-install-project # Copy source code COPY --chown=app:app . . # Install project in editable mode RUN --mount=type=cache,target=/home/app/.cache/uv \ uv sync --frozen # Expose MCP server port EXPOSE 3001 # Development command with hot reload CMD ["uv", "run", "uvicorn", "mcrentcast.server:app", "--host", "0.0.0.0", "--port", "3001", "--reload", "--reload-dir", "/app/src"] # Production stage FROM base AS production # Copy dependency files COPY --chown=app:app pyproject.toml uv.lock ./ # Install dependencies (frozen, no dev deps) RUN --mount=type=cache,target=/home/app/.cache/uv \ --mount=type=bind,source=uv.lock,target=uv.lock \ --mount=type=bind,source=pyproject.toml,target=pyproject.toml \ uv sync --frozen --no-dev --no-editable --no-install-project # Copy source code COPY --chown=app:app src/ ./src/ COPY --chown=app:app docs/ ./docs/ # Install project RUN --mount=type=cache,target=/home/app/.cache/uv \ uv sync --frozen --no-dev --no-editable # Create data directory RUN mkdir -p /app/data && chown app:app /app/data # Health check HEALTHCHECK --interval=30s --timeout=10s --retries=3 \ CMD curl -f http://localhost:3001/health || exit 1 # Expose MCP server port EXPOSE 3001 # Production command CMD ["uv", "run", "uvicorn", "mcrentcast.server:app", "--host", "0.0.0.0", "--port", "3001", "--workers", "1"]