# ========== Image de Base + Configurations Globales ========== # Utilise Python 3.12 en tant qu'image de base FROM python:3.12-slim # Installe uv COPY --from=ghcr.io/astral-sh/uv:0.8.17 /uv /uvx /bin/ # Créer un utilisateur non-root RUN useradd -m -u 1000 user USER user # Configure l'environnement utilisateur ENV HOME=/home/user # Défini le répertoire de travail à l'intérieur du conteneur WORKDIR $HOME/app # ========== Configurations UV ================================== # Permet aux packages installés d'être compilés et importés plus rapidement dans le code ENV UV_COMPILE_BYTECODE=1 # Copie depuis le cache au lieu de créer des liens car c'est un volume monté ENV UV_LINK_MODE=copy # Omet les dépendances de développement ENV UV_NO_DEV=1 # ========== Étapes Principales ================================= # Installe les dépendances du projet à l'aide du fichier de verouillage et des paramètres COPY --chown=user pyproject.toml uv.lock ./ RUN --mount=type=cache,target=/home/user/.cache/uv,uid=1000,gid=1000 \ uv sync --locked --no-install-project # Ajoute le reste du code source du projet et l'installe dans le conteneur # Une installation séparée des dépendances permet une mise en cache optimale des couches COPY --chown=user src/ ./src/ RUN --mount=type=cache,target=/home/user/.cache/uv,uid=1000,gid=1000 \ uv sync --locked # Activation de l'environnement virtuel ENV PATH=$HOME/app/.venv/bin:$PATH # Expose le port 7860 pour FastAPI EXPOSE 7860 CMD ["uv", "run", "uvicorn", "src.api.main:app", "--host", "0.0.0.0", "--port", "7860"]