Files
Effi/docker-compose.yml

268 lines
11 KiB
YAML

# ═══════════════════════════════════════════════════════════
# 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: