From 013d1f88a2d92d3ed49ec2334bdfb8fd5ae9f293 Mon Sep 17 00:00:00 2001 From: Bill Date: Mon, 29 Dec 2025 20:06:38 -0500 Subject: [PATCH] feat: add multi-stage Dockerfile --- Dockerfile | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..48374c5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +# Stage 1: Builder +FROM python:3.14-slim AS builder + +# Install uv +COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv + +WORKDIR /app + +# Copy dependency files +COPY pyproject.toml uv.lock ./ + +# Install dependencies +RUN uv sync --frozen --no-dev --no-install-project + +# Copy source code +COPY src ./src + +# Install the project +RUN uv sync --frozen --no-dev + + +# Stage 2: Runtime +FROM python:3.14-slim + +# Create non-root user +RUN useradd --create-home --shell /bin/bash appuser + +WORKDIR /app + +# Copy virtual environment from builder +COPY --from=builder /app/.venv /app/.venv + +# Copy source code +COPY --from=builder /app/src ./src + +# Set environment +ENV PATH="/app/.venv/bin:$PATH" +ENV PORT=3000 + +# Switch to non-root user +USER appuser + +EXPOSE 3000 + +CMD ["python", "-m", "grist_mcp.main"]