# ================================ # Base # ================================ FROM python:3.12-slim AS base WORKDIR /app # Installer dépendances système si nécessaire RUN apt-get update && apt-get install -y --no-install-recommends \ curl \ && rm -rf /var/lib/apt/lists/* COPY requirements.txt . RUN pip install --no-cache-dir --upgrade pip # ================================ # DEV # ================================ FROM base AS dev ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ ENV=development # Installer dépendances dev (si vous avez un requirements.dev.txt) COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Créer dossiers RUN mkdir -p /app/data /app/logs && chmod -R 777 /app/data /app/logs COPY . . EXPOSE 8000 CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8000", "--reload"] # ================================ # STAGING # ================================ FROM base AS staging ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ ENV=staging RUN pip install --no-cache-dir -r requirements.txt RUN mkdir -p /app/data /app/logs && chmod -R 755 /app/data /app/logs COPY . . # Initialiser la DB au build RUN python init_db.py || true EXPOSE 8002 CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8002", "--log-level", "info"] # ================================ # PROD # ================================ FROM base AS prod ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ ENV=production RUN pip install --no-cache-dir -r requirements.txt # Créer utilisateur non-root pour la sécurité RUN useradd -m -u 1000 appuser && \ mkdir -p /app/data /app/logs && \ chown -R appuser:appuser /app COPY --chown=appuser:appuser . . # Initialiser la DB au build RUN python init_db.py || true USER appuser EXPOSE 8004 CMD ["uvicorn", "api:app", "--host", "0.0.0.0", "--port", "8004", "--workers", "4"]