services: kafka: image: confluentinc/cp-kafka:8.0.3@sha256:db5eac24a1d15a1689fa89642ef97a7e3bc4f55ad5159a07b213c4dc7d0114e3 environment: CLUSTER_ID: ca497efe-9f82-4b84-890b-d9969a9a2e1c KAFKA_BROKER_ID: 0 KAFKA_PROCESS_ROLES: "broker,controller" KAFKA_CONTROLLER_QUORUM_VOTERS: "0@kafka:9093" KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://localhost:29092 KAFKA_LISTENERS: INTERNAL://kafka:9092,EXTERNAL://0.0.0.0:29092,CONTROLLER://kafka:9093 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false" # Message timestamp validation # See: # * https://cwiki.apache.org/confluence/display/KAFKA/KIP-937%3A+Improve+Message+Timestamp+Validation # * https://kafka.apache.org/41/configuration/broker-configs/#brokerconfigs_log.message.timestamp.before.max.ms # * https://kafka.apache.org/41/configuration/broker-configs/#brokerconfigs_log.message.timestamp.after.max.ms KAFKA_LOG_MESSAGE_TIMESTAMP_AFTER_MAX_MS: 9223372036854775807 JMX_PORT: 9997 KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=kafka -Dcom.sun.management.jmxremote.rmi.port=9997" healthcheck: test: [ "CMD-SHELL", "JMX_PORT=9998", "kafka-topics", "--bootstrap-server", "kafka:9092", "--list", ] interval: 5s timeout: 3s retries: 30 clickhouse: image: clickhouse/clickhouse-server:25.12.3-alpine@sha256:74da41cd61db84f652c6364fd30d59e19b7276d34f7c82515f5f0e70d6f325da environment: CLICKHOUSE_USER: default CLICKHOUSE_PASSWORD: default CLICKHOUSE_DB: openmeter CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 ulimits: nofile: soft: 262144 hard: 262144 healthcheck: test: ["CMD", "wget", "--spider", "http://clickhouse:8123/ping"] interval: 5s timeout: 3s retries: 30 ch-ui: image: ghcr.io/caioricciuti/ch-ui:1.6.4@sha256:556926565654c7d7177f4b92788f5b42a98b14f3652815b1d94db4711dc48f5b profiles: - dev depends_on: - clickhouse restart: always environment: VITE_CLICKHOUSE_URL: http://localhost:8123 VITE_CLICKHOUSE_USER: default VITE_CLICKHOUSE_PASS: default # Deduplication # docker compose --profile redis up redis: image: redis:7.4.7@sha256:c6e4a82ce60b829a72a21cc4ad4c1c274fa6962eb0d6ac698e8157cbc3fe16a4 command: [ "redis-server", "--maxmemory", "50mb", "--maxmemory-policy", "noeviction", "--maxmemory-samples", "10", ] healthcheck: test: ["CMD-SHELL", "redis-cli ping | grep PONG"] interval: 5s timeout: 3s retries: 30 # Development # docker compose --profile dev up kafka-ui: image: ghcr.io/kafbat/kafka-ui:328aedb depends_on: - kafka environment: KAFKA_CLUSTERS_0_NAME: local KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092 KAFKA_CLUSTERS_0_METRICS_PORT: 9997 DYNAMIC_CONFIG_ENABLED: "true" healthcheck: test: ["CMD", "wget", "--spider", "http://kafka-ui:8080/"] interval: 10s timeout: 5s retries: 30 # Credit # docker compose --profile postgres up postgres: image: postgres:14.20-alpine3.23@sha256:14f02666642586a64d6fae8ef42d479fd76456a77c73ae8a626b8fe323b76d22 environment: - POSTGRES_USER=postgres - POSTGRES_DB=postgres - POSTGRES_PASSWORD=postgres - POSTGRES_HOST_AUTH_METHOD=md5 configs: - source: svix_sql target: /docker-entrypoint-initdb.d/svix.sql mode: 0444 command: ["postgres", "-c", "wal_level=logical"] healthcheck: test: ["CMD", "pg_isready", "-d", "postgres", "-U", "postgres"] interval: 10s timeout: 5s retries: 30 svix: image: svix/svix-server:v1.101@sha256:7ba594c766c882dea9c868cd38957755b1d5c8bc5020f81cf5521ba5ab5adc11 environment: WAIT_FOR: "true" # We want to wait for the default services SVIX_REDIS_DSN: "redis://redis:6379" SVIX_DB_DSN: "postgresql://svix:svix@postgres/svix" SVIX_CACHE_TYPE: "redis" SVIX_JWT_SECRET: "DUMMY_JWT_SECRET" SVIX_LOG_LEVEL: "info" SVIX_QUEUE_TYPE: "redis" depends_on: - postgres - redis healthcheck: test: [ "CMD", "svix-server", "healthcheck", "http://localhost:8071" ] interval: 10s timeout: 5s retries: 30 configs: svix_sql: content: | CREATE USER svix WITH PASSWORD 'svix'; CREATE DATABASE svix; GRANT ALL PRIVILEGES ON DATABASE svix TO svix; ALTER DATABASE svix OWNER TO svix;