atproto blogging
1services:
2 # Tap - AT Protocol sync utility
3 # Build from local indigo checkout, or use pre-built image
4 tap:
5 container_name: weaver-tap
6 image: ghcr.io/bluesky-social/indigo/tap:latest
7 ports:
8 - "2480:2480"
9 volumes:
10 - tap_data:/data/tap
11 environment:
12 TAP_DATABASE_URL: sqlite:///data/tap/tap.db
13 TAP_BIND: ":2480"
14 TAP_DISABLE_ACKS: "false"
15 TAP_LOG_LEVEL: info
16 # Filter to weaver collections only
17 #TAP_SIGNAL_COLLECTION: sh.weaver.edit.root
18 TAP_SIGNAL_COLLECTION: sh.tangled.actor.profile
19 TAP_COLLECTION_FILTERS: "sh.weaver.*,app.bsky.actor.profile,sh.tangled.*,pub.leaflet.*"
20 healthcheck:
21 test: ["CMD", "wget", "-q", "--spider", "http://localhost:2480/health"]
22 interval: 20s
23 timeout: 5s
24 retries: 3
25
26 # Weaver indexer - consumes from tap or direct firehose
27 indexer:
28 container_name: weaver-indexer
29 build:
30 context: .
31 dockerfile: crates/weaver-index/Dockerfile
32 command: ["run"]
33 ports:
34 - "3000:3000"
35 environment:
36 RUST_LOG: debug,weaver_index=debug,hyper_util::client::legacy::pool=info
37 # ClickHouse connection (set these for your cloud/homelab instance)
38 CLICKHOUSE_URL: ${CLICKHOUSE_URL}
39 CLICKHOUSE_DATABASE: ${CLICKHOUSE_DATABASE:-weaver}
40 CLICKHOUSE_USER: ${CLICKHOUSE_USER}
41 CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD}
42 # Source mode: "firehose" or "tap"
43 INDEXER_SOURCE: tap
44 # Tap connection (when INDEXER_SOURCE=tap)
45 TAP_URL: ws://tap:2480/channel
46 TAP_SEND_ACKS: "true"
47 # Firehose connection (when INDEXER_SOURCE=firehose)
48 FIREHOSE_RELAY_URL: wss://bsky.network
49 # Collection filters
50 INDEXER_COLLECTIONS: "sh.weaver.*,app.bsky.actor.profile,sh.tangled.*,pub.leaflet.*"
51 depends_on:
52 tap:
53 condition: service_healthy
54 healthcheck:
55 test: ["CMD", "wget", "-q", "--spider", "http://localhost:2480/xrpc/_health"]
56 interval: 20s
57 timeout: 5s
58 retries: 3
59
60volumes:
61 tap_data: