Files
glpi-neuroforge-mega/docker-compose.yml
jbergner 1decb831d6
All checks were successful
release-tag / release-image (push) Successful in 3m42s
1.4.5
2026-08-27 06:06:00 +02:00

250 lines
9.0 KiB
YAML

name: glpi-neuroforge-mega
services:
ollama:
image: ollama/ollama:latest
restart: unless-stopped
volumes:
- ollama-data:/root/.ollama
ports:
- "127.0.0.1:${OLLAMA_HOST_PORT:-11434}:11434"
security_opt:
- no-new-privileges:true
searxng:
image: ${SEARXNG_IMAGE:-docker.io/searxng/searxng:latest}
profiles: ["research"]
restart: unless-stopped
environment:
SEARXNG_SECRET: ${SEARXNG_SECRET}
SEARXNG_BASE_URL: http://searxng:8080/
FORCE_OWNERSHIP: "false"
volumes:
- ./deploy/searxng/settings.yml:/etc/searxng/settings.yml:ro
- searxng-cache:/var/cache/searxng
ports:
- "127.0.0.1:${SEARXNG_HOST_PORT:-8888}:8080"
read_only: true
tmpfs:
- /tmp:size=64m,mode=1777
security_opt:
- no-new-privileges:true
cap_drop: ["ALL"]
neuroforge:
build:
context: ./platform/neuroforge
target: server
command: ["-data", "/app/data", "-listen", ":8080"]
restart: unless-stopped
environment:
NEUROFORGE_ADMIN_TOKEN: ${NEUROFORGE_ADMIN_TOKEN}
NEUROFORGE_APP_API_KEY: ${NEUROFORGE_APP_API_KEY}
NEUROFORGE_WORKER_TOKEN: ${NEUROFORGE_WORKER_TOKEN}
NEUROFORGE_METRICS_TOKEN: ${NEUROFORGE_METRICS_TOKEN}
NEUROFORGE_CLUSTER_TOKEN: ${NEUROFORGE_CLUSTER_TOKEN:-}
OPENAI_API_KEY: ${OPENAI_API_KEY:-}
NEUROFORGE_OLLAMA_URL: http://ollama:11434
NEUROFORGE_OLLAMA_CHAT_MODEL: ${OLLAMA_MODEL:-gemma3}
NEUROFORGE_OLLAMA_EMBEDDING_MODEL: ${OLLAMA_EMBEDDING_MODEL:-embeddinggemma}
NEUROFORGE_CONTROLLED_LEARNING: ${NEUROFORGE_CONTROLLED_LEARNING:-true}
NEUROFORGE_GOAL_LEARNING_ENABLED: ${NEUROFORGE_GOAL_LEARNING_ENABLED:-false}
NEUROFORGE_RESEARCH_ENABLED: ${NEUROFORGE_RESEARCH_ENABLED:-false}
NEUROFORGE_SEARXNG_ENABLED: ${NEUROFORGE_SEARXNG_ENABLED:-false}
NEUROFORGE_SEARXNG_URL: ${NEUROFORGE_SEARXNG_URL:-http://searxng:8080}
NEUROFORGE_RESEARCH_GOAL_ENABLED: ${NEUROFORGE_RESEARCH_GOAL_ENABLED:-true}
NEUROFORGE_AUTONOMY_ENABLED: ${NEUROFORGE_AUTONOMY_ENABLED:-false}
NEUROFORGE_AUTONOMY_INTERVAL_MINUTES: ${NEUROFORGE_AUTONOMY_INTERVAL_MINUTES:-30}
NEUROFORGE_RESEARCH_MAX_QUERIES: ${NEUROFORGE_RESEARCH_MAX_QUERIES:-2}
NEUROFORGE_RESEARCH_MAX_PAGES: ${NEUROFORGE_RESEARCH_MAX_PAGES:-4}
NEUROFORGE_KB_STAGING_ENABLED: ${NEUROFORGE_KB_STAGING_ENABLED:-true}
NEUROFORGE_KB_STAGING_URL: http://knowledge:8080/api/integrations/staging
NEUROFORGE_KB_STAGING_TOKEN: ${KB_INTEGRATION_TOKEN}
NEUROFORGE_KB_STAGING_MIN_EVIDENCE: ${NEUROFORGE_KB_STAGING_MIN_EVIDENCE:-4}
NEUROFORGE_KB_STAGING_MIN_SOURCES: ${NEUROFORGE_KB_STAGING_MIN_SOURCES:-2}
NEUROFORGE_KB_STAGING_MIN_CORROBORATIONS: ${NEUROFORGE_KB_STAGING_MIN_CORROBORATIONS:-0}
NEUROFORGE_KB_STAGING_MAX_EVIDENCE: ${NEUROFORGE_KB_STAGING_MAX_EVIDENCE:-12}
ports:
- "127.0.0.1:${NEUROFORGE_HOST_PORT:-8090}:8080"
volumes:
- neuroforge-data:/app/data
depends_on:
- ollama
read_only: true
tmpfs:
- /tmp:size=64m,mode=1777
security_opt:
- no-new-privileges:true
cap_drop: ["ALL"]
healthcheck:
test: ["CMD", "wget", "-q", "-O", "-", "http://127.0.0.1:8080/readyz"]
interval: 15s
timeout: 3s
retries: 8
start_period: 10s
neuroforge-worker:
build:
context: ./platform/neuroforge
target: worker
command: ["-server", "http://neuroforge:8080", "-token", "${NEUROFORGE_WORKER_TOKEN}", "-id", "mega-worker-1"]
restart: unless-stopped
depends_on:
neuroforge:
condition: service_healthy
read_only: true
tmpfs:
- /tmp:size=32m,mode=1777
security_opt:
- no-new-privileges:true
cap_drop: ["ALL"]
agent-data-init:
build:
context: ./services/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:
context: ./services/agent
restart: unless-stopped
env_file: .env
environment:
# Internal container values are owned by Compose. This prevents legacy
# standalone .env values (for example HTTP_ADDR=:7080) from breaking
# service-to-service networking in the Mega stack.
HTTP_ADDR: :8080
DATA_DIR: /app/data
KNOWLEDGE_DIR: /app/knowledge
OLLAMA_URL: http://ollama:11434
KNOWLEDGE_VECTOR_BACKEND: ${KNOWLEDGE_VECTOR_BACKEND:-dual}
NEUROFORGE_URL: http://neuroforge:8080
NEUROFORGE_API_KEY: ${NEUROFORGE_APP_API_KEY}
NEUROFORGE_NAMESPACE: ${NEUROFORGE_NAMESPACE:-glpi-agent}
NEUROFORGE_SEARCH_K: ${NEUROFORGE_SEARCH_K:-128}
NEUROFORGE_FAIL_OPEN: ${NEUROFORGE_FAIL_OPEN:-true}
BRAIN_ACTIVITY_URL: http://neuroforge:8080/api/v1/integrations/events
BRAIN_ACTIVITY_API_KEY: ${NEUROFORGE_APP_API_KEY}
OUTCOME_LEARNING_ENABLED: ${OUTCOME_LEARNING_ENABLED:-true}
OUTCOME_LEARNING_FAIL_OPEN: ${OUTCOME_LEARNING_FAIL_OPEN:-false}
OUTCOME_LEARNING_MAX_OUTCOMES: ${OUTCOME_LEARNING_MAX_OUTCOMES:-2000}
OUTCOME_RETRIEVAL_ENABLED: ${OUTCOME_RETRIEVAL_ENABLED:-true}
OUTCOME_RETRIEVAL_SEARCH_K: ${OUTCOME_RETRIEVAL_SEARCH_K:-6}
OUTCOME_RETRIEVAL_MIN_SIMILARITY: ${OUTCOME_RETRIEVAL_MIN_SIMILARITY:-0.58}
OUTCOME_RETRIEVAL_FAIL_OPEN: ${OUTCOME_RETRIEVAL_FAIL_OPEN:-true}
CONTROL_READ_TOKEN: ${CONTROL_READ_TOKEN}
ports:
- "127.0.0.1:${AGENT_HOST_PORT:-8080}:8080"
volumes:
- agent-data:/app/data
- ${KB_DATA_PATH:-./knowledge}:/app/knowledge:ro
depends_on:
agent-data-init:
condition: service_completed_successfully
neuroforge:
condition: service_healthy
ollama:
condition: service_started
read_only: true
tmpfs:
- /tmp:size=64m,mode=1777
security_opt:
- no-new-privileges:true
cap_drop: ["ALL"]
knowledge:
build:
context: ./services/knowledge
restart: unless-stopped
env_file: .env
environment:
APP_MODE: ${KB_APP_MODE:-editor}
DATA_DIR: /data/knowledge
BACKUP_DIR: /data/backups
STAGING_DIR: /data/staging
LISTEN_ADDR: :8080
OLLAMA_BASE_URL: http://ollama:11434
OLLAMA_MODEL: ${OLLAMA_MODEL:-gemma3}
BRAIN_ACTIVITY_URL: http://neuroforge:8080/api/v1/integrations/events
BRAIN_ACTIVITY_API_KEY: ${NEUROFORGE_APP_API_KEY}
KB_INTEGRATION_TOKEN: ${KB_INTEGRATION_TOKEN}
ports:
- "127.0.0.1:${KNOWLEDGE_HOST_PORT:-8081}:8080"
volumes:
- ${KB_DATA_PATH:-./knowledge}:/data/knowledge:${KB_DATA_MOUNT_MODE:-rw}
- ${KB_STAGING_PATH:-./staging}:/data/staging:rw
- ${KB_BACKUP_PATH:-./backups}:/data/backups:rw
depends_on:
neuroforge:
condition: service_healthy
ollama:
condition: service_started
read_only: true
tmpfs:
- /tmp:size=32m,mode=1777
security_opt:
- no-new-privileges:true
cap_drop: ["ALL"]
control:
build:
context: ./services/control
restart: unless-stopped
environment:
CONTROL_ADDR: :8070
AGENT_URL: http://agent:8080
KNOWLEDGE_URL: http://knowledge:8080
NEUROFORGE_URL: http://neuroforge:8080
NEUROFORGE_API_KEY: ${NEUROFORGE_APP_API_KEY}
CONTROL_READ_TOKEN: ${CONTROL_READ_TOKEN}
CODEBASE_MEMORY_URL: ${CODEBASE_MEMORY_URL:-}
PUBLIC_CODEBASE_MEMORY_URL: ${PUBLIC_CODEBASE_MEMORY_URL:-}
KNOWLEDGE_VECTOR_BACKEND: ${KNOWLEDGE_VECTOR_BACKEND:-dual}
NEUROFORGE_SEARCH_K: ${NEUROFORGE_SEARCH_K:-128}
NEUROFORGE_FAIL_OPEN: ${NEUROFORGE_FAIL_OPEN:-true}
NEUROFORGE_CONTROLLED_LEARNING: ${NEUROFORGE_CONTROLLED_LEARNING:-true}
NEUROFORGE_GOAL_LEARNING_ENABLED: ${NEUROFORGE_GOAL_LEARNING_ENABLED:-false}
OUTCOME_LEARNING_ENABLED: ${OUTCOME_LEARNING_ENABLED:-true}
OUTCOME_RETRIEVAL_ENABLED: ${OUTCOME_RETRIEVAL_ENABLED:-true}
OUTCOME_RETRIEVAL_SEARCH_K: ${OUTCOME_RETRIEVAL_SEARCH_K:-6}
OUTCOME_RETRIEVAL_MIN_SIMILARITY: ${OUTCOME_RETRIEVAL_MIN_SIMILARITY:-0.58}
OUTCOME_RETRIEVAL_FAIL_OPEN: ${OUTCOME_RETRIEVAL_FAIL_OPEN:-true}
NEUROFORGE_RESEARCH_ENABLED: ${NEUROFORGE_RESEARCH_ENABLED:-false}
NEUROFORGE_SEARXNG_ENABLED: ${NEUROFORGE_SEARXNG_ENABLED:-false}
NEUROFORGE_KB_STAGING_ENABLED: ${NEUROFORGE_KB_STAGING_ENABLED:-true}
NEUROFORGE_AUTONOMY_ENABLED: ${NEUROFORGE_AUTONOMY_ENABLED:-false}
PUBLIC_AGENT_URL: http://localhost:${AGENT_HOST_PORT:-8080}
PUBLIC_KNOWLEDGE_URL: http://localhost:${KNOWLEDGE_HOST_PORT:-8081}
PUBLIC_NEUROFORGE_URL: http://localhost:${NEUROFORGE_HOST_PORT:-8090}/admin
ports:
- "127.0.0.1:${CONTROL_HOST_PORT:-8070}:8070"
depends_on:
neuroforge:
condition: service_healthy
agent:
condition: service_started
knowledge:
condition: service_started
read_only: true
tmpfs:
- /tmp:size=16m,mode=1777
security_opt:
- no-new-privileges:true
cap_drop: ["ALL"]
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
neuroforge-data:
agent-data:
ollama-data:
searxng-cache: