# ---- frontend --------------------------------------------------------------- FROM node:22-alpine AS ui WORKDIR /ui COPY frontend/package.json frontend/package-lock.json* ./ RUN npm ci --no-audit --no-fund 2>/dev/null || npm install --no-audit --no-fund COPY frontend/ . RUN npm run build # ---- backend ---------------------------------------------------------------- FROM python:3.12-slim ENV PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1 # curl is what the triage engine shells out to for the Infrahub API; the docker # CLI is only needed when Prometheus/OpenStack are reachable through the # CX-Tools containers rather than directly (see docs/DEPLOYMENT.md). RUN apt-get update \ && apt-get install -y --no-install-recommends curl ca-certificates docker.io \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY backend/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY backend/app ./app COPY backend/triagelib ./triagelib COPY --from=ui /ui/dist ./static RUN useradd --uid 10001 --create-home cx && mkdir -p /data && chown -R cx /data /app USER cx ENV CX_STATIC_DIR=/app/static CX_DATABASE_URL=sqlite:////data/cx-triage.db EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=40s \ CMD python -c "import urllib.request;urllib.request.urlopen('http://127.0.0.1:8080/api/health').read()" CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]