# ---- frontend build FROM node:22-alpine AS web WORKDIR /web COPY frontend/package*.json ./ RUN npm ci --no-audit --no-fund COPY frontend/ ./ RUN npm run build # ---- api FROM python:3.12-slim AS api ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1 WORKDIR /srv COPY backend/pyproject.toml ./ COPY backend/app ./app COPY backend/scripts ./scripts RUN pip install --no-cache-dir . && useradd -u 10001 -m app && mkdir -p /data && chown app /data COPY --from=web /web/dist /srv/frontend/dist ENV FRONTEND_DIST=/srv/frontend/dist DATA_DIR=/data PORT=8190 USER 10001 EXPOSE 8190 HEALTHCHECK CMD python -c "import urllib.request;urllib.request.urlopen('http://127.0.0.1:8190/api/v1/health')" CMD ["gunicorn", "app.main:app", "-k", "uvicorn.workers.UvicornWorker", "-w", "2", "-b", "0.0.0.0:8190", "--timeout", "320"]