Some checks failed
CI / test (push) Failing after 2m35s
CI / notebooks-smoke (push) Successful in 1m34s
Infra CI / zotero (push) Successful in 16s
Infra CI / api (push) Successful in 17s
Infra CI / mc (push) Failing after 32s
Infra CI / docs (push) Successful in 18s
Infra CI / notebooks (push) Successful in 56s
Infra CI / llm (push) Successful in 19s
CI / lint (pull_request) Successful in 35s
Infra CI / bcda (push) Successful in 1m37s
CI / notebooks-smoke (pull_request) Successful in 3m6s
CI / test (pull_request) Failing after 4m52s
Infra CI / zotero (pull_request) Successful in 20s
Infra CI / docs (pull_request) Successful in 21s
Infra CI / api (pull_request) Successful in 19s
Infra CI / mc (pull_request) Failing after 39s
Infra CI / notebooks (pull_request) Successful in 1m18s
Infra CI / bcda (pull_request) Successful in 18s
Infra CI / llm (pull_request) Successful in 17s
CI / lint (push) Successful in 35s
infra/images/bcda.Dockerfile follows api.Dockerfile (uv base, patched packages, curl for the healthcheck) with `uv sync --extra cli --extra bcda`; Streamlit's server settings live in infra/images/bcda/ streamlit.toml (headless, 0.0.0.0:8501, no usage stats, no file watcher); health is /_stcore/health. The compose service `bcda` sits on the gateway network, mounts ./data read-write (exports, aco.duckdb, replica publish) and ./dev read-only (vendored upstream, crosswalk seeds, vendor script), and takes BCDA_CLIENT_ID / BCDA_CLIENT_SECRET / BCDA_BASE_URL from .env with the public sandbox credentials as the default. Routed at bcda.<domain> behind git-sso with secure-headers, tiled on the dashboard, and added to [platform].subdomains (CoreDNS hosts and the SSO cert list follow) and [images] (deploy.yml builds, scans and pushes it on src/**, pyproject.toml or image-file changes; harden/rebuild-all/infra-ci regenerated accordingly). Built locally (2.15 GB), /_stcore/health -> ok, root -> 200; brought up on the host with compose. refs #1139
37 lines
1.3 KiB
Docker
37 lines
1.3 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# BCDA manager — Streamlit app over the bcda client, store, loader,
|
|
# connector pipeline, crosswalk and vendored-upstream tooling
|
|
# (src/bcda/ui, `stack bcda ui`). Same base and install pattern as
|
|
# api.Dockerfile; the bcda extra brings streamlit, the cli bundle brings
|
|
# aco (flatten + load + pipeline) and conf.
|
|
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim
|
|
|
|
WORKDIR /app
|
|
|
|
ARG PYPI_INDEX_URL=""
|
|
|
|
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY pyproject.toml uv.lock README.md ./
|
|
COPY src/ src/
|
|
|
|
ENV UV_PYTHON_PREFERENCE=only-system \
|
|
UV_LINK_MODE=copy \
|
|
UV_PROJECT_ENVIRONMENT=.venv \
|
|
UV_INDEX_URL=${PYPI_INDEX_URL}
|
|
RUN uv sync --no-dev --extra cli --extra bcda && uv pip install -e .
|
|
|
|
COPY stack.toml ./
|
|
|
|
# Streamlit reads its server settings from here (headless, no usage
|
|
# stats, bound to all interfaces, websocket-friendly behind Traefik).
|
|
COPY infra/images/bcda/streamlit.toml /app/.streamlit/config.toml
|
|
|
|
EXPOSE 8501
|
|
|
|
# /_stcore/health answers "ok" once the Streamlit server is up.
|
|
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
|
CMD curl -sf --max-time 4 http://localhost:8501/_stcore/health || exit 1
|
|
|
|
CMD ["uv", "run", "--no-sync", "streamlit", "run", "src/bcda/ui/app.py"]
|