1services: 2 # ClickHouse - analytics database (internal only, no host ports exposed) 3 clickhouse: 4 image: clickhouse/clickhouse-server:25.11 5 container_name: weaver-clickhouse 6 # No ports exposed to host - only accessible via docker network 7 ports: 8 - "8123:8123" 9 - "9000:9000" 10 volumes: 11 - ~/data/clickhouse:/var/lib/clickhouse 12 - ~/data/clickhouse-logs:/var/log/clickhouse-server 13 - ~/data/clickhouse-config:/etc/clickhouse-server/config.d 14 environment: 15 CLICKHOUSE_DB: ${CLICKHOUSE_DATABASE:-weaver} 16 CLICKHOUSE_USER: ${CLICKHOUSE_USER:-default} 17 CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} 18 CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 19 ulimits: 20 nofile: 21 soft: 262144 22 hard: 262144 23 healthcheck: 24 test: ["CMD", "wget", "--spider", "-q", "http://localhost:8123/ping"] 25 interval: 10s 26 timeout: 5s 27 retries: 3 28 restart: unless-stopped 29 30 # Docker registry for local image hosting 31 registry: 32 image: registry:2 33 container_name: weaver-registry 34 ports: 35 - "5000:5000" 36 volumes: 37 - registry_data:/var/lib/registry 38 restart: unless-stopped 39 40 # Tap - AT Protocol sync utility 41 tap: 42 container_name: weaver-tap 43 image: ghcr.io/bluesky-social/indigo/tap:latest 44 ports: 45 - "2480:2480" 46 volumes: 47 - tap_data:/data/tap 48 environment: 49 TAP_DATABASE_URL: sqlite:///data/tap/tap.db 50 TAP_BIND: ":2480" 51 TAP_DISABLE_ACKS: "false" 52 TAP_LOG_LEVEL: info 53 TAP_OUTBOX_PARALLELISM: 5 54 #TAP_FULL_NETWORK: true 55 #TAP_SIGNAL_COLLECTION: place.stream.chat.profile 56 TAP_SIGNAL_COLLECTION: sh.weaver.actor.profile 57 TAP_COLLECTION_FILTERS: "sh.weaver.*,app.bsky.actor.profile,sh.tangled.*,pub.leaflet.*,net.anisota.*,place.stream.*" 58 healthcheck: 59 test: ["CMD", "wget", "-q", "--spider", "http://localhost:2480/health"] 60 interval: 20s 61 timeout: 5s 62 retries: 3 63 restart: unless-stopped 64 65 # Weaver indexer - consumes from tap 66 index: 67 container_name: weaver-index 68 image: ${REGISTRY_HOST:-localhost}:5000/weaver-index:latest 69 ports: 70 - "3000:3000" 71 command: ["run"] 72 volumes: 73 - index_data:/app/data 74 environment: 75 RUST_LOG: info,weaver_index=debug,hyper_util::client::legacy::pool=info 76 CLICKHOUSE_URL: http://clickhouse:8123 77 CLICKHOUSE_DATABASE: ${CLICKHOUSE_DATABASE:-weaver} 78 CLICKHOUSE_USER: ${CLICKHOUSE_USER:-default} 79 CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD} 80 INDEXER_SOURCE: tap 81 TAP_URL: ws://tap:2480/channel 82 TAP_SEND_ACKS: "true" 83 FIREHOSE_RELAY_URL: wss://bsky.network 84 INDEXER_COLLECTIONS: "sh.weaver.*,app.bsky.actor.profile,sh.tangled.*,pub.leaflet.*,net.anisota.*,place.stream.*" 85 depends_on: 86 tap: 87 condition: service_healthy 88 clickhouse: 89 condition: service_healthy 90 healthcheck: 91 test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://localhost:3000/xrpc/_health"] 92 interval: 20s 93 timeout: 5s 94 retries: 3 95 restart: unless-stopped 96 97 # Weaver app - web frontend 98 weaver-app: 99 container_name: weaver-app 100 image: ${REGISTRY_HOST:-localhost}:5000/weaver-app:latest 101 ports: 102 - "8080:8080" 103 environment: 104 PORT: 8080 105 IP: 0.0.0.0 106 RUST_LOG: info 107 healthcheck: 108 test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/"] 109 interval: 20s 110 timeout: 5s 111 retries: 3 112 restart: unless-stopped 113 114volumes: 115 registry_data: 116 tap_data: 117 index_data: