# syntax=docker/dockerfile:1 # --- Étape 1 : build du frontend Vue ----------------------------------------- # Le backend FastAPI sert lui-même le SPA (frontend/dist) : un seul conteneur # suffit, pas de nginx séparé. On builde donc le frontend ici puis on copie le # résultat dans l'image Python finale. FROM node:22-alpine AS frontend WORKDIR /frontend COPY frontend/package.json frontend/package-lock.json* ./ RUN npm install COPY frontend/ ./ RUN npm run build # --- Étape 2 : image applicative Python -------------------------------------- FROM python:3.12-slim # pdfplumber est en Python pur : aucune dépendance système (plus de poppler). COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ WORKDIR /app COPY pyproject.toml uv.lock ./ RUN uv sync --frozen --no-dev --no-install-project COPY src/ src/ RUN uv sync --frozen --no-dev # Frontend buildé : servi par le backend via le fallback SPA (api/app.py). COPY --from=frontend /frontend/dist/ frontend/dist/ EXPOSE 8000 # --no-sync : ne pas re-résoudre/installer au démarrage (l'env est déjà figé # par les `uv sync --frozen` ci-dessus). Sinon `uv run` réinstalle les deps dev. CMD ["uv", "run", "--no-sync", "plesna-gerance", "serve", "--host", "0.0.0.0"]