jarvis-assist/Claude outputs/docker-compose.yml

209 lines
5.9 KiB
YAML

services:
postgres:
image: pgvector/pgvector:pg16
container_name: jarvis-postgres
environment:
POSTGRES_DB: jarvis
POSTGRES_USER: jarvis
POSTGRES_PASSWORD: ${DB_PASSWORD:-ChangeMe123!}
volumes:
- postgres_data:/var/lib/postgresql/data
- ./init-db.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
networks:
- jarvis-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U jarvis"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: jarvis-redis
command: redis-server --appendonly yes
volumes:
- redis_data:/data
ports:
- "6379:6379"
networks:
- jarvis-net
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
# NOTE: milvus/etcd are placeholders - milvusdb/milvus:v0.4.0 does not exist
# and this config format (etcd-only, no MinIO) doesn't match modern Milvus
# standalone anyway. Not started yet; needs a proper Phase 3 design.
milvus:
image: milvusdb/milvus:v0.4.0
container_name: jarvis-milvus
environment:
ETCD_ENDPOINTS: etcd:2379
COMMON_STORAGETYPE: local
volumes:
- milvus_data:/var/lib/milvus
ports:
- "19530:19530"
- "9091:9091"
depends_on:
etcd:
condition: service_healthy
networks:
- jarvis-net
restart: unless-stopped
etcd:
image: quay.io/coreos/etcd:v3.5.5
container_name: jarvis-etcd
environment:
- ETCD_AUTO_COMPACTION_MODE=revision
- ETCD_AUTO_COMPACTION_RETENTION=1000
- ETCD_QUOTA_BACKEND_BYTES=4294967296
volumes:
- etcd_data:/etcd
ports:
- "2379:2379"
networks:
- jarvis-net
healthcheck:
test: ["CMD", "etcdctl", "endpoint", "health"]
interval: 10s
timeout: 5s
retries: 5
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
restart: unless-stopped
ollama:
image: ollama/ollama:latest
container_name: jarvis-ollama
environment:
- OLLAMA_HOST=0.0.0.0:11434
volumes:
- ollama_data:/root/.ollama
ports:
- "11434:11434"
networks:
- jarvis-net
restart: unless-stopped
n8n:
image: n8nio/n8n:latest
container_name: jarvis-n8n
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_USER=jarvis
- DB_POSTGRESDB_PASSWORD=${DB_PASSWORD:-ChangeMe123!}
- DB_POSTGRESDB_DATABASE=n8n
- N8N_HOST=n8n.${DOMAIN:-localhost}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_TUNNEL_URL=https://n8n.${DOMAIN:-localhost}/
- GENERIC_TIMEZONE=Europe/Berlin
volumes:
- n8n_data:/home/node/.n8n
ports:
- "5678:5678"
depends_on:
postgres:
condition: service_healthy
networks:
- jarvis-net
- proxy-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy-network"
- "traefik.http.routers.jarvis-n8n.rule=Host(`n8n.${DOMAIN:-localhost}`)"
- "traefik.http.routers.jarvis-n8n.entrypoints=websecure"
- "traefik.http.routers.jarvis-n8n.tls=true"
- "traefik.http.routers.jarvis-n8n.tls.certresolver=netcup"
- "traefik.http.services.jarvis-n8n.loadbalancer.server.port=5678"
restart: unless-stopped
jarvis-api:
image: python:3.11-slim
container_name: jarvis-api
working_dir: /app
command: >
bash -c "pip install -q -r requirements.txt &&
uvicorn main:app --host 0.0.0.0 --port 8000 --reload"
environment:
- DATABASE_URL=postgresql://jarvis:${DB_PASSWORD:-ChangeMe123!}@postgres:5432/jarvis
- REDIS_URL=redis://redis:6379
- MILVUS_HOST=milvus
- MILVUS_PORT=19530
- OLLAMA_HOST=http://ollama:11434
- OLLAMA_EMBED_MODEL=nomic-embed-text
- N8N_URL=http://n8n:5678
- CLAUDE_API_KEY=${CLAUDE_API_KEY:-}
- CLAUDE_MODEL=claude-sonnet-5
- API_KEY_ADMIN=${API_KEY_ADMIN:-}
- NEXTCLOUD_CALDAV_URL=https://cloud.ffw-onza.de/remote.php/dav/calendars/jonny/ffw-onza-alle/
- NEXTCLOUD_USER=jonny
- NEXTCLOUD_APP_PASSWORD=${NEXTCLOUD_APP_PASSWORD:-}
- EMAIL_IMAP_HOST=mx2f35.netcup.net
- EMAIL_IMAP_PORT=143
- EMAIL_SMTP_HOST=mx2f35.netcup.net
- EMAIL_SMTP_PORT=465
- EMAIL_USER=kontakt@mbo-tech-it.de
- EMAIL_PASSWORD=${EMAIL_PASSWORD:-}
- LOG_LEVEL=info
volumes:
- ./api:/app
ports:
- "8000:8000"
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
networks:
- jarvis-net
- proxy-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy-network"
- "traefik.http.routers.jarvis-api.rule=Host(`api.${DOMAIN:-localhost}`)"
- "traefik.http.routers.jarvis-api.entrypoints=websecure"
- "traefik.http.routers.jarvis-api.tls=true"
- "traefik.http.routers.jarvis-api.tls.certresolver=netcup"
- "traefik.http.services.jarvis-api.loadbalancer.server.port=8000"
restart: unless-stopped
jarvis-web:
build:
context: ./web
dockerfile: Dockerfile
container_name: jarvis-web
networks:
- proxy-network
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy-network"
- "traefik.http.routers.jarvis-web.rule=Host(`${DOMAIN:-localhost}`)"
- "traefik.http.routers.jarvis-web.entrypoints=websecure"
- "traefik.http.routers.jarvis-web.tls=true"
- "traefik.http.routers.jarvis-web.tls.certresolver=netcup"
- "traefik.http.services.jarvis-web.loadbalancer.server.port=80"
restart: unless-stopped
networks:
jarvis-net:
driver: bridge
proxy-network:
external: true
volumes:
postgres_data:
redis_data:
milvus_data:
etcd_data:
ollama_data:
n8n_data: