# --- Phase 1: build des dépendances --- # Utilise une image Python complète avec Poetry FROM python:3.13-slim AS builder # Définir le répertoire de travail WORKDIR /app # Installer Poetry RUN pip install poetry==1.8.3 # Copier uniquement les fichiers de définition de projet COPY pyproject.toml poetry.lock ./ # Créer un environnement virtuel dans un emplacement spécifique RUN python -m venv /venv # Activer le venv et installer les dépendances (sans dev) # Cela permet de mettre en cache cette couche si les dépendances ne changent pas RUN . /venv/bin/activate && \ poetry export -f requirements.txt --output requirements.txt --without-hashes && \ pip install -r requirements.txt # --- Phase 2: image finale d'éxécution --- # Utiliser une image slim car nous n'avons plus besoin des outils de build FROM python:3.13-slim # Définir le répertoire de travail WORKDIR /app # Copier l'environnement virtuel complet de la phase de build COPY --from=builder /venv /venv # Copier le code source de l'application # Assumant que le code FastAPI est dans src/ COPY src/ ./src # Ajouter /app/src au PYTHONPATH pour que Python trouve le module "app" ENV PYTHONPATH="${PYTHONPATH}:/app/src" # Exposer le port sur lequel FastAPI (uvicorn) va tourner EXPOSE 8000 # Commande pour lancer l'application # On utilise le binaire uvicorn du venv # EB (plateforme Docker) s'attend par défaut à ce que l'app tourne sur le port 8000 CMD ["/venv/bin/uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]