Files
crop-chem-docs/Dockerfile
T
justin c5ed5560fc
Image rebuild (skip scrape) / build (push) Failing after 1h41m9s
deploy: sensible Dockerfile defaults + simplified compose snippet
Dockerfile now sets OLLAMA_URL=http://ollama:11434 and
RERANK_URL=http://llama-rerank:8080 as image defaults, assuming the
MCP container shares a Docker network with services named `ollama`
and `llama-rerank` (typical compose pattern). Drawbar's stack
already runs both — no cross-host IPs to maintain, no off-stack
GPU dependencies. Stays inside the trashpanda compose.

deploy/drawbar-compose-snippet.md simplified: no environment
overrides needed for the common case. Override block shown only
for stacks with non-default service names. Pull tag updated to
:corpus-2026.05.24.

Per the new architecture call:
- MCP doesn't reach out to cross-host Ollama instances (192.168.0.2,
  192.168.0.125 etc.) at serve time — only at index-build time in CI.
- All serve-time dependencies are in the same Docker network as
  the consumer apps.

Code push touches Dockerfile → image-only.yml will rebuild + push.
Future-me note: the image-only.yml needs Ollama reachable from the
Gitea Actions runner for the reindex step; that still uses the LAN
endpoints (workflow env), which is correct since indexing is CI-side
not serve-side.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 13:09:38 -04:00

60 lines
2.0 KiB
Docker

# crop-chem-docs MCP server — production image.
#
# Structure: copy code first, then the regenerable indexes last so a
# code-only change doesn't invalidate the corpus COPY layer.
#
# The container runs the MCP server via streamable-http on PORT 8000.
# Override via MCP_HOST / MCP_PORT env if you front it with a different
# reverse-proxy setup.
#
# Image is self-contained — corpus, Chroma collection, and BM25 db are
# all baked in. Drawbar's docker-compose pulls the image and runs it;
# no host volume mounts required for serve.
#
# RERANK_URL is set at compose time (points at the llama.cpp sidecar
# on trashpanda's Tesla P4). OLLAMA_URL is set at compose time too
# (the embed-pool of Ollama instances). Defaults are commented inline.
FROM python:3.12-slim
WORKDIR /app
# Install Python deps first for cacheability.
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt
# Code.
COPY scrape /app/scrape
COPY rag /app/rag
COPY docs_mcp /app/docs_mcp
# Source catalog. Lists the corpus sources (Bayer + EPA PPLS today).
COPY sources.json /app/
# Regenerable indexes. CI builds these from corpus/ in the same job
# that builds the image. Listed last so code changes don't invalidate
# the COPY layer cache for these (much larger) directories.
#
# bm25/ is only consulted when HYBRID_SEARCH=true (the server falls
# back to dense-only if it's missing).
COPY corpus /app/corpus
COPY chroma /app/chroma
COPY bm25 /app/bm25
ENV PYTHONUNBUFFERED=1 \
PRODUCT_NAME=crop_chem \
MCP_TRANSPORT=streamable-http \
MCP_HOST=0.0.0.0 \
MCP_PORT=8000 \
HYBRID_SEARCH=true \
OLLAMA_URL=http://ollama:11434 \
RERANK_URL=http://llama-rerank:8080
# Defaults above assume the MCP container shares a Docker network
# with services named `ollama` and `llama-rerank`. Override either
# in the compose `environment:` block if your stack uses different
# service names or if you want to point at off-stack hosts.
EXPOSE 8000
ENTRYPOINT ["python", "-m", "docs_mcp.server"]