42 lines
1.5 KiB
Docker
42 lines
1.5 KiB
Docker
# Stage 1: Builder
|
|
FROM python:3.11-slim-bookworm AS builder
|
|
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvbin/uv
|
|
|
|
WORKDIR /app
|
|
ENV UV_CACHE_DIR=/app/.cache/uv
|
|
|
|
COPY pyproject.toml uv.lock ./
|
|
COPY packages/common ./packages/common
|
|
COPY apps/dashboard ./apps/dashboard
|
|
|
|
# Create a VALID dummy for the other workspace member for validation
|
|
RUN mkdir -p apps/pipeline-api/pipeline_api && \
|
|
echo '[project]\nname = "pipeline_api"\nversion = "0.1.0"\n[build-system]\nrequires = ["hatchling"]\nbuild-backend = "hatchling.build"' > apps/pipeline-api/pyproject.toml
|
|
|
|
# Install dependencies into the virtualenv
|
|
RUN /uvbin/uv sync --frozen --no-dev --package dashboard
|
|
|
|
# Stage 2: Final
|
|
FROM python:3.11-slim-bookworm
|
|
WORKDIR /app
|
|
|
|
# Copy project configuration for uv run
|
|
COPY pyproject.toml uv.lock ./
|
|
|
|
# Copy only necessary parts from builder
|
|
COPY --from=builder /app/.venv /app/.venv
|
|
COPY --from=builder /app/packages/common /app/packages/common
|
|
COPY --from=builder /app/apps/dashboard /app/apps/dashboard
|
|
COPY --from=builder /uvbin/uv /usr/local/bin/uv
|
|
|
|
# Create output directory with proper permissions
|
|
RUN mkdir -p output && chmod -R 777 output
|
|
|
|
EXPOSE 8501
|
|
|
|
ENV STREAMLIT_BROWSER_GATHER_USAGE_STATS=false
|
|
ENV STREAMLIT_USAGE_STATS_ENABLED=false
|
|
ENV PATH="/app/.venv/bin:$PATH"
|
|
|
|
# --no-sync is required as we don't have the uv cache in the final image
|
|
CMD ["uv", "run", "--frozen", "--no-sync", "--package", "dashboard", "streamlit", "run", "apps/dashboard/dashboard/app.py", "--server.port", "8501", "--server.address", "0.0.0.0"]
|