# syntax=docker/dockerfile:1 FROM node:22-bookworm-slim AS frontend-build WORKDIR /app/frontend COPY frontend/package*.json ./ RUN npm ci COPY frontend/ ./ ARG VITE_API_BASE_URL= ARG VITE_REQUIRE_ACCESS_TOKEN=false ENV VITE_API_BASE_URL=${VITE_API_BASE_URL} ENV VITE_REQUIRE_ACCESS_TOKEN=${VITE_REQUIRE_ACCESS_TOKEN} RUN npm run build FROM python:3.12-slim AS runtime ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ AIDA_DATABASE_URL=sqlite:////data/app.db \ AIDA_ENABLE_HF_MODEL=true \ AIDA_DATA_DIR=/data \ HF_HOME=/data/huggingface RUN apt-get update \ && apt-get install -y --no-install-recommends libgomp1 \ && rm -rf /var/lib/apt/lists/* WORKDIR /app/backend COPY backend/requirements*.txt ./ ARG INSTALL_ML=true RUN if [ "$INSTALL_ML" = "true" ]; then \ pip install -r requirements-ml.txt; \ else \ pip install -r requirements.txt; \ fi COPY backend/ /app/backend/ COPY --from=frontend-build /app/frontend/dist /app/frontend/dist RUN useradd --system --uid 10001 --create-home appuser \ && mkdir -p /data \ && chown -R appuser:appuser /app /data USER appuser EXPOSE 8000 HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \ CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/health', timeout=3).read()" CMD ["sh", "-c", "uvicorn app.main:app --host 0.0.0.0 --port ${PORT:-8000} --proxy-headers"]