Files
goclaw/docker-compose.yml
T
Luvu182 1c9e8db8e4 fix: OpenAI-compat SSE parsing, scanner error check, reasoning passback, and env var parity
- SSE: handle "data:" without space (Kimi and other providers)
- Add scanner.Err() check to detect stream read failures
- Echo reasoning_content for thinking models (Kimi, DeepSeek)
- Add Thinking field to Message struct for reasoning passback
- Add GOCLAW_OPENAI_BASE_URL env var override (parity with Anthropic)
2026-03-04 09:38:38 +07:00

79 lines
2.9 KiB
YAML

# Base docker-compose — shared service definition.
# Combine with an overlay for your deployment mode:
#
# Recommended (Managed + Web Dashboard):
# docker compose -f docker-compose.yml -f docker-compose.managed.yml -f docker-compose.selfservice.yml up -d --build
#
# Standalone: docker compose -f docker-compose.yml -f docker-compose.standalone.yml up -d --build
# Managed only: docker compose -f docker-compose.yml -f docker-compose.managed.yml up -d --build
# Managed+OTel: docker compose -f docker-compose.yml -f docker-compose.managed.yml -f docker-compose.otel.yml up -d --build
services:
goclaw:
build:
context: .
dockerfile: Dockerfile
args:
ENABLE_OTEL: "false"
ports:
- "${GOCLAW_PORT:-18790}:18790"
env_file:
- path: .env
required: false
environment:
# Core
- GOCLAW_HOST=0.0.0.0
- GOCLAW_PORT=18790
- GOCLAW_CONFIG=/app/data/config.json
- GOCLAW_GATEWAY_TOKEN=${GOCLAW_GATEWAY_TOKEN:-}
- GOCLAW_ENCRYPTION_KEY=${GOCLAW_ENCRYPTION_KEY:-}
- GOCLAW_OWNER_IDS=${GOCLAW_OWNER_IDS:-}
# Provider (at least one required)
- GOCLAW_PROVIDER=${GOCLAW_PROVIDER:-}
- GOCLAW_MODEL=${GOCLAW_MODEL:-}
- GOCLAW_OPENROUTER_API_KEY=${GOCLAW_OPENROUTER_API_KEY:-}
- GOCLAW_ANTHROPIC_API_KEY=${GOCLAW_ANTHROPIC_API_KEY:-}
- GOCLAW_ANTHROPIC_BASE_URL=${GOCLAW_ANTHROPIC_BASE_URL:-}
- GOCLAW_OPENAI_API_KEY=${GOCLAW_OPENAI_API_KEY:-}
- GOCLAW_OPENAI_BASE_URL=${GOCLAW_OPENAI_BASE_URL:-}
- GOCLAW_MINIMAX_API_KEY=${GOCLAW_MINIMAX_API_KEY:-}
- GOCLAW_GROQ_API_KEY=${GOCLAW_GROQ_API_KEY:-}
- GOCLAW_DEEPSEEK_API_KEY=${GOCLAW_DEEPSEEK_API_KEY:-}
- GOCLAW_GEMINI_API_KEY=${GOCLAW_GEMINI_API_KEY:-}
- GOCLAW_MISTRAL_API_KEY=${GOCLAW_MISTRAL_API_KEY:-}
- GOCLAW_XAI_API_KEY=${GOCLAW_XAI_API_KEY:-}
- GOCLAW_COHERE_API_KEY=${GOCLAW_COHERE_API_KEY:-}
- GOCLAW_PERPLEXITY_API_KEY=${GOCLAW_PERPLEXITY_API_KEY:-}
# Channels
- GOCLAW_TELEGRAM_TOKEN=${GOCLAW_TELEGRAM_TOKEN:-}
- GOCLAW_DISCORD_TOKEN=${GOCLAW_DISCORD_TOKEN:-}
- GOCLAW_LARK_APP_ID=${GOCLAW_LARK_APP_ID:-}
- GOCLAW_LARK_APP_SECRET=${GOCLAW_LARK_APP_SECRET:-}
- GOCLAW_LARK_ENCRYPT_KEY=${GOCLAW_LARK_ENCRYPT_KEY:-}
- GOCLAW_LARK_VERIFICATION_TOKEN=${GOCLAW_LARK_VERIFICATION_TOKEN:-}
- GOCLAW_ZALO_TOKEN=${GOCLAW_ZALO_TOKEN:-}
- GOCLAW_WHATSAPP_BRIDGE_URL=${GOCLAW_WHATSAPP_BRIDGE_URL:-}
# Debug
- GOCLAW_TRACE_VERBOSE=${GOCLAW_TRACE_VERBOSE:-0}
volumes:
- goclaw-data:/app/data
- goclaw-workspace:/app/workspace # standalone mode workspace
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
read_only: true
tmpfs:
- /tmp:rw,noexec,nosuid,size=256m
deploy:
resources:
limits:
memory: 1G
cpus: '2.0'
pids: 200
restart: unless-stopped
volumes:
goclaw-data:
goclaw-workspace: