volumes: clickhouse_data: {} zookeeper-data: zookeeper-logs: kafka-data: tap-data: services: clickhouse: image: clickhouse/clickhouse-server:24.1 hostname: clickhouse container_name: clickhouse ports: - "127.0.0.1:8123:8123" - "127.0.0.1:9000:9000" volumes: - clickhouse_data:/var/lib/clickhouse environment: CLICKHOUSE_DB: default CLICKHOUSE_USER: default CLICKHOUSE_PASSWORD: clickhouse healthcheck: test: ["CMD", "clickhouse-client", "--query", "SELECT 1"] interval: 5s timeout: 3s retries: 5 zookeeper: image: confluentinc/cp-zookeeper:7.6.0 hostname: zookeeper container_name: zookeeper ports: - "127.0.0.1:2181:2181" environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 volumes: - zookeeper-data:/var/lib/zookeeper/data - zookeeper-logs:/var/lib/zookeeper/log kafka: image: confluentinc/cp-kafka:7.6.0 hostname: kafka container_name: kafka depends_on: - zookeeper ports: - "127.0.0.1:9092:9092" - "127.0.0.1:9101:9101" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_JMX_PORT: 9101 KAFKA_JMX_HOSTNAME: localhost KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' healthcheck: test: [ "CMD", "bash", "-c", "kafka-topics --bootstrap-server kafka:29092 --list", ] volumes: - kafka-data:/var/lib/kafka/data tap: image: ghcr.io/bluesky-social/indigo/tap:latest hostname: tap container_name: tap depends_on: kafka: condition: service_healthy ports: - "127.0.0.1:2480:2480" - "127.0.0.1:6010:6010" environment: TAP_BIND: ":2480" TAP_FULL_NETWORK: true TAP_DISABLE_ACKS: false TAP_COLLECTION_FILTERS: "app.bsky.graph.follow" TAP_METRICS_LISTEN: ":6010" TAP_RESYNC_PARALLELISM: 50 volumes: - tap-data:/data restart: unless-stopped atkafka: image: ghcr.io/haileyok/at-kafka:main-6f15f22 hostname: atkafka container_name: atkafka depends_on: kafka: condition: service_healthy ports: # metrics port - "127.0.0.1:6011:6009" command: ["tap-mode"] environment: ATKAFKA_TAP_HOST: "ws://tap:2480" ATKAFKA_DISABLE_ACKS: false ATKAFKA_BOOTSTRAP_SERVERS: "kafka:29092" ATKAFKA_OUTPUT_TOPIC: "tap-events" restart: unless-stopped indexer: build: . ports: - "127.0.0.1:8050:8050" depends_on: clickhouse: condition: service_healthy kafka: condition: service_healthy command: ["uv", "run", "indexer.py"] environment: KAFKA_BOOTSTRAP_SERVERS: '["kafka:29092"]' KAFKA_INPUT_TOPIC: "tap-events" CLICKHOUSE_HOST: "clickhouse" restart: unless-stopped