221 lines
5.7 KiB
YAML
221 lines
5.7 KiB
YAML
services:
|
|
|
|
###########################################################################
|
|
# Initialisiert das persistente Agent-Datenvolume.
|
|
#
|
|
# Wichtig:
|
|
# Kein "chown -R" bei jedem Deployment. Der Agent schreibt anschließend
|
|
# selbst als UID/GID 65532, daher genügt normalerweise das Root-Verzeichnis.
|
|
###########################################################################
|
|
agent-data-init:
|
|
image: alpine:3.22
|
|
user: "0:0"
|
|
command:
|
|
- sh
|
|
- -c
|
|
- |
|
|
set -eu
|
|
mkdir -p /app/data
|
|
chown 65532:65532 /app/data
|
|
volumes:
|
|
- agent-data:/app/data
|
|
restart: "no"
|
|
|
|
|
|
###########################################################################
|
|
# GLPI AI Agent
|
|
###########################################################################
|
|
agent:
|
|
image: git.send.nrw/sendnrw/glpi-ai-agent:latest
|
|
|
|
restart: unless-stopped
|
|
|
|
env_file:
|
|
- .env
|
|
|
|
ports:
|
|
- "${AGENT_PORT:-7080}:7080"
|
|
|
|
volumes:
|
|
# Persistenter Agent-State:
|
|
# - Knowledge-Index
|
|
# - Runs/Audit
|
|
# - Learning
|
|
# - Managed KBs
|
|
# - GLPI-KB-Cache
|
|
- agent-data:/app/data
|
|
|
|
# Gleicher Knowledge-Pfad wie Editor/Search.
|
|
- "${KB_DATA_PATH:-./knowledge}:/app/knowledge:ro"
|
|
|
|
depends_on:
|
|
agent-data-init:
|
|
condition: service_completed_successfully
|
|
|
|
# Nur Startreihenfolge.
|
|
# Der Agent selbst überwacht Ollama und soll sein WebUI auch dann
|
|
# bereitstellen können, wenn Ollama gerade nicht verfügbar ist.
|
|
ollama:
|
|
condition: service_started
|
|
|
|
security_opt:
|
|
- no-new-privileges:true
|
|
|
|
cap_drop:
|
|
- ALL
|
|
|
|
read_only: true
|
|
|
|
tmpfs:
|
|
- /tmp:size=64m,mode=1777
|
|
|
|
|
|
###########################################################################
|
|
# Ollama
|
|
###########################################################################
|
|
ollama:
|
|
image: ollama/ollama:latest
|
|
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
- ollama-data:/root/.ollama
|
|
|
|
# ollama CLI spricht dabei mit dem lokalen Ollama-Server.
|
|
healthcheck:
|
|
test: ["CMD", "ollama", "list"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
# CPU-Betrieb:
|
|
# keine weitere Konfiguration erforderlich.
|
|
#
|
|
# NVIDIA-Beispiel:
|
|
#
|
|
# gpus: all
|
|
#
|
|
# Siehe offizielle Ollama-Docker-Dokumentation.
|
|
|
|
|
|
###########################################################################
|
|
# Knowledge Base Editor
|
|
###########################################################################
|
|
kb-editor:
|
|
image: git.send.nrw/sendnrw/glpi-ai-knowledgebase:latest
|
|
|
|
restart: unless-stopped
|
|
|
|
ports:
|
|
- "${KB_EDITOR_PORT:-7082}:8080"
|
|
|
|
environment:
|
|
APP_MODE: editor
|
|
|
|
APP_TITLE: "${EDITOR_TITLE:-KB Administration}"
|
|
APP_SUBTITLE: "${EDITOR_SUBTITLE:-Wissensbasis verwalten}"
|
|
|
|
DATA_DIR: /data/knowledge
|
|
BACKUP_DIR: /data/backups
|
|
|
|
LISTEN_ADDR: :8080
|
|
|
|
BASIC_AUTH_USER: "${EDITOR_AUTH_USER:-}"
|
|
BASIC_AUTH_PASSWORD: "${EDITOR_AUTH_PASSWORD:-}"
|
|
|
|
AI_FALLBACK_ENABLED: "${AI_FALLBACK_ENABLED:-false}"
|
|
|
|
OLLAMA_BASE_URL: "${OLLAMA_BASE_URL:-http://ollama:11434}"
|
|
OLLAMA_MODEL: "${OLLAMA_MODEL:-qwen3:8b}"
|
|
OLLAMA_TIMEOUT: "${OLLAMA_TIMEOUT:-10m}"
|
|
OLLAMA_MAX_CONCURRENT: "${OLLAMA_MAX_CONCURRENT:-1}"
|
|
|
|
OLLAMA_STAGING_AUTO_REPLY: "${OLLAMA_STAGING_AUTO_REPLY:-false}"
|
|
OLLAMA_STAGING_MIN_SCORE: "${OLLAMA_STAGING_MIN_SCORE:-0.70}"
|
|
|
|
volumes:
|
|
- "${KB_DATA_PATH:-./knowledge}:/data/knowledge:rw"
|
|
- "${KB_BACKUP_PATH:-./backups}:/data/backups:rw"
|
|
- "${KB_STAGING_PATH:-./staging}:/data/staging:rw"
|
|
|
|
read_only: true
|
|
|
|
tmpfs:
|
|
- /tmp:size=32m,mode=1777
|
|
|
|
security_opt:
|
|
- no-new-privileges:true
|
|
|
|
cap_drop:
|
|
- ALL
|
|
|
|
|
|
###########################################################################
|
|
# Knowledge Base Search
|
|
###########################################################################
|
|
kb-search:
|
|
image: git.send.nrw/sendnrw/glpi-ai-knowledgebase:latest
|
|
|
|
restart: unless-stopped
|
|
|
|
ports:
|
|
- "${KB_SEARCH_PORT:-7081}:8080"
|
|
|
|
environment:
|
|
APP_MODE: google
|
|
|
|
APP_TITLE: "${SEARCH_TITLE:-KB-Datenbank}"
|
|
APP_SUBTITLE: "${SEARCH_SUBTITLE:-Interne Lösungsdatenbank}"
|
|
|
|
AUTO_RELOAD_INTERVAL: "${AUTO_RELOAD_INTERVAL:-60s}"
|
|
|
|
DATA_DIR: /data/knowledge
|
|
LISTEN_ADDR: :8080
|
|
|
|
BASIC_AUTH_USER: "${SEARCH_AUTH_USER:-}"
|
|
BASIC_AUTH_PASSWORD: "${SEARCH_AUTH_PASSWORD:-}"
|
|
|
|
AI_FALLBACK_ENABLED: "${AI_FALLBACK_ENABLED:-true}"
|
|
|
|
OLLAMA_BASE_URL: "${OLLAMA_BASE_URL:-http://ollama:11434}"
|
|
OLLAMA_MODEL: "${OLLAMA_MODEL:-qwen3:8b}"
|
|
OLLAMA_TIMEOUT: "${OLLAMA_TIMEOUT:-10m}"
|
|
OLLAMA_MAX_CONCURRENT: "${OLLAMA_MAX_CONCURRENT:-1}"
|
|
|
|
OLLAMA_STAGING_AUTO_REPLY: "${OLLAMA_STAGING_AUTO_REPLY:-false}"
|
|
OLLAMA_STAGING_MIN_SCORE: "${OLLAMA_STAGING_MIN_SCORE:-0.70}"
|
|
|
|
volumes:
|
|
- "${KB_DATA_PATH:-./knowledge}:/data/knowledge:ro"
|
|
- "${KB_STAGING_PATH:-./staging}:/data/staging:rw"
|
|
|
|
# Search funktioniert grundsätzlich auch ohne Editor.
|
|
# Deshalb würde ich hier keine harte Startabhängigkeit vom Editor setzen.
|
|
|
|
read_only: true
|
|
|
|
tmpfs:
|
|
- /tmp:size=32m,mode=1777
|
|
|
|
security_opt:
|
|
- no-new-privileges:true
|
|
|
|
cap_drop:
|
|
- ALL
|
|
|
|
|
|
###############################################################################
|
|
# PERSISTENTE VOLUMES
|
|
###############################################################################
|
|
|
|
volumes:
|
|
|
|
# Expliziter Name verhindert, dass ein geänderter Compose-Projektname
|
|
# scheinbar ein neues/leeres Agent-Volume erzeugt.
|
|
agent-data:
|
|
name: glpi-ai-agent-data
|
|
|
|
# Enthält heruntergeladene Ollama-Modelle.
|
|
ollama-data:
|
|
name: glpi-ai-ollama-data |