services: api: build: ./api-server container_name: jead-core-api ports: - "8100:8100" volumes: - ./shared:/data/shared - ./my-skill:/data/my-skill - ./agents:/data/agents - ./repos:/data/repos # Claude CLI credentials (subscription login) - ${CLAUDE_CONFIG_DIR:-~/.claude}:/root/.claude:ro - ${CLAUDE_CONFIG_FILE:-~/.claude.json}:/root/.claude.json:ro environment: - BASE_DIR=/data - DISABLE_AUTOUPDATER=1 - TZ=Asia/Bangkok restart: unless-stopped dashboard: build: ./dashboard container_name: jead-core-dashboard ports: - "3100:3100" depends_on: - api environment: - NEXT_PUBLIC_API_URL=http://api:8100 restart: unless-stopped # Tunnel แบบชั่วคราว (URL เปลี่ยนทุกครั้ง) tunnel: image: cloudflare/cloudflared:latest container_name: jead-core-tunnel command: tunnel --no-autoupdate --url http://api:8100 depends_on: - api restart: unless-stopped profiles: - tunnel # Tunnel แบบถาวร (URL ไม่เปลี่ยน — ต้องมี Cloudflare account) # วิธีใช้: # 1. สมัคร Cloudflare → Zero Trust → Tunnels → Create # 2. Copy token มาใส่ .env: CLOUDFLARE_TUNNEL_TOKEN=eyJhIjo... # 3. docker compose --profile tunnel-permanent up -d tunnel-permanent: image: cloudflare/cloudflared:latest container_name: jead-core-tunnel-permanent command: tunnel run --token ${CLOUDFLARE_TUNNEL_TOKEN:-missing} depends_on: - api restart: unless-stopped profiles: - tunnel-permanent