# ═══════════════════════════════════════════════════════════ # EFFI SERVER - Stack IA Locale # Machine : effi-server (192.168.1.27) # ═══════════════════════════════════════════════════════════ services: # ───────────────────────────────────────────────────────── # 0. SEARXNG - Meta-search Engine (Web Search) # → http://192.168.1.27:11112 # ───────────────────────────────────────────────────────── searxng: image: searxng/searxng:latest container_name: effi-searxng restart: unless-stopped ports: - "11112:8080" volumes: - ./searxng-data:/etc/searxng:rw environment: - SEARXNG_BASE_URL=http://192.168.1.27:11112/ - SEARXNG_SECRET=${SEARXNG_SECRET_KEY} networks: - effi-net # ───────────────────────────────────────────────────────── # 1. OPEN WEBUI - Interface Chat Effi # → http://192.168.1.27:3000 # ───────────────────────────────────────────────────────── open-webui: image: ghcr.io/open-webui/open-webui:main container_name: open-webui restart: unless-stopped extra_hosts: - "host.docker.internal:host-gateway" ports: - "3000:8080" environment: - OLLAMA_BASE_URL=http://host.docker.internal:3011 - WEBUI_SECRET_KEY=${WEBUI_SECRET_KEY} - VECTOR_DB=qdrant - QDRANT_URI=http://qdrant:6333 - DEFAULT_LOCALE=fr-FR - ENABLE_MEMORIES=true - AUDIO_STT_ENGINE=openai - AUDIO_STT_OPENAI_API_BASE_URL=http://192.168.1.11:8200/v1 - AUDIO_STT_OPENAI_API_KEY=anything - AUDIO_STT_MODEL=Systran/faster-whisper-large-v3 volumes: - open-webui-data:/app/backend/data depends_on: - qdrant - wol-proxy networks: - effi-net # ───────────────────────────────────────────────────────── # 2. WOL PROXY - Réveil PC Gaming avant appel Ollama # → Proxy :3011 → PC Gaming :11434 # ───────────────────────────────────────────────────────── wol-proxy: build: ./wol-proxy container_name: wol-proxy restart: unless-stopped network_mode: host environment: - TARGET_HOST=${OLLAMA_HOST} - TARGET_PORT=11434 - TARGET_MAC=${PC_GAMING_MAC} - LISTEN_PORT=3011 - WAKE_TIMEOUT=${WAKE_TIMEOUT:-180} - CHECK_INTERVAL=5 - BROADCAST_IP=${BROADCAST_IP} # ───────────────────────────────────────────────────────── # 3. MCPO - Proxy outils MCP (Obsidian, etc.) # → http://192.168.1.27:8000 # ───────────────────────────────────────────────────────── mcpo: image: ghcr.io/open-webui/mcpo:main container_name: mcpo restart: unless-stopped ports: - "8000:8000" volumes: - ./mcpo-config:/app/config:ro - ./mcpo-patch.sh:/mcpo-patch.sh:ro entrypoint: ["sh", "/mcpo-patch.sh"] networks: - effi-net # ───────────────────────────────────────────────────────── # 3b. LEANTIME MCP - Serveur MCP pour gestion de projet # → http://192.168.1.27:8079/mcp # ───────────────────────────────────────────────────────── leantime-mcp: build: context: ./leantime-mcp dockerfile: Dockerfile image: effi-leantime-mcp:latest container_name: effi-leantime-mcp restart: unless-stopped environment: - LEANTIME_URL=http://192.168.1.25:8380 - LEANTIME_API_KEY=${LEANTIME_API_KEY} - LEANTIME_USER_EMAIL=${LEANTIME_USER_EMAIL} ports: - "8079:8079" networks: - effi-net # ───────────────────────────────────────────────────────── # 4. QDRANT - Vector Store (RAG sémantique) # → http://192.168.1.27:6333 # ───────────────────────────────────────────────────────── qdrant: image: qdrant/qdrant:latest container_name: qdrant restart: unless-stopped ports: - "6333:6333" - "6334:6334" volumes: - ./qdrant-storage:/qdrant/storage:z networks: - effi-net # ───────────────────────────────────────────────────────── # 5. COUCHDB - Backend Obsidian LiveSync # → http://192.168.1.27:5984 # ───────────────────────────────────────────────────────── couchdb: image: couchdb:3.3 container_name: couchdb restart: unless-stopped ports: - "5984:5984" environment: - COUCHDB_USER=${COUCHDB_USER} - COUCHDB_PASSWORD=${COUCHDB_PASSWORD} volumes: - ./couchdb-data:/opt/couchdb/data networks: - effi-net # ───────────────────────────────────────────────────────── # 6. N8N - Automatisation autonome Effi # → http://192.168.1.27:5678 # ───────────────────────────────────────────────────────── n8n: image: docker.n8n.io/n8nio/n8n:latest container_name: n8n restart: unless-stopped ports: - "5678:5678" environment: - N8N_HOST=0.0.0.0 - N8N_PORT=5678 - N8N_PROTOCOL=http - WEBHOOK_URL=http://192.168.1.27:5678 - N8N_BASIC_AUTH_ACTIVE=true - N8N_BASIC_AUTH_USER=${N8N_USER} - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD} - GENERIC_TIMEZONE=Europe/Paris - TZ=Europe/Paris volumes: - ./n8n-data:/home/node/.n8n networks: - effi-net # ───────────────────────────────────────────────────────── # 7. PIPELINES - Middleware Open WebUI (mem0 memory) # → http://192.168.1.27:9099 # ───────────────────────────────────────────────────────── pipelines: image: ghcr.io/open-webui/pipelines:main container_name: pipelines restart: unless-stopped ports: - "9099:9099" volumes: - pipelines-data:/app/pipelines networks: - effi-net # ───────────────────────────────────────────────────────── # 8. WHISPER - Speech To Text (STT) # → http://192.168.1.27:8200 # ───────────────────────────────────────────────────────── whisper: image: fedirz/faster-whisper-server:latest-cpu container_name: whisper restart: unless-stopped ports: - "8200:8000" volumes: - whisper-cache:/root/.cache/huggingface environment: - WHISPER__MODEL=guillaumekln/faster-whisper-tiny - WHISPER__LANGUAGE=fr - HF_HUB_OFFLINE=0 # ───────────────────────────────────────────────────────── # 9. OPENEDAI-SPEECH - Text To Speech (TTS) # → http://192.168.1.27:8100 # ───────────────────────────────────────────────────────── openedai-speech: image: ghcr.io/matatonic/openedai-speech container_name: openedai-speech restart: unless-stopped ports: - "8100:8000" volumes: - ./tts-voices:/app/voices - ./tts-config:/app/config # ───────────────────────────────────────────────────────── # 10. WATCHTOWER - Mise à jour automatique des containers # → Vérifie les mises à jour chaque nuit à 4h00 # ───────────────────────────────────────────────────────── watchtower: image: nickfedor/watchtower:latest container_name: watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - WATCHTOWER_CLEANUP=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_NOTIFICATIONS_LEVEL=warn - WATCHTOWER_INCLUDE_STOPPED=true - WATCHTOWER_REVIVE_STOPPED=false - TZ=Europe/Paris restart: unless-stopped networks: - effi-net # ───────────────────────────────────────────────────────── # 11. OBSIDIAN - Version Serveur 24/7 (Web UI & MCP) # → Interface Web : https://192.168.1.27:3100 # ───────────────────────────────────────────────────────── obsidian: image: lscr.io/linuxserver/obsidian:latest container_name: obsidian restart: unless-stopped security_opt: - seccomp:unconfined # Nécessaire pour le rendu Chromium/Electron dans Docker environment: - PUID=1000 # À vérifier avec la commande 'id' sur ton serveur Ubuntu - PGID=1000 - TZ=Europe/Paris ports: - "3100:3001" # Accès HTTPS à l'interface virtuelle volumes: - ./obsidian-vault:/config # Contient l'OS virtuel ET ton Vault Obsidian shm_size: "1gb" # Requis pour la stabilité de l'interface graphique networks: - effi-net networks: effi-net: driver: bridge volumes: open-webui-data: pipelines-data: whisper-cache: