# Base docker-compose — shared service definition.
# Pre-built images: ghcr.io/nextlevelbuilder/goclaw (also on Docker Hub: digitop/goclaw)
#
# Combine with overlays for your deployment:
#
#   Recommended (+ Web Dashboard, pre-built images):
#     docker compose -f docker-compose.yml -f docker-compose.postgres.yml -f docker-compose.selfservice.yml up -d
#
#   Build from source (add --build):
#     docker compose -f docker-compose.yml -f docker-compose.postgres.yml -f docker-compose.selfservice.yml up -d --build
#
#   Without dashboard:  docker compose -f docker-compose.yml -f docker-compose.postgres.yml up -d
#   With OTel tracing:  docker compose -f docker-compose.yml -f docker-compose.postgres.yml -f docker-compose.otel.yml up -d --build

services:
  goclaw:
    image: ghcr.io/nextlevelbuilder/goclaw:latest
    build:
      context: .
      dockerfile: Dockerfile
      args:
        ENABLE_OTEL: "${ENABLE_OTEL:-false}"
        ENABLE_PYTHON: "${ENABLE_PYTHON:-true}"
        ENABLE_FULL_SKILLS: "${ENABLE_FULL_SKILLS:-false}"
    ports:
      - "${GOCLAW_PORT:-18790}:18790"
    env_file:
      - path: .env
        required: false
    environment:
      - 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_SKILLS_DIR=/app/data/skills
      # Debug
      - GOCLAW_TRACE_VERBOSE=${GOCLAW_TRACE_VERBOSE:-0}
    volumes:
      - goclaw-data:/app/data
      - goclaw-workspace:/app/workspace
    security_opt:
      - no-new-privileges:true
    init: true
    cap_drop:
      - ALL
    cap_add:
      - SETUID
      - SETGID
      - CHOWN
    tmpfs:
      - /tmp:rw,noexec,nosuid,size=256m
    deploy:
      resources:
        limits:
          memory: 1G
          cpus: '2.0'
          pids: 200
    networks:
      - default
      - shared
    restart: unless-stopped

volumes:
  goclaw-data:
  goclaw-workspace:

networks:
  shared:
    name: shared
    driver: bridge
