# ============================================================================= # docker-compose.yml — Laboratorio IA Local # ============================================================================= # # Uso: # docker compose up -d # Levantar todos los servicios # docker compose down # Detener todos los servicios # docker compose logs -f # Ver logs en tiempo real # # Servicios: # - ollama: Gestor de modelos de lenguaje (API en :11434) # - open-webui: Interfaz gráfica web (web en :3000) # # Requisitos: # - Docker Engine 24+ o Podman 4+ # - Docker Compose v2+ # # Notas: # - Los modelos descargados se guardan en ./ollama/models (persistente) # - Los datos de Open WebUI se guardan en ./open-webui/data (persistente) # - Si tienes GPU NVIDIA, descomenta la sección 'deploy' en ollama # - Las redes están separadas para aislamiento entre servicios # # ============================================================================= services: # --------------------------------------------------------------------------- # Ollama — Gestor de modelos de lenguaje # --------------------------------------------------------------------------- ollama: image: ollama/ollama:latest container_name: ollama-server hostname: ollama volumes: # Persistencia de modelos descargados - ./ollama/models:/root/.ollama ports: # API REST de Ollama - "11434:11434" environment: # Mantener el modelo en memoria para respuestas más rápidas - OLLAMA_KEEP_ALIVE=5m # Número máximo de modelos cargados simultáneamente - OLLAMA_NUM_PARALLEL=1 # Límite de contexto (ventana de tokens) - OLLAMA_CONTEXT_LENGTH=8192 # Descomenta estas líneas si tienes GPU NVIDIA: # deploy: # resources: # reservations: # devices: # - driver: nvidia # count: all # capabilities: [gpu] restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - ia-local-net # --------------------------------------------------------------------------- # Open WebUI — Interfaz gráfica para chatear con modelos # --------------------------------------------------------------------------- open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui depends_on: ollama: condition: service_healthy volumes: # Persistencia de conversaciones, configuraciones, archivos subidos - ./open-webui/data:/app/backend/data ports: # Interfaz web - "3000:8080" environment: # URL del servicio Ollama (nombre del contenedor, no localhost) - OLLAMA_BASE_URL=http://ollama:11434 # Tiempo máximo de espera para respuestas largas - WEBUI_TIMEOUT=300 # Descomenta para requerir autenticación: # - WEBUI_AUTH=true # Descomenta para usar GPU NVIDIA en Open WebUI: # - USE_CUDA=true restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s networks: - ia-local-net # --------------------------------------------------------------------------- # Redes # --------------------------------------------------------------------------- networks: ia-local-net: name: ia-local-network driver: bridge