366 lines
12 KiB
YAML
366 lines
12 KiB
YAML
x-skill-worker-env: &skill-worker-env
|
|
JARVIS_MASTER_URL: http://jarvis:8080
|
|
JARVIS_ENROLLMENT_TOKEN: ${JARVIS_MESH_ENROLLMENT_TOKEN:-change-this-enrollment-token}
|
|
JARVIS_WORKER_ADDR: :8090
|
|
JARVIS_SKILLS_DIR: /skills
|
|
JARVIS_WORKER_WORK_DIR: /work
|
|
JARVIS_WORKER_ALLOW_SYSTEM_EXEC: "true"
|
|
JARVIS_WORKER_MAX_OUTPUT_KB: 1024
|
|
TZ: Europe/Berlin
|
|
|
|
services:
|
|
jarvis:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
ports:
|
|
- "8080:8080"
|
|
volumes:
|
|
- ./data:/app/data
|
|
- ./models:/models:ro
|
|
- ./local-tools:/tools:ro
|
|
- ./skills:/app/skills:ro
|
|
# Docker Engine control. This socket grants host-level Docker control;
|
|
# JARVIS only exposes start/stop/restart for explicitly labelled containers.
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
environment:
|
|
JARVIS_ADDR: :8080
|
|
JARVIS_DATA: /app/data/store.json
|
|
JARVIS_RAG_DATA: /app/data/rag.json
|
|
JARVIS_WAKE_WORD: jarvis
|
|
JARVIS_TIMEZONE: Europe/Berlin
|
|
JARVIS_SKILLS_DIR: /app/skills
|
|
JARVIS_SKILLS_ENABLED: "true"
|
|
# External runtime code belongs in Skill Mesh workers by default.
|
|
JARVIS_SKILL_PROCESS_ENABLED: "false"
|
|
JARVIS_SKILL_ALLOW_SYSTEM_EXEC: "false"
|
|
JARVIS_SKILL_MAX_TIMEOUT_MS: 30000
|
|
JARVIS_SKILL_MAX_OUTPUT_KB: 1024
|
|
JARVIS_MESH_ENABLED: "true"
|
|
JARVIS_MESH_ENROLLMENT_TOKEN: ${JARVIS_MESH_ENROLLMENT_TOKEN:-change-this-enrollment-token}
|
|
JARVIS_MESH_LEASE_SECONDS: 30
|
|
JARVIS_MESH_INVOKE_TIMEOUT_MS: 30000
|
|
JARVIS_DOCKER_CONTROLLER_ENABLED: "true"
|
|
JARVIS_DOCKER_SOCKET: /var/run/docker.sock
|
|
JARVIS_DOCKER_SKILL_LABEL: com.jarvis.skill-service
|
|
JARVIS_DOCKER_SKILL_LABEL_VALUE: "true"
|
|
TZ: Europe/Berlin
|
|
OLLAMA_URL: http://ollama:11434
|
|
OLLAMA_MODEL: auto
|
|
OLLAMA_EMBED_MODEL: auto
|
|
TASK_SCOUT_INTERVAL: 2m
|
|
HOME_AUTOMATION_INTERVAL: 1m
|
|
KANBAN_AI_INTERVAL: 5m
|
|
JARVIS_DEBUG_TRACE: "true"
|
|
JARVIS_DEBUG_DIR: /app/data/debug
|
|
JARVIS_DEBUG_MAX_MB: 25
|
|
JARVIS_DEBUG_KEEP_FILES: 4
|
|
VOICE_FFMPEG_BIN: ffmpeg
|
|
VOICE_WHISPER_BIN: /usr/local/bin/whisper-cli
|
|
VOICE_WHISPER_MODEL: /models/ggml-small.bin
|
|
VOICE_LANGUAGE: de
|
|
VOICE_PIPER_BIN: /tools/piper
|
|
VOICE_PIPER_MODEL: /models/de_DE-thorsten-medium.onnx
|
|
LD_LIBRARY_PATH: /tools:/tools/lib
|
|
depends_on:
|
|
- ollama
|
|
|
|
ollama:
|
|
image: ollama/ollama:latest
|
|
ports:
|
|
- "11434:11434"
|
|
volumes:
|
|
- ollama-data:/root/.ollama
|
|
|
|
skill-python:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.python
|
|
profiles: ["skill-workers"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/python:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: python-main
|
|
JARVIS_WORKER_RUNTIME: python
|
|
JARVIS_WORKER_RUNTIME_VERSION: "3.13"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-python:8090
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: python
|
|
com.jarvis.worker-name: python-main
|
|
|
|
skill-node:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.node
|
|
profiles: ["skill-workers"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/node:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: node-main
|
|
JARVIS_WORKER_RUNTIME: node
|
|
JARVIS_WORKER_RUNTIME_VERSION: "22"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-node:8090
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: node
|
|
com.jarvis.worker-name: node-main
|
|
|
|
skill-go:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.golang
|
|
profiles: ["skill-workers"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/go:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: go-main
|
|
JARVIS_WORKER_RUNTIME: go
|
|
JARVIS_WORKER_RUNTIME_VERSION: "1.23"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-go:8090
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: go
|
|
com.jarvis.worker-name: go-main
|
|
|
|
skill-rust:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.rust
|
|
profiles: ["skill-workers"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/rust:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: rust-main
|
|
JARVIS_WORKER_RUNTIME: rust
|
|
JARVIS_WORKER_RUNTIME_VERSION: stable
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-rust:8090
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: rust
|
|
com.jarvis.worker-name: rust-main
|
|
|
|
skill-c:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.c
|
|
profiles: ["skill-workers"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/c:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: c-main
|
|
JARVIS_WORKER_RUNTIME: c
|
|
JARVIS_WORKER_RUNTIME_VERSION: gcc
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-c:8090
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: c
|
|
com.jarvis.worker-name: c-main
|
|
|
|
skill-cpp:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.cpp
|
|
profiles: ["skill-workers"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/cpp:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: cpp-main
|
|
JARVIS_WORKER_RUNTIME: cpp
|
|
JARVIS_WORKER_RUNTIME_VERSION: g++
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-cpp:8090
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: cpp
|
|
com.jarvis.worker-name: cpp-main
|
|
|
|
skill-csharp:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.csharp
|
|
profiles: ["skill-workers"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/csharp:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: csharp-main
|
|
JARVIS_WORKER_RUNTIME: csharp
|
|
JARVIS_WORKER_RUNTIME_VERSION: ".NET 8"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-csharp:8090
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: csharp
|
|
com.jarvis.worker-name: csharp-main
|
|
|
|
|
|
# --- Home Control integration workers (1 container = 1 integration) ---
|
|
# Start all with: docker compose --profile home-skills up -d --build
|
|
skill-hue:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.python
|
|
profiles: ["home-skills"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/python/philips-hue:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: hue
|
|
JARVIS_WORKER_RUNTIME: python
|
|
JARVIS_WORKER_RUNTIME_VERSION: "3.13"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-hue:8090
|
|
HUE_BRIDGE_URL: ${HUE_BRIDGE_URL:-}
|
|
HUE_APP_KEY: ${HUE_APP_KEY:-}
|
|
HUE_VERIFY_TLS: ${HUE_VERIFY_TLS:-false}
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: python
|
|
com.jarvis.worker-name: hue
|
|
com.jarvis.integration: philips-hue
|
|
|
|
skill-unifi-network:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.python
|
|
profiles: ["home-skills"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/python/unifi-network:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: unifi-network
|
|
JARVIS_WORKER_RUNTIME: python
|
|
JARVIS_WORKER_RUNTIME_VERSION: "3.13"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-unifi-network:8090
|
|
UNIFI_NETWORK_URL: ${UNIFI_NETWORK_URL:-}
|
|
UNIFI_API_KEY: ${UNIFI_API_KEY:-}
|
|
UNIFI_VERIFY_TLS: ${UNIFI_VERIFY_TLS:-false}
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: python
|
|
com.jarvis.worker-name: unifi-network
|
|
com.jarvis.integration: unifi-network
|
|
|
|
skill-unifi-protect:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.python
|
|
profiles: ["home-skills"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/python/unifi-protect:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: unifi-protect
|
|
JARVIS_WORKER_RUNTIME: python
|
|
JARVIS_WORKER_RUNTIME_VERSION: "3.13"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-unifi-protect:8090
|
|
UNIFI_PROTECT_URL: ${UNIFI_PROTECT_URL:-}
|
|
UNIFI_API_KEY: ${UNIFI_API_KEY:-}
|
|
UNIFI_VERIFY_TLS: ${UNIFI_VERIFY_TLS:-false}
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: python
|
|
com.jarvis.worker-name: unifi-protect
|
|
com.jarvis.integration: unifi-protect
|
|
|
|
skill-proxmox:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.python
|
|
profiles: ["home-skills"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/python/proxmox-ve:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: proxmox
|
|
JARVIS_WORKER_RUNTIME: python
|
|
JARVIS_WORKER_RUNTIME_VERSION: "3.13"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-proxmox:8090
|
|
PROXMOX_BASE_URL: ${PROXMOX_BASE_URL:-}
|
|
PROXMOX_TOKEN_ID: ${PROXMOX_TOKEN_ID:-}
|
|
PROXMOX_TOKEN_SECRET: ${PROXMOX_TOKEN_SECRET:-}
|
|
PROXMOX_VERIFY_TLS: ${PROXMOX_VERIFY_TLS:-false}
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: python
|
|
com.jarvis.worker-name: proxmox
|
|
com.jarvis.integration: proxmox
|
|
|
|
skill-network-tools:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.python
|
|
profiles: ["home-skills"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/python/network-tools:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: network-tools
|
|
JARVIS_WORKER_RUNTIME: python
|
|
JARVIS_WORKER_RUNTIME_VERSION: "3.13"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-network-tools:8090
|
|
WOL_BROADCAST: ${WOL_BROADCAST:-255.255.255.255}
|
|
WOL_PORT: ${WOL_PORT:-9}
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: python
|
|
com.jarvis.worker-name: network-tools
|
|
com.jarvis.integration: network-tools
|
|
|
|
skill-ntfy:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.python
|
|
profiles: ["home-skills"]
|
|
depends_on: [jarvis]
|
|
volumes: ["./skills/python/ntfy:/skills:ro"]
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: ntfy
|
|
JARVIS_WORKER_RUNTIME: python
|
|
JARVIS_WORKER_RUNTIME_VERSION: "3.13"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-ntfy:8090
|
|
NTFY_BASE_URL: ${NTFY_BASE_URL:-https://ntfy.sh}
|
|
NTFY_TOKEN: ${NTFY_TOKEN:-}
|
|
NTFY_DEFAULT_TOPIC: ${NTFY_DEFAULT_TOPIC:-}
|
|
NTFY_VERIFY_TLS: ${NTFY_VERIFY_TLS:-true}
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: python
|
|
com.jarvis.worker-name: ntfy
|
|
com.jarvis.integration: ntfy
|
|
|
|
# Dockge upstream does not currently expose a stable authenticated management
|
|
# API. This dedicated worker therefore operates on the same Compose stack
|
|
# directory and Docker Engine. It is intentionally isolated from the master.
|
|
skill-dockge:
|
|
build:
|
|
context: .
|
|
dockerfile: workers/docker/Dockerfile.dockge
|
|
profiles: ["home-skills"]
|
|
depends_on: [jarvis]
|
|
volumes:
|
|
- ./skills/python/dockge-compose:/skills:ro
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
- ${DOCKGE_STACKS_DIR:-/opt/stacks}:${DOCKGE_STACKS_DIR:-/opt/stacks}:ro
|
|
environment:
|
|
<<: *skill-worker-env
|
|
JARVIS_WORKER_NAME: dockge
|
|
JARVIS_WORKER_RUNTIME: python-docker
|
|
JARVIS_WORKER_RUNTIME_VERSION: "3.13"
|
|
JARVIS_WORKER_PUBLIC_URL: http://skill-dockge:8090
|
|
DOCKGE_STACKS_DIR: ${DOCKGE_STACKS_DIR:-/opt/stacks}
|
|
DOCKGE_ALLOWED_STACKS: ${DOCKGE_ALLOWED_STACKS:-}
|
|
labels:
|
|
com.jarvis.skill-service: "true"
|
|
com.jarvis.skill-runtime: python-docker
|
|
com.jarvis.worker-name: dockge
|
|
com.jarvis.integration: dockge
|
|
|
|
volumes:
|
|
ollama-data:
|