# Gnexus Synapse — образ API/воркера.
# Многоэтапная сборка: frontend -> статики, python -> рантайм.
# SPA раздаётся тем же контейнером FastAPI (отдельного фронтенд-контейнера нет).
# --- Этап 1: сборка SPA (Vue 3 + gnexus-ui-kit) ---
FROM node:22-alpine AS frontend-build
RUN apk add --no-cache git
WORKDIR /frontend
COPY frontend/package.json frontend/package-lock.json* frontend/.npmrc ./
RUN npm install
COPY frontend/ ./
RUN npm run build
# --- Этап 2: рантайм ---
FROM python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1
# git нужен для pip-зависимостей из git.gnexus.space (gnexus-gauth)
RUN apt-get update \
&& apt-get install -y --no-install-recommends git curl \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /srv/synapse
COPY requirements.txt ./
RUN pip install -r requirements.txt
COPY alembic.ini ./
COPY alembic ./alembic
COPY app ./app
COPY docker/entrypoint.sh /entrypoint.sh
COPY --from=frontend-build /frontend/dist ./spa_static
RUN chmod +x /entrypoint.sh
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD curl -fsS http://localhost:8000/api/healthz || exit 1
ENTRYPOINT ["/entrypoint.sh"]
CMD ["api"]