# syntax=docker/dockerfile:1 FROM node:20-alpine AS frontend WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY vite.config.js index.html ./ COPY src ./src COPY public ./public COPY workflows ./workflows RUN npm run build && \ printf '{"backendUrl":"","llmProvider":"deepinfra","demo":false}\n' > /app/dist/config.json FROM python:3.12-slim AS runtime ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PORT=7860 \ LLM_PROVIDER=deepinfra \ HOME=/home/app RUN useradd -m -u 1000 -d /home/app app WORKDIR /app COPY backend/requirements.txt ./backend/requirements.txt RUN pip install --no-cache-dir -r backend/requirements.txt COPY backend ./backend COPY public ./public COPY scenarios ./scenarios COPY workflows ./workflows COPY --from=frontend /app/dist ./dist RUN mkdir -p /app/knowledge_contexts /app/test_logs /app/transcript_logs && \ chown -R app:app /app USER app EXPOSE 7860 WORKDIR /app/backend CMD ["sh", "-c", "uvicorn main:app --host 0.0.0.0 --port ${PORT:-7860}"]