40 lines
1.5 KiB
Docker
40 lines
1.5 KiB
Docker
# Thermograph frontend: server-rendered content pages, the interactive tool's
|
|
# SPA shells, and every static asset. Split from the monorepo (repo-split
|
|
# Stage 7). No migrations, no DB, no pre-boot logic -- a plain shell-form CMD
|
|
# is enough (unlike backend, no separate entrypoint script needed).
|
|
FROM python:3.12-slim
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends curl \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY requirements.txt /tmp/requirements.txt
|
|
RUN pip install --no-cache-dir -r /tmp/requirements.txt
|
|
|
|
COPY . /app/
|
|
|
|
RUN useradd --system --create-home --uid 10001 thermograph \
|
|
&& chown -R thermograph:thermograph /app
|
|
|
|
USER thermograph
|
|
WORKDIR /app
|
|
|
|
ENV PORT=8080 \
|
|
WORKERS=1 \
|
|
THERMOGRAPH_BASE=/ \
|
|
PYTHONUNBUFFERED=1
|
|
|
|
EXPOSE 8080
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=3 \
|
|
CMD curl -fsS http://127.0.0.1:${PORT}/healthz || exit 1
|
|
|
|
# Worker count is env-driven (mirrors thermograph-backend's Dockerfile/
|
|
# entrypoint WORKERS pattern) so infra can raise it later with no code
|
|
# change. Default of 1 preserves today's exact behavior (no --workers was
|
|
# ever passed before). api_client's TTL cache and register()'s IndexNow-key
|
|
# handling are both in-process only -- multiple workers just each keep their
|
|
# own independent cache, and the IndexNow key is fetched fresh FROM the
|
|
# backend by every worker's own boot, so there's no cross-worker state to
|
|
# diverge -- safe to raise whenever infra wants the throughput.
|
|
CMD uvicorn app:app --host 0.0.0.0 --port ${PORT} --workers ${WORKERS:-1}
|