FROM python:3.11-slim AS base
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1 \
PIP_NO_CACHE_DIR=1 \
PYTHONPATH="/app"
WORKDIR /app
# Install system dependencies for development
RUN apt-get update && apt-get install -y \
build-essential \
curl \
git \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies first for better caching
# Copy only dependency files to leverage Docker cache
COPY pyproject.toml README.md ./
# Create virtual environment and install dependencies
RUN python -m pip install --upgrade pip && \
python -m pip install ".[dev]"
# Copy source code after dependencies
COPY src ./src
COPY examples ./examples
# Install the application in editable mode for development
ARG INSTALL_EDITABLE=false
RUN if [ "$INSTALL_EDITABLE" = "true" ]; then \
python -m pip install -e ".[dev]"; \
fi
FROM python:3.11-slim AS production
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
CKAN_MCP_MODE=http \
CKAN_MCP_HOST=0.0.0.0 \
CKAN_MCP_PORT=8000
WORKDIR /app
COPY --from=base /usr/local /usr/local
COPY ./src ./src
COPY README.md ./README.md
EXPOSE 8000
CMD ["uvicorn", "ckan_mcp.main:create_http_app", "--host", "0.0.0.0", "--port", "8000"]
FROM base AS development
ENV CKAN_MCP_MODE=http \
CKAN_MCP_HOST=0.0.0.0 \
CKAN_MCP_PORT=8000
# Expose port for development
EXPOSE 8000
# Health check for development
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8000/mcp || exit 1
# Default command with extensive reload options for fast refresh
CMD ["uvicorn", "ckan_mcp.main:create_http_app", \
"--host", "0.0.0.0", \
"--port", "8000", \
"--reload", \
"--reload-dir", "/app/src", \
"--log-level", "debug"]