# syntax=docker/dockerfile:1 FROM python:3.12-slim AS builder # Install uv COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ # Set working directory WORKDIR /app # Copy project files COPY pyproject.toml ./ # Create virtual environment and install dependencies RUN uv venv /app/.venv ENV VIRTUAL_ENV=/app/.venv ENV PATH="/app/.venv/bin:$PATH" # Install dependencies (without the project itself for better caching) RUN uv pip install --no-cache -r pyproject.toml # Copy application code COPY main.py ./ # Production image FROM python:3.12-slim AS runtime # Create non-root user for security RUN useradd --create-home --shell /bin/bash appuser WORKDIR /app # Copy virtual environment from builder COPY --from=builder /app/.venv /app/.venv COPY --from=builder /app/main.py /app/main.py # Set environment variables ENV VIRTUAL_ENV=/app/.venv ENV PATH="/app/.venv/bin:$PATH" ENV PYTHONUNBUFFERED=1 ENV PORT=8000 ENV HOST=0.0.0.0 # Database paths (mount volumes to these paths) ENV DOCS_DB_PATH=/data/docs_db ENV CODE_DB_PATH=/data/code_db # OpenTelemetry configuration ENV OTEL_ENDPOINT=https://otel.cua.ai ENV OTEL_SERVICE_NAME=cua-docs-mcp # Create data directory RUN mkdir -p /data && chown appuser:appuser /data # Switch to non-root user USER appuser # Expose port EXPOSE 8000 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1 # Run the server CMD ["python", "main.py"]