Aller au contenu

Configuration Docker

Configuration détaillée des conteneurs Docker pour JARVIS.

Dockerfile Backend

# Dockerfile.prod
FROM python:3.11-slim

WORKDIR /app

# Dépendances système
RUN apt-get update && apt-get install -y \
    gcc \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# Dépendances Python
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Code source
COPY app/ ./app/

# User non-root
RUN useradd -m appuser && chown -R appuser:appuser /app
USER appuser

# Configuration
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1

EXPOSE 8000

CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]

Services Docker Compose

PostgreSQL avec pgvector

postgres:
  image: pgvector/pgvector:pg16
  container_name: jarvis-postgres
  restart: unless-stopped
  environment:
    POSTGRES_DB: ${POSTGRES_DB:-jarvis}
    POSTGRES_USER: ${POSTGRES_USER:-jarvis}
    POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  volumes:
    - postgres_data:/var/lib/postgresql/data
    - ./postgres/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
  healthcheck:
    test: ["CMD-SHELL", "pg_isready -U jarvis"]
    interval: 10s
    timeout: 5s
    retries: 5

Redis

redis:
  image: redis:7-alpine
  container_name: jarvis-redis
  restart: unless-stopped
  command: redis-server --requirepass ${REDIS_PASSWORD}
  volumes:
    - redis_data:/data
  healthcheck:
    test: ["CMD", "redis-cli", "ping"]
    interval: 10s
    timeout: 5s
    retries: 5

MinIO

minio:
  image: minio/minio:latest
  container_name: jarvis-minio
  restart: unless-stopped
  command: server /data --console-address ":9001"
  environment:
    MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
    MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
  volumes:
    - minio_data:/data
  ports:
    - "9000:9000"
    - "9001:9001"

Ollama (LLM Local)

ollama:
  image: ollama/ollama:latest
  container_name: jarvis-ollama
  restart: unless-stopped
  volumes:
    - ollama_data:/root/.ollama
  deploy:
    resources:
      reservations:
        devices:
          - driver: nvidia
            count: all
            capabilities: [gpu]

Réseaux

networks:
  jarvis-network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.28.0.0/16

  traefik-public:
    external: true

Volumes

volumes:
  postgres_data:
    driver: local
  redis_data:
    driver: local
  minio_data:
    driver: local
  ollama_data:
    driver: local

Commandes Utiles

# Construire les images
docker compose build

# Démarrer en mode détaché
docker compose up -d

# Voir les logs
docker compose logs -f backend

# Redémarrer un service
docker compose restart backend

# Accéder à un conteneur
docker compose exec postgres psql -U jarvis

# Nettoyer tout
docker compose down -v --remove-orphans
docker system prune -af

Optimisation

Multi-stage Build

# Build stage
FROM python:3.11-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip wheel --no-cache-dir --wheel-dir /wheels -r requirements.txt

# Production stage
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /wheels /wheels
RUN pip install --no-cache /wheels/*
COPY app/ ./app/
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0"]

.dockerignore

__pycache__
*.pyc
*.pyo
.git
.env
.venv
tests/
docs/
*.md
.pytest_cache
.coverage
htmlcov/