strompreis/docker/dashboard.Dockerfile

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"]