FROM node:20-alpine AS frontend WORKDIR /app/dashboard/frontend COPY dashboard/frontend/package.json ./ RUN npm install COPY dashboard/frontend/ ./ RUN npm run build FROM python:3.11-slim WORKDIR /app RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ libpq-dev \ && rm -rf /var/lib/apt/lists/* COPY pyproject.toml README.md ./ COPY src/ ./src/ COPY migrations/ ./migrations/ COPY alembic.ini ./ COPY dashboard/ ./dashboard/ RUN pip install --no-cache-dir ".[ai]" COPY --from=frontend /app/dashboard/frontend/dist /app/dashboard/frontend/dist RUN useradd -m -u 1000 guardden && chown -R guardden:guardden /app USER guardden CMD ["uvicorn", "guardden.dashboard.main:app", "--host", "0.0.0.0", "--port", "8000"]