# Integrated example for sibling project folders: # ./glpi-ai-agent # ./glpi-ai-knowledgebase # ./glpi-neural-brain # Run from glpi-neural-brain: # docker compose -f deployment/docker-compose.full.yml up -d --build services: agent-data-init: build: context: ${AGENT_PROJECT_PATH:-../../glpi-ai-agent} target: data-init restart: "no" user: "0:0" volumes: - agent-data:/app/data security_opt: [no-new-privileges:true] cap_drop: [ALL] cap_add: [CHOWN, FOWNER] agent: build: ${AGENT_PROJECT_PATH:-../../glpi-ai-agent} restart: unless-stopped env_file: ${AGENT_ENV_FILE:-../../glpi-ai-agent/.env} environment: DATA_DIR: /app/data KNOWLEDGE_DIR: /app/knowledge OLLAMA_URL: http://ollama:11434 BRAIN_ACTIVITY_URL: http://brain:8090/api/events BRAIN_ACTIVITY_API_KEY: ${BRAIN_API_KEY:-} ports: - "127.0.0.1:${AGENT_PORT:-8080}:8080" volumes: - agent-data:/app/data - ${KNOWLEDGE_HOST_PATH:-../../glpi-ai-agent/knowledge}:/app/knowledge:ro depends_on: agent-data-init: condition: service_completed_successfully ollama: condition: service_started security_opt: [no-new-privileges:true] cap_drop: [ALL] read_only: true tmpfs: [/tmp:size=64m,mode=1777] kb-editor: build: ${KB_PROJECT_PATH:-../../glpi-ai-knowledgebase} image: kb-helpdesk:neural-stack restart: unless-stopped ports: - "${KB_EDITOR_PORT:-8081}:8080" environment: APP_MODE: editor APP_TITLE: KB Administration APP_SUBTITLE: Wissen und AI-THINK prüfen DATA_DIR: /data/knowledge BACKUP_DIR: /data/backups STAGING_DIR: /data/staging LISTEN_ADDR: :8080 BASIC_AUTH_USER: ${EDITOR_AUTH_USER:-} BASIC_AUTH_PASSWORD: ${EDITOR_AUTH_PASSWORD:-} BRAIN_ACTIVITY_URL: http://brain:8090/api/events BRAIN_ACTIVITY_API_KEY: ${BRAIN_API_KEY:-} volumes: - ${KNOWLEDGE_HOST_PATH:-../../glpi-ai-agent/knowledge}:/data/knowledge:rw - ${KB_BACKUP_HOST_PATH:-../../glpi-ai-knowledgebase/backups}:/data/backups:rw - ${KB_STAGING_HOST_PATH:-../../glpi-ai-knowledgebase/staging}:/data/staging:rw read_only: true tmpfs: [/tmp:size=32m] security_opt: [no-new-privileges:true] cap_drop: [ALL] kb-search: image: kb-helpdesk:neural-stack depends_on: [kb-editor] restart: unless-stopped ports: - "${KB_SEARCH_PORT:-8082}:8080" environment: APP_MODE: google APP_TITLE: IT Helpdesk Wissen APP_SUBTITLE: Interne Lösungsdatenbank AUTO_RELOAD_INTERVAL: 60s DATA_DIR: /data/knowledge # Deliberately isolated: production search never sees Brain AI-THINK drafts. STAGING_DIR: /tmp/empty-staging LISTEN_ADDR: :8080 OLLAMA_BASE_URL: http://ollama:11434 AI_FALLBACK_ENABLED: ${AI_FALLBACK_ENABLED:-false} OLLAMA_MODEL: ${OLLAMA_CHAT_MODEL:-qwen3:8b} BRAIN_ACTIVITY_URL: http://brain:8090/api/events BRAIN_ACTIVITY_API_KEY: ${BRAIN_API_KEY:-} volumes: - ${KNOWLEDGE_HOST_PATH:-../../glpi-ai-agent/knowledge}:/data/knowledge:ro read_only: true tmpfs: [/tmp:size=32m] security_opt: [no-new-privileges:true] cap_drop: [ALL] brain: build: context: .. restart: unless-stopped ports: - "${BRAIN_PORT:-8090}:8090" environment: BRAIN_LISTEN_ADDR: :8090 BRAIN_DATA_DIR: /app/data BRAIN_KNOWLEDGE_DIRS: /sources/knowledge BRAIN_STAGING_DIRS: /sources/staging BRAIN_AGENT_RUNS_FILES: /sources/agent-data/runs.jsonl BRAIN_API_KEY: ${BRAIN_API_KEY:-} OLLAMA_URL: http://ollama:11434 OLLAMA_CHAT_MODEL: ${OLLAMA_CHAT_MODEL:-qwen3:8b} OLLAMA_EMBEDDING_MODEL: ${OLLAMA_EMBEDDING_MODEL:-embeddinggemma} BRAIN_AUTO_ENRICH: ${BRAIN_AUTO_ENRICH:-true} BRAIN_SCAN_INTERVAL: ${BRAIN_SCAN_INTERVAL:-20s} BRAIN_ENRICH_INTERVAL: ${BRAIN_ENRICH_INTERVAL:-90s} BRAIN_ENRICH_BATCH_SIZE: ${BRAIN_ENRICH_BATCH_SIZE:-3} BRAIN_ENRICH_STEP_DELAY: ${BRAIN_ENRICH_STEP_DELAY:-3s} BRAIN_ENRICH_ANCHORS: ${BRAIN_ENRICH_ANCHORS:-48} BRAIN_RESEARCH_ENABLED: ${BRAIN_RESEARCH_ENABLED:-false} SEARXNG_URL: ${SEARXNG_URL:-} volumes: - brain-data:/app/data - ${KNOWLEDGE_HOST_PATH:-../../glpi-ai-agent/knowledge}:/sources/knowledge:ro - ${KB_STAGING_HOST_PATH:-../../glpi-ai-knowledgebase/staging}:/sources/staging:rw - agent-data:/sources/agent-data:ro depends_on: ollama: condition: service_started ollama: image: ollama/ollama:latest restart: unless-stopped volumes: - ollama-data:/root/.ollama volumes: agent-data: brain-data: ollama-data: