services: zookeeper: image: confluentinc/cp-zookeeper:7.6.0 hostname: zookeeper container_name: zookeeper network_mode: host environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 volumes: - zookeeper-data:/var/lib/zookeeper/data - zookeeper-logs:/var/lib/zookeeper/log kafka1: image: confluentinc/cp-kafka:7.6.0 hostname: kafka1 container_name: kafka1 network_mode: host depends_on: - zookeeper environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: 'localhost:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_JMX_PORT: 9101 KAFKA_JMX_HOSTNAME: localhost KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' volumes: - kafka1-data:/var/lib/kafka/data kafka2: image: confluentinc/cp-kafka:7.6.0 hostname: kafka2 container_name: kafka2 network_mode: host depends_on: - zookeeper environment: KAFKA_BROKER_ID: 2 KAFKA_ZOOKEEPER_CONNECT: 'localhost:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29093,PLAINTEXT_HOST://localhost:9093 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_JMX_PORT: 9102 KAFKA_JMX_HOSTNAME: localhost KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' volumes: - kafka2-data:/var/lib/kafka/data kafka3: image: confluentinc/cp-kafka:7.6.0 hostname: kafka3 container_name: kafka3 network_mode: host depends_on: - zookeeper environment: KAFKA_BROKER_ID: 3 KAFKA_ZOOKEEPER_CONNECT: 'localhost:2181' KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:29094,PLAINTEXT_HOST://localhost:9094 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_JMX_PORT: 9103 KAFKA_JMX_HOSTNAME: localhost KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true' volumes: - kafka3-data:/var/lib/kafka/data cassandra: image: cassandra:5.0 hostname: cassandra container_name: cassandra network_mode: host environment: CASSANDRA_CLUSTER_NAME: 'MyCluster' CASSANDRA_DC: 'dc1' CASSANDRA_RACK: 'rack1' CASSANDRA_ENDPOINT_SNITCH: 'GossipingPropertyFileSnitch' CASSANDRA_NUM_TOKENS: 256 volumes: - cassandra-data:/var/lib/cassandra healthcheck: test: ["CMD-SHELL", "cqlsh -e 'describe cluster'"] interval: 30s timeout: 10s retries: 5 database: image: ghcr.io/vylet-app/go/database:main-cef5ae4 container_name: vylet-database network_mode: host depends_on: cassandra: condition: service_healthy environment: VYLET_DATABASE_LISTEN_ADDR: ":9091" command: ["./database", "--cassandra-addrs", "127.0.0.1", "--cassandra-keyspace", "vylet"] restart: unless-stopped api: image: ghcr.io/vylet-app/go/api:main-6956838 container_name: vylet-api network_mode: host depends_on: - database environment: VYLET_API_LISTEN_ADDR: ":8085" VYLET_API_DB_HOST: "localhost:9091" VYLET_API_CDN_HOST: "https://img.cdn.staging.vylet.app" restart: unless-stopped firehose: image: ghcr.io/vylet-app/go/firehose:main-3eb83ef container_name: vylet-firehose network_mode: host depends_on: - kafka1 - kafka2 - kafka3 environment: VYLET_FIREHOSE_WEBSOCKET_HOST: "wss://bsky.network" VYLET_FIREHOSE_BOOTSTRAP_SERVERS: "localhost:9092,localhost:9093,localhost:9094" VYLET_FIREHOSE_OUTPUT_TOPIC: "firehose-events-prod" VYLET_FIREHOSE_DESIRED_COLLECTIONS: "app.vylet.*" restart: unless-stopped indexer: image: ghcr.io/vylet-app/go/indexer:main-3eb83ef container_name: vylet-indexer network_mode: host depends_on: - kafka1 - kafka2 - kafka3 - database environment: VYLET_INDEXER_DATABASE_HOST: "localhost:9091" VYLET_BOOTSTRAP_SERVERS: "localhost:9092,localhost:9093,localhost:9094" VYLET_INDEXER_INPUT_TOPIC: "firehose-events-prod" VYLET_INDEXER_CONSUMER_GROUP: "vylet-indexer-staging" METRICS_LISTEN_ADDRESS: ":6104" restart: unless-stopped cdn: image: ghcr.io/vylet-app/go/cdn:main container_name: vylet-cdn network_mode: host depends_on: - kafka1 - kafka2 - kafka3 - database environment: VYLET_CDN_DATABASE_HOST: "localhost:9091" VYLET_BOOTSTRAP_SERVERS: "localhost:9092,localhost:9093,localhost:9094" VYLET_CDN_INPUT_TOPIC: "firehose-events-prod" VYLET_CDN_CONSUMER_GROUP: "vylet-cdn-staging" restart: unless-stopped imgproxy: image: darthsim/imgproxy:latest container_name: imgproxy network_mode: host environment: IMGPROXY_BIND: ":9525" IMGPROXY_ONLY_PRESETS: "true" IMGPROXY_BASE_URL: "http://localhost:8085/xrpc/app.vylet.media.getBlob/" IMGPROXY_USE_ETAG: "true" IMGPROXY_PRESETS: "fullsize=resizing_type:fit/width:2000/height:2000/format:jpeg,thumb=resizing_type:fit/width:200/height:200/format:jpeg" IMGPROXY_ALLOW_LOOPBACK_SOURCE_ADDRESSES: "true" restart: unless-stopped volumes: zookeeper-data: zookeeper-logs: kafka1-data: kafka2-data: kafka3-data: cassandra-data: