Ctrl K
ComunidadGuías…

docker-compose.base.yaml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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;