| # ========== 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"] | |