FROM python:3.11-slim # ── Metadata ────────────────────────────────────────────────────────────────── LABEL maintainer="medtriage-env" LABEL org.opencontainers.image.description="MedTriage OpenEnv — Emergency Department Triage & Clinical Decision Support" # ── System dependencies ─────────────────────────────────────────────────────── RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ && rm -rf /var/lib/apt/lists/* # ── Non-root user (required for HF Spaces) ──────────────────────────────────── RUN useradd -m -u 1000 appuser # ── Working directory ───────────────────────────────────────────────────────── WORKDIR /app # ── Install dependencies first (better layer caching) ──────────────────────── COPY medtriage_env/server/requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -r requirements.txt # ── Copy application code ───────────────────────────────────────────────────── COPY medtriage_env/ /app/medtriage_env/ COPY pyproject.toml /app/pyproject.toml # ── Install the package ──────────────────────────────────────────────────────── RUN pip install --no-cache-dir -e . # ── Set ownership ───────────────────────────────────────────────────────────── RUN chown -R appuser:appuser /app # ── Switch to non-root ──────────────────────────────────────────────────────── USER appuser # ── HF Spaces uses port 7860 ────────────────────────────────────────────────── EXPOSE 7860 # ── Environment ─────────────────────────────────────────────────────────────── ENV PYTHONUNBUFFERED=1 ENV PYTHONDONTWRITEBYTECODE=1 # ── Health check ────────────────────────────────────────────────────────────── HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \ CMD curl -f http://localhost:7860/health || exit 1 # ── Start server ────────────────────────────────────────────────────────────── CMD ["uvicorn", "medtriage_env.server.app:app", "--host", "0.0.0.0", "--port", "7860", "--workers", "1"]